首先要注意的是:在进行环境变量的配置或者涉及到跟目录有关的操作时一定要注意你自己的目录是什么,你自己的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 注意:你自己的android源码不一定是放在/android/source下,所以要找到自己的android源码目录
如:export PATH=$PATH:~/WORKING_DIRECTORY/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin
2、make menuconfig (进行各种配置)
(对内核没有要求的可以不用配置,直接跳过, 如果要使编译的android kernel支持moudle(LKM),进一步配置时请参考: http://my.oschina.net/u/561492/blog/89139)
编译完成之后,会在“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
以超级用户创建新配置文件/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、编译 三、安装编译好的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可以看出,模拟器使用的内核即为刚刚编译出来的内核。