在Ubuntu上下载、编译和安装Android4.0.3 source与 kernel 源码

  首先要注意的是:在进行环境变量的配置或者涉及到跟目录有关的操作时一定要注意你自己的目录是什么,你自己的android source放在哪个目录下,不要完全copy我的PATH的路径 。
    说明:home/dell/WORKING_DIRECTORY   --我所有的android源码都放在这个目录中,而且还在这个目录下建立了一个kernel目录,将内核源码放在里面。即,我的内核目录是:home/dell/WORKING_DIRECTORY /kernel/

一、下载编译内核源码

1、下载内核源码

        http://my.oschina.net/u/561492/blog/88903

2、设置环境变量

打开用户目录下的.bashrc文件,在后面添加如下代码

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 


3、设定交叉编译参数
打开 WORKING_DIRECTORY/kernel/goldfish/目录下的Makefile文件,作如下修改

    (1、) CROSS_COMPILE   ?= arm-eabi-
            (解释:这边使用arm的gcc进行交叉编译,之所以这样设置,是因为上面设置了PATH的环境变量,make编译时,会去找gcc,这个目录下: ~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin ,系统能找到arm的gcc与g++,你自己可以打开目录看看

    (2、)找到 LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\,然后将下面两行注释或者删掉,然后添加第三行,等号右边为空

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


4、编译

      1、make goldfish_armv7_defconfig  (android4.0以下:make goldfish_defconfig )

      2、make menuconfig  (进行各种配置)
    (对内核没有要求的可以不用配置,直接跳过, 如果要使编译的android kernel支持moudle(LKM),进一步配置时请参考:  http://my.oschina.net/u/561492/blog/89139)

      3、make  

编译完成之后,会在“kernel/arch/arm/boot/”目录下生成名为zImage的文件。

二、下载编译android source

    1、下载android source 
      官网:http://source.android.com/source/downloading.html
        
        下载的时候,可能会出现各种异常,如,网断了、电脑司机了。这时你可以重新运行指令:repo sync,它将继续重断点开始下载。
        如果文件夹里什么也没有、或者遇到如下错误 :error: Exited sync due to gc errors  ,请尝试运行下面的指令。

repo sync -j1

    2、编译环境
            1、JDK6
            2、gcc 4.4和g++ 4.4
     3、 配置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”。

    4、编译

        到/home/dell/WORKING_DIRECTORY/下执行命令:
        $source build/envsetup.sh
        lunch full-eng
         make -j4
        编译完成后,可以在源码目录的out/target/product/generic/目录下看到编译好的ramdisk.img、system.img 和 userdata.img了。 

三、安装编译好的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可以看出,模拟器使用的内核即为刚刚编译出来的内核。

你可能感兴趣的:(在Ubuntu上下载、编译和安装Android4.0.3 source与 kernel 源码)