導航:首頁 > 源碼編譯 > androidlinux內核源碼編譯

androidlinux內核源碼編譯

發布時間:2022-09-11 00:03:49

A. 如何編譯android手機源碼

編譯android系統源碼准備工作:
下載android源碼
在windows上用gitbash ,git clone 下載代碼
linux上這樣下載
創建~/bin目錄,用來存放repo程序,如下:

$ cd ~
$ mkdir bin
初始化repo
repo是android對git的一個封裝,簡化了一些git的操作。
創建工程目錄:
$ mkdir android
$ cd android
下載repo腳本並使其可執行:
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
repo初始化:
$ repo init -u git://android.git.kernel.org/platform/manifest.git
在此過程中需要輸入名字和email地址。初始化成功後,會顯示:
repo initialized in /android
在~/android下會有一個.repo的隱藏目錄。
5)同步源代碼
$ repo sync
這一步要很久很久。
安裝linux系統,推薦ubuntu,圖形界面
安裝編譯需要的支持包
$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
安裝java6.0
$ sudo apt-get install sun-java6-jdk
配置java環境
sudo gedit ~/.bashrc

末尾加上

JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};
sudo source ~/.bashrc
是環境變數生效

編譯android源碼,並得到~/android/out目錄

$ cd ~/andoird
$ make
這一過程很久。
這就編譯結束了

B. 如何在32位ubuntu11.10 下編譯android 4.0.1源碼和goldfish內核

一準備工作

1安裝javasdk6
(1)從jdk官方網站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html下載jdk-6u29-linux-i586.bin文件。
(2)執行jdk安裝文件

[html] view plain
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin

(3)配置jdk環境變數

[html] view plain
$sudo vim /etc/profile
[html] view plain
#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

保存後退出編輯,並重啟系統。
2安裝依賴包

[html] view plain
$sudo apt-get install git-core gnupg flex bison gperf build-essential\
zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
libxml2-utils

3用repo工具下載源碼
(1)初始化repo

[html] view plain
$cd ~
$mkdir bin
$curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
$chmod a+x ~/bin/repo
$exportPATH=$PATH:~/bin(導出環境變數)

(2)下載android最新源碼

[html] view plain
$mkdir android
$cd android
$ repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.0.1_r1
...(輸入用戶名和郵箱名)
$repo sync -j5
...(此處用5個線程開始下載源碼,下載過程及其漫長,需要耐心等待)

二 編譯源碼
1開始編譯

[html] view plain
$source build/envsetup.sh
includingdevice/samsung/maguro/vendorsetup.sh

includingdevice/samsung/tuna/vendorsetup.sh

includingdevice/ti/panda/vendorsetup.sh

includingsdk/bash_completion/adb.bash

$make-j4(此處用4個線程編譯)

編譯完成後,會看到類似的輸出:

[html] view plain
Targetramdisk:out/target/proct/generic/ramdisk.img
Targetuserdatafsimage:out/target/proct/generic/userdata.img
Installedfilelist:out/target/proct/generic/installed-files.txt

2編譯遇到的問題
編譯錯誤:

[html] view plain
<命令行>:0:0:錯誤:「_FORTIFY_SOURCE」重定義[-Werror]

<built-in>:0:0:附註: 這是先前定義的位置

cc1plus:所有的警告都被當作是錯誤

make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]錯誤 1

原因:
因機器上的gcc版本過高,需替換成4.4.6重新進行編譯。
解決方法:
1)安裝4.4版本的gcc和g++

[html] view plain
$ sudo apt-get install gcc-4.4
$ sudo apt-get install g++-4.4

2)設置gcc版本,使gcc鏈接到gcc-4.4

[html] view plain
$ ls -l /usr/bin/gcc*

lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6

-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4

-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-4.6

$ cd /usr/bin
$ sudo mv gcc gcc.bak
$ sudo ln -s gcc-4.4 gcc

3)設置g++版本,使g++鏈接到g++-4.4

[html] view plain
$ sudo mv g++ g++.bak
$ sudo ln -s g++-4.4 g++

4)設置完畢後,重新進行編譯即可

3從模擬器啟動編譯後的鏡像文件
1)設置環境變數:

[html] view plain
export PATH=~/android/out/host/linux-x86/bin:$PATH

export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic

其中linux-x86/bin存放模擬器emulator工具,proct/generic存在編譯後的鏡像文件。

2)啟動模擬器

[html] view plain
$emulator

emulator:WARNING: system partition size adjusted to match image file (162 MB >66 MB)

啟動後的截圖:

三 編譯androidgoldfish內核
1)進入android4.0.1源碼目錄,下載goldfish內核源碼

[html] view plain
$ mkdir kernel
$ cd kernel
$ git clone http://android.googlesource.com/kernel/goldfish.git
$ cd goldfish
$ git branch -a
* (no branch)

master

remotes/origin/HEAD -> origin/master

remotes/origin/android-goldfish-2.6.29

remotes/origin/master

$ git checkout remotes/origin/android-goldfish-2.6.29

2)修改Makefile

[html] view plain
goldfish$ gedit Makefile

修改

[html] view plain
ARCH ?=$(SUBARCH)
CROSS_COMPILE ?=



[html] view plain
ARCH ?=arm
CROSS_COMPILE ?=arm-eabi-

3)導出交叉編譯器目錄為環境變數
$ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

4)編譯內核

[html] view plain
goldfish$ make goldfish_armv7_defconfig

goldfish$ make

編譯完成後,可看到類似如下的輸出:

[html] view plain
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

5)從模擬器中啟動內核鏡像

[html] view plain
$emulator -kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &

啟動模擬器後,可從Settings->System->AboutPhone中查看內核版本信息。

C. 如何在 Android 源碼環境下增大 Linux 內核的 kernel log 的緩存...

需要修改 Linux 內核源碼中的一個控制 log buffer size 的宏:CONFIG_LOG_BUF_SHIFT,buffer size 是 2 ^ shift,加大這個就可以。

一、配置

$ make menuconfig

General setup
(18)Kernel log buffer size (16 => 64KB,17 => 128KB)

二、源碼

kernel/printk.c

#define __LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)

static char __log_buf[__LOG_BUF_LEN];

可以看到,是已經在編譯時定死的一塊靜態空間,不能動態調整了。對於內核日誌,唯一可以調整的在:/proc/sys/kernel/printk*

三、限制

init/Kconfig

config LOG_BUF_SHIFT
int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
range 12 21
default 17
help
Select kernel log buffer size as a power of 2.
Examples:
17 => 128 KB
16 => 64 KB
15 => 32 KB
14 => 16 KB
13 => 8 KB
12 => 4 KB

可以看到 shift 最大值限制到了 21,也就是:2 M

$ echo "(2^21)/1024/1024" | bc
2

如果再要加大,只能改源碼了。

D. android 怎樣編譯kernel 命令 make

方法如下:
在Linux的環境下:
建立目錄:

mkdir ~/android-kernel cd android-kernel

下載源代碼, 大概有280MB, 慢慢等哈~~~ (當然你要先安裝git) git clone git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git
類似的屏幕信息:
Initialized empty Git repository in /home/user/android-kernel/kernel/.git/ remote: Counting objects: 908251, done.
remote: Compressing objects: 100% (153970/153970), done.
remote: Total 908251 (delta 755115), reused 906063 (delta 753016) Receiving objects: 100% (908251/908251), 281.86 MiB | 292 KiB/s, done. Resolving deltas: 100% (755115/755115), done. Checking out files: 100% (22584/22584), done.
然後去到htc-msm branch: cd kernel
git checkout -b htc-msm origin/htc-msm
屏幕信息:
Branch htc-msm set up to track remote branch refs/remotes/origin/htc-msm. Switched to a new branch "htc-msm"

下載ARM的toolchain, 大概64MB左右, 下到~/android-kernel: 下

:
http://www.codesourcery.com/gnu_toolchains/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

cd ~/android-kernel
tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
編譯kernel

准備預設的Kaiser 配置文件.config
cd ~/android-kernel/kernel

