在Ubuntu上下載、編譯和安裝Android4.0.3 source與 kernel 源碼

  首先要注意的是:在進行環境變量的配置或者涉及到跟目錄有關的操做時必定要注意你本身的目錄是什麼,你本身的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
export ARCH=arm

注意:你本身的android源碼不必定是放在/android/source下,因此要找到本身的android源碼目錄
   如:export PATH=$PATH:~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin  bash


三、設定交叉編譯參數
打開 WORKING_DIRECTORY/kernel/goldfish/目錄下的Makefile文件,做以下修改

    (一、) CROSS_COMPILE   ?= arm-eabi-
            (解釋:這邊使用arm的gcc進行交叉編譯,之因此這樣設置,是由於上面設置了PATH的環境變量,make編譯時,會去找gcc,這個目錄下: ~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin ,系統能找到arm的gcc與g++,你本身能夠打開目錄看看

    (二、)找到 LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\,而後將下面兩行註釋或者刪掉,而後添加第三行,等號右邊爲空

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


四、編譯

      一、make goldfish_armv7_defconfig  (android4.0如下:make goldfish_defconfig )

      二、make menuconfig  (進行各類配置)
    (對內核沒有要求的能夠不用配置,直接跳過, 若是要使編譯的android kernel支持moudle(LKM),進一步配置時請參考:  http://my.oschina.net/u/561492/blog/89139工具

      三、make  

編譯完成以後,會在「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

    二、編譯環境
            一、JDK6
            二、gcc 4.4和g++ 4.4
     三、 配置USB訪問權限

            以超級用戶建立新配置文件/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」。

    四、編譯

        到/home/dell/WORKING_DIRECTORY/下執行命令:
        $source build/envsetup.sh
        lunch full-eng
         make -j4
        編譯完成後,能夠在源碼目錄的out/target/product/generic/目錄下看到編譯好的ramdisk.img、system.img 和 userdata.img了。 

3、安裝編譯好的Android鏡像到模擬器上。
     
1. 設置環境變量: (配置時必定要注意你本身的目錄是什麼,你本身的android source放在哪一個目錄下,不要徹底copy個人PATH的路徑)

     USER-NAME@MACHINE-NAME:~/ WORKING_DIRECTORY
               export PATH=$PATH:~/ WORKING_DIRECTORY/out/host/linux-x86/bin  

               export ANDROID_PRODUCT_OUT=~/WORKING_DIRECTORY/out/target/product/generic

    其中,~/ WORKING_DIRECTORY/out/host/linux-x86/bin有咱們要執行的emulator命令   
               ~/ WORKING_DIRECTORY/out/target/product/generic是Android鏡像存放目錄,下面執行emulator命令時會用到。

     

    2. 運行模擬器。

     USER-NAME@MACHINE-NAME:~/WORKING_DIRECTORY$ emulator

    模擬器運行須要四個文件,分別是Linux Kernel鏡像文件zImage.img和Android鏡像文件system.img、userdata.img和ramdisk.img。執行emulator命令時,若是不帶任何參數,則Linux Kernel鏡像默認使用~/Android/prebuilt/android-arm/kernel目錄下的kernel-qemu文件,而Android鏡像文件則默認使用ANDROID_PRODUCT_OUT目錄下的system.img、userdata.img和ramdisk.img,也就是咱們剛剛編譯出來的鏡像問題。

    固然,咱們也能夠以指定的鏡像文件來運行模擬器,即運行emulator時,即:

    emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img

        

 四. 在模擬器中運行編譯好的內核。

     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能夠看出,模擬器使用的內核即爲剛剛編譯出來的內核。

相關文章
相關標籤/搜索