在我们通过repo这个封装了git的工具同步完android的源代码后,会发现kernel文件夹下面是空的,打开android的工程主页,https://android.googlesource.com/?format=HTML,会发现其实在kernel目录下是有源代码的,所以我们再次用git工具同步一下kernel下的源代码即可。
kernel目录下有很多个处理器的内核源代码,我们以comm为例:
输入命令:$ git clone https://android.googlesource.com/kernel/common
然后在kernel文件夹下面会生成一个commn文件夹,进入这个文件夹:
cd commn
ls -al
会发现多了个.git的目录
刚才下载的源代码都在这个.git目录下面,我们现在来check out3.4的内核代码,
$ git checkout remotes/origin/android-3.4
等待check结束,你就能看到commn目录下多了很多文件:
这就是kernel下面commn目录中3.4内核的源代码了
https://android.googlesource.com/kernel/common/+/android-3.4
下面我们来编译内核:
首先导出环境变量:
$ export PATH=$PATH:~/WORKING_DIRECTORY/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/
(具体路径可能会因为源代码版本不一样而改变)
在commn目录下修改Makefile文件:
将
ARCH ?= $(SUBARCH) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)改成:
ARCH ?= arm CROSS_COMPILE ?= arm-eabi-
不这样修改会默认以x86位体系编译
然后配置内核,在arch/arm/configs/ 目录下有若干配置文件,选择一个来进行编译:
$ make s5p64x0_defconfig
原理就是拷贝s5p64x0_defconfig文件到commn下保存为.config
$ make
成功获得zImage镜像.这个内核是运行在s5p64x0处理器下的,如果想编译运行在模拟器下的内核需要下载编译goldfish内核进行编译,和commn内核一个道理。
goldfish内核
1.取得goldfish内核:
2. ls遍历~/WORKING_DIRECTORY/kernel/goldfish/arch/arm/configs,发现3.4中没有goldfish_armv7_defconfig文件,
使用命令make goldfish_armv7_defconfig会提示找不到配置文件。
我们去Google’s Gerrit查找最新的补丁,搜索kernel/goldfish branch:android-goldfish-3.4关键字,
会得到很多没融合进内核的补丁:https://android-review.googlesource.com/#/q/kernel/goldfish+branch:android-goldfish-3.4,n,z
选取最新的进行pull操作,取回本地(查看这些搜索记录你会发现,这个问题在2012年10月4日的一个补丁已经修正了)
git pull https://android.googlesource.com/kernel/goldfish refs/changes/87/51687/3
3.编译
先指定交叉编译工具连:
export PATH=$PATH:~/WORKING_DIRECTORY/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/然后make(前面修改过makefile文件指定arch和cross_compile, 没修改Makefile文件 就要指定 ARCH=arm CROSS_COMPILE=arm-eabi-),
得到zImage镜像。
4.启动模拟器:
首先初始化模拟器运行环境:
$ source build/envsetup.sh
$ lunch full-eng
指定内核,启动模拟器:
emulator -kernel ~/WORKING_DIRECTORY/kernel/goldfish/arch/arm/boot/zImage &
使用adb来测试,看内核版本
有关android 4.2.2系统的编译问题,同理请参考http://blog.csdn.net/gexueyuan/article/details/7772387,系统版本不一样
但是编译原理一样。
参考:http://source.android.com/source/building-kernels.html
http://www.linuxidc.com/Linux/2012-01/50765.htm
http://yaapb.wordpress.com/2012/09/23/get-the-brand-new-3-4-android-kernel-working-for-the-x86-emulator/