make htckaiser_defconfig ARCH=arm
然後編譯zImage:
export PATH=~/android-kernel/arm-2008q1/bin:$PATH
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
編譯好的在: ~/android-kernel/kernel/arch/arm/boot/zImage

如果你的機器是多核的, 可以編譯的時候用-j <cores/cpus_number>來加速:
比如, 雙核的可以:
make -j 2 zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi
滿意請採納謝謝

E. 編譯android 源碼需要sdk環境嗎

下面是android學習手冊,可以查看編譯源碼,360手機助手中下載,

編譯環境:ubuntu9.10,widnows平台目前不被支持。

1)安裝必要的軟體環境

$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

官方推薦的就是上面這些,如果在編譯過程中發現某些命令找不到,就apt-get它。可能需要的包還有:

$ sudo apt-get install make
$ sudo apt-get install gcc
$ sudo apt-get install g++
$ sudo apt-get install libc6-dev

$ sudo apt-get install patch
$ sudo apt-get install texinfo

$ sudo apt-get install zlib1g-dev
$ sudo apt-get install valgrind
$ sudo apt-get install python2.5(或者更高版本)

需要注意的是,官方文檔說如果用sun-java6-jdk可出問題,得要用sun-java5- jdk。經測試發現,如果僅僅make(make不包括make sdk),用sun-java6-jdk是沒有問題的。而make sdk,就會有問題,嚴格來說是在make doc出問題,它需要的javadoc版本為1.5。

因此,我們安裝完sun-java6-jdk後最好再安裝sun-java5-jdk,或者只安裝sun-java5-jdk。這里sun-java6-jdk和sun-java5-jdk都安裝,並只修改javadoc.1.gz和javadoc。因為只有這兩個是make sdk用到的。這樣的話,除了javadoc工具是用1.5版本,其它均用1.6版本:

$ sudo apt-get install sun-java6-jdk

修改javadoc的link:

$ cd /etc/alternatives
$ sudo rm javadoc.1.gz
$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz
$ sudo rm javadoc
$ sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc

2)設置環境變數

$ emacs ~/.bashrc

在.bashrc中新增或整合PATH變數,如下:

#java 程序開發/運行的一些環境變數

JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN};

保存後,同步更新:

source ~/.bashrc

3)安裝repo(用來更新android源碼)

創建~/bin目錄,用來存放repo程序,如下:

$ cd ~
$ mkdir bin

並加到環境變數PATH中,在第2步中已經加入。

下載repo腳本並使其可執行:

$ curlhttp://android.git.kernel.org/repo>~/bin/repo
$ chmod a+x ~/bin/repo

4)初始化repo

repo是android對git的一個封裝,簡化了一些git的操作。

創建工程目錄:

$ mkdir android
$ cd android

repo初始化:

$ repo init -u git://android.git.kernel.org/platform/manifest.git

在此過程中需要輸入名字和email地址。初始化成功後,會顯示:

repo initialized in /android

在~/android下會有一個.repo的隱藏目錄。

5)同步源代碼

$ repo sync

這一步要很久很久。

6)編譯android源碼,並得到~/android/out目錄

$ cd ~/andoird
$ make

這一過程很久。

7)在模擬器上運行編譯好的android

編譯好android之後,emulator在~/android/out/host/linux-x86/bin下,ramdisk.img,system.img和userdata.img則在~/android/out/target/proct/generic下。

$ cd ~/android/out/host/linux-x86/bin

增加環境變數

$ emacs ~/.bashrc

在.bashrc中新增環境變數,如下

#java 程序開發/運行的一些環境變數

export ANDROID_PRODUCT_OUT=~/android/out/target/proct/generic
ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT};

最後,同步這些變化:

$ source ~/.bashrc
$ cd ~/android/out/target/proct/generic
$ emulator -system system.img -data userdata.img -ramdisk ramdisk.img

最後進入android桌面,就說明成功了。

8)編譯模塊

android中的一個應用程序可以單獨編譯,編譯後要重新生成system.img。

在源碼目錄下執行

