首先要注意的是:在进行环境变量的配置或者涉及到跟目录有关的操做时必定要注意你本身的目录是什么,你本身的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能够看出,模拟器使用的内核即为刚刚编译出来的内核。