首先要注意的是:在進行環境變量的配置或者涉及到跟目錄有關的操做時必定要注意你本身的目錄是什麼,你本身的android source放在哪一個目錄下,不要徹底copy個人PATH的路徑 。
說明:home/dell/WORKING_DIRECTORY --我全部的android源碼都放在這個目錄中,並且還在這個目錄下創建了一個kernel目錄,將內核源碼放在裏面。即,個人內核目錄是:home/dell/WORKING_DIRECTORY /kernel/
html
1、下載編譯內核源碼 linux
一、下載內核源碼 android
http://my.oschina.net/u/561492/blog/88903 shell
二、設置環境變量打開用戶目錄下的.bashrc文件,在後面添加以下代碼 ubuntu
export PATH=$PATH:~/ android/source /prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin 注意:你本身的android源碼不必定是放在/android/source下,因此要找到本身的android源碼目錄
如:export PATH=$PATH:~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin bash
二、make menuconfig (進行各類配置)
(對內核沒有要求的能夠不用配置,直接跳過, 若是要使編譯的android kernel支持moudle(LKM),進一步配置時請參考: http://my.oschina.net/u/561492/blog/89139) 工具
編譯完成以後,會在「kernel/arch/arm/boot/」目錄下生成名爲zImage的文件。 ui
2、下載編譯android source spa
一、下載android source
官網:http://source.android.com/source/downloading.html
下載的時候,可能會出現各類異常,如,網斷了、電腦司機了。這時你能夠從新運行指令:repo sync,它將繼續重斷點開始下載。
若是文件夾裏什麼也沒有、或者遇到以下錯誤 :error: Exited sync due to gc errors ,請嘗試運行下面的指令。 .net
repo sync -j1
以超級用戶建立新配置文件/etc/udev/rules.d/51-android.rules,並將如下內容拷貝到新配置文件中:
01 | # adb protocol on passion (Nexus One) |
02 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>" |
03 | # fastboot protocol on passion (Nexus One) |
04 | SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>" |
05 | # adb protocol on crespo/crespo4g (Nexus S) |
06 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>" |
07 | # fastboot protocol on crespo/crespo4g (Nexus S) |
08 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>" |
09 | # adb protocol on stingray/wingray (Xoom) |
10 | SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>" |
11 | # fastboot protocol on stingray/wingray (Xoom) |
12 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>" |
13 | # adb protocol on maguro/toro (Galaxy Nexus) |
14 | SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>" |
15 | # fastboot protocol on maguro/toro (Galaxy Nexus) |
16 | SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>" |
17 | # adb protocol on panda (PandaBoard) |
18 | SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>" |
19 | # fastboot protocol on panda (PandaBoard) |
20 | SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>" |
而且將以上內容中的
1 | 「<username>」 |
修改成用戶名,如修改成」dell」。
四、編譯 3、安裝編譯好的Android鏡像到模擬器上。
1. 設置環境變量: (配置時必定要注意你本身的目錄是什麼,你本身的android source放在哪一個目錄下,不要徹底copy個人PATH的路徑)
export ANDROID_PRODUCT_OUT=~/WORKING_DIRECTORY/out/target/product/generic
2. 運行模擬器。
USER-NAME@MACHINE-NAME:~/WORKING_DIRECTORY$ emulator
固然,咱們也能夠以指定的鏡像文件來運行模擬器,即運行emulator時,即:
四. 在模擬器中運行編譯好的內核。
1. 在啓動模擬器以前,先設置模擬器的目錄到環境變量$PATH中去:(第三步配置過的能夠省略)
export PATH=$PATH:~/WORKING_DIRECTORY/out/host/linux-x86/bin
2. 設置ANDROID_PRODUCT_OUT環境變量:
export ANDROID_PRODUCT_OUT=~/WORKING_DIRECTORY/out/target/product/generic
3. 在後臺中指定內核文件啓動模擬器:、
USER-NAME@MACHINE-NAME:~/WORKING_DIRECTORY$ emulator -kernel ./kernel/common/arch/arm/boot/zImage
4. 用adb工具鏈接模擬器,查看內核版本信息,看看模擬器上跑的內核是否是咱們剛纔編譯出來的內核:
USER-NAME@MACHINE-NAME:~/WORKING_DIRECTORY$ adb shell
這時候若是是第一次運行 adb shell命令,會看到如下輸出,不用管它,再運行一次adb shell命令就能夠了。
* daemon not running. start it now on port 5037 *
* daemon started successfully *
error: device offline
切換到proc目錄:
root@android:/ # cd proc
root@android:/proc # cat version
Linux version 2.6.29-ge3d684d-dirty (ubuntu@ubuntu) (gcc version 4.4.0 (GCC) ) #1 Fri Aug 23 10:56:24 CST 2013
從機器名ubuntu@ubuntu和日期1 Fri Jun 3 23:17:24 HKT 2011能夠看出,模擬器使用的內核即爲剛剛編譯出來的內核。