$ . build/envsetup.sh (.後面有空格)

就多出一些命令:

- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.

可以加—help查看用法。

我們可以使用mmm來編譯指定目錄的模塊,如編譯聯系人:

$ mmm packages/apps/Contacts/

編完之後生成兩個文件:

out/target/proct/generic/data/app/ContactsTests.apk
out/target/proct/generic/system/app/Contacts.apk

可以使用

$ make snod

重新生成system.img,再運行模擬器。

9)編譯SDK

直接執行make是不包括make sdk的。make sdk用來生成SDK,這樣,我們就可以用與源碼同步的SDK來開發android了。

a)修改/frameworks/base/include/utils/Asset.h

『UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024』 改為 『UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024』

原因是eclipse編譯工程需要大於1.3M的buffer;

b)編譯ADT

由於本人不使用eclipse,所以沒有進行這步;

c)執行make sdk

注意,這里需要的javadoc版本為1.5,所以你需要在步驟1中同時安裝sun-java5-jdk

$ make sdk

編譯很慢。編譯後生成的SDK存放在out/host/linux-x86/sdk/,此目錄下有android-sdk_eng.xxx_linux- x86.zip和android-sdk_eng.xxx_linux-x86目錄。android-sdk_eng.xxx_linux-x86就是 SDK目錄。

實際上,當用mmm命令編譯模塊時,一樣會把SDK的輸出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出來。

此後的應用開發,就在該SDK上進行,所以把7)對於~/.bashrc的修改注釋掉,增加如下一行:

export PATH=${PATH}:~/android/out/host/linux-x86/sdk/android-sdk_eng.xxx_linux-x86/tools

注意要把xxx換成真實的路徑;

d)關於環境變數、android工具的選擇

目前的android工具有:

A、我們從網上下載的Android SDK,如果你下載過的話( tools下有許多android工具,lib/images下有img映像)
B、我們用make sdk編譯出來的SDK( tools下也有許多android工具,lib/images下有img映像)
C、我們用make編譯出來的out目錄( tools下也有許多android工具,lib/images下有img映像)

那麼我們應該用那些工具和img呢?

首先,我們一般不會用A選項的工具和img,因為一般來說它比較舊,也源碼不同步。其次,也不會用C選項的工具和img,因為這些工具和img沒有經過SDK的歸類處理,會有工具和配置找不到的情況;事實上,make sdk產生的很多工具和img,在make編譯出來out目錄的時候,已經編譯產生了,make sdk只是做了而已。

e)安裝、配置ADT
略過;

f)創建Android Virtual Device

編譯出來的SDK是沒有AVD(Android Virtual Device)的,我們可以通過android工具查看:

$ android list

創建AVD:

$ android create avd -t 1 -n myavd

可以android –help來查看上面命令選項的用法。創建中有一些選項,默認就行了。

再執行android list,可以看到AVD存放的位置。

以後每次運行emulator都要加-avd myavd或@myavd選項:

$ emulator -avd myavd

10)編譯linux內核映像

a)准備交叉編譯工具鏈

android代碼樹中有一個prebuilt項目,包含了我們編譯內核所需的交叉編譯工具。

b)設定環境變數

$ emacs ~/.bashrc

增加如下兩行:

export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
export ARCH=arm

保存後,同步變化:

$ source ~/.bashrc

c)獲得合適的內核源代碼

$ cd ~/android

獲得內核源代碼倉庫

$ git clone git://android.git.kernel.org/kernel/common.git kernel
$ cd kernel
$ git branch

顯示

* android-2.6.27

說明你現在在android-2.6.27這個分支上,也是kernel/common.git的默認主分支。

顯示所有head分支:

$ git branch -a

顯示

* android-2.6.27
remotes/origin/HEAD -> origin/android-2.6.27
remotes/origin/android-2.6.25
remotes/origin/android-2.6.27
remotes/origin/android-2.6.29
remotes/origin/android-goldfish-2.6.27
remotes/origin/android-goldfish-2.6.29

我們選取最新的android-goldfish-2.6.29,其中goldfish是android的模擬器模擬的CPU。

$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
$ git branch

顯示

android-2.6.27
* android-goldfish-2.6.29

我們已經工作在android-goldfish-2.6.29分支上了。

d)設定交叉編譯參數

打開kernel目錄下的Makefile文件,把CROSS_COMPILE指向剛才下載的prebuilt中的arm-eabi編譯器.

CROSS_COMPILE ?= arm-eabi-

LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,
$(call ld-option, -Wl$(comma)–build-id,))

這一行注釋掉,並且添加一個空的LDFLAGS_BUILD_ID定義,如下:

LDFLAGS_BUILD_ID =

e)編譯內核映像

$ cd ~/android/kernel
$ make goldfish_defconfig
$ make

f)測試生成的內核映像

$ emulator -avd myavd -kernel ~/android/kernel/arch/arm/boot/zImage

F. 按android官網下載的android源碼裡面有linux內核kernel嗎

從源代碼樹下載下來的最新Android源代碼,是不包括內核代碼的,也就是Android源代碼工程默認不包含Linux Kernel代碼,而是使用預先編譯好的內核,也就是prebuilt/android-arm/kernel/kernel-qemu文件。

G. 如何編譯android kernel

1.准備工作: (ubuntu1110 32位)
ubuntu等linuxOS,下載好eclipse,安裝好JDK, 安裝好android的SDK, 在eclipse中成功打開android 手機模擬器即OK。

2.初始化編譯環境 :
關注該網頁上的「installing required packages」,其中有的軟體包因為版本問題而安裝不上,不用管它,之後遇到錯誤再單獨解決。

3.下載內核源碼:
android 2.3 內核 下載需要等待一段時間。

4.下載交叉編譯器:
該步驟有可能耗費大量時間,依據網速不同,幾個小時到幾天不等,或許可以嘗試git clone 後面的地址只下載prebuilt/linux-x86/toolchain

5.設置參數以及編譯:
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ cd goldfish // 進入下載的源代碼目錄
$ git checkout <commit_from_first_step> //這個步驟我沒有做,不知道幹嘛用的
$ make goldfish_defconfig
$ make

6.報錯信息:
若有報錯說找不到 (arm-eabi-gcc command not found)等等,嘗試使用http://blog.csdn.net/davidbeckham2901/article/details/7397447 中說到的解決方案即可(即採用另外一個交叉編譯器)。

7.測試:

最後,測試一下剛才編譯的內核:emulator -avd myavd -kernel ~/goldfish/arch/arm/boot/zImageemulator若系統找不到,可以去android SDK中某文件夾找到,加入系統PATH即可。 -avd後面的參數 myavd即為模擬器的名字,這個我是在eclipse中的模擬器管理中新建的一個模擬器,用那個模擬器的名字即可。 -kernel後面的參數就找到剛才編譯出的內核的路徑。
若啟動模擬器失敗,可嘗試關閉後再啟動。第一次啟動模擬器時可能需要等待比較長的時間,3分鍾到15分鍾不等。

H. 如何編譯Android的kernel

1.准備工作: (ubuntu1110 32位)
ubuntu等linuxOS,下載好eclipse,安裝好JDK, 安裝好android的SDK, 在eclipse中成功打開android 手機模擬器即OK。

2.初始化編譯環境 :
關注該網頁上的「installing required packages」,其中有的軟體包因為版本問題而安裝不上,不用管它,之後遇到錯誤再單獨解決。

3.下載內核源碼:
android 2.3 內核 下載需要等待一段時間。

4.下載交叉編譯器:
該步驟有可能耗費大量時間,依據網速不同,幾個小時到幾天不等,或許可以嘗試git clone 後面的地址只下載prebuilt/linux-x86/toolchain

5.設置參數以及編譯:
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ cd goldfish // 進入下載的源代碼目錄
$ git checkout <commit_from_first_step> //這個步驟我沒有做,不知道幹嘛用的
$ make goldfish_defconfig
$ make

6.報錯信息:
若有報錯說找不到 (arm-eabi-gcc command not found)等等,嘗試使用採用另外一個交叉編譯器。

7.測試:

最後,測試一下剛才編譯的內核:emulator -avd myavd -kernel ~/goldfish/arch/arm/boot/zImageemulator若系統找不到,可以去android SDK中某文件夾找到,加入系統PATH即可。 -avd後面的參數 myavd即為模擬器的名字,這個我是在eclipse中的模擬器管理中新建的一個模擬器,用那個模擬器的名字即可。 -kernel後面的參數就找到剛才編譯出的內核的路徑。
若啟動模擬器失敗,可嘗試關閉後再啟動。第一次啟動模擬器時可能需要等待比較長的時間。

I. 怎麼在Android程序里載入linux內核模塊

工具/原料

Android程序里載入linux內核模塊
方法/步驟

java層。 java.lang.Runtime's exec() methods:native層就是jni了。
可以用popen() 。
但指令知否支持就得看bionic了。
也可以嘗試system() and pipe。
普通apk不可能有root許可權,除非機器被root了,使用Runtime.exec之類的執行su -c insmod xx.kosu為root的象徵,配合superuser使用 。
在終端下使用su進入root用戶,然後insmod xx.ko這個肯定可以成功的,因為insmod在root用戶下執行的。但是Java的Runtime.exec()也好,Native層execl()也好,只能用su -c命令臨時在root用戶下執行一條指令。adb shell進入終端,普通用戶下執行su -c insmod xx.ko,會發現命令執行失敗,失敗原因就是需要注意的地方,su的-c參數只把下一個變數作為可執行的指令,因此其執行的命令是insmod而參數並沒有傳遞過去,xx.ko作為了su的參數,因此如果想執行成功我們需要使用su -c "insmod xx.ko",將傳遞給insmod的參數和命令組合成一個參數。這樣的話在Java層和Native層執行失敗的問題也可以解決了,在Runtime.exec()中將命令格式進行格式化,比如Runtime.exec(「su -c 」 + "\"insmod xx.ko\"" ),或者在Native中執行execl("/sytem/bin/su","/sytem/bin/su","-c","insmod xx.ko", NULL),這樣最終傳遞給shell的命令就是su -c "insmod xx.ko"了。

J. 編譯linux內核和編譯linuxROM有什麼區別

如果我沒理解錯的話,你的「linux
內核」是針對PC,intel處理器;「linux
ROM」是針對移動設備(比如adnroid
內核),ARM處理器。那區別就是編譯器把內核翻譯成intel能懂的機器語言,還是arm能懂得,他們架構完全不一樣以及使用完全不同的指令集。
//////////////////////////////////////////////////////////////////////////////
android內核是指google
基於linux
kernel定製的操作系統內核,主要添加了一些android設備驅動,是具備跨平台能力的源碼;android
ROM是指編譯好的整個android操作系統,不光光是內核了,還有外圍的一些庫,等等;andriod源碼是指整個android
操作系統的源碼,包括內核,各種庫,java層封裝,sdk等等。

閱讀全文

與androidlinux內核源碼編譯相關的資料

熱點內容
卡爾曼濾波演算法書籍 瀏覽:765
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:841
安卓怎麼下載60秒生存 瀏覽:800
外向式文件夾 瀏覽:233
dospdf 瀏覽:428
怎麼修改騰訊雲伺服器ip 瀏覽:385
pdftoeps 瀏覽:490
為什麼鴻蒙那麼像安卓 瀏覽:733
安卓手機怎麼拍自媒體視頻 瀏覽:183
單片機各個中斷的初始化 瀏覽:721
python怎麼集合元素 瀏覽:477
python逐條解讀 瀏覽:829
基於單片機的濕度控制 瀏覽:496
ios如何使用安卓的帳號 瀏覽:880
程序員公園采訪 瀏覽:809
程序員實戰教程要多長時間 瀏覽:972
企業數據加密技巧 瀏覽:132
租雲伺服器開發 瀏覽:811
程序員告白媽媽不同意 瀏覽:333
攻城掠地怎麼查看伺服器 瀏覽:600