在Ubuntu上下载、编译、运行Android内核Linux Kernel
在Ubuntu上下载、编译、运行Android内核Linux Kernel
在Ubuntu上下载、编译、运行Android系统一文中我们学习了如何下载、编译以及运行Android系统,一睹Android_4.4.2芳容。而唯一的美中不足是使用了预编译好的kernel-qemu-armv7。那么,在这篇文章中,我们就来弥补这个缺憾,编译运行属于自己的Android Kernel。
同样,在这一篇文章中,咱们会从下载、编译、运行三个方面逐一介绍。
一、下载Kernel(goldfish for Android)
由于咱们现在是基于虚拟处理器goldfish来学习Android,那自然我们需要下载goldfish kernel了。
废话不多说,直接上源代码goldfish-android-goldfish-3.4.tar.gz
注意,Android_4.4.2对应的goldfish版本是3.4(博主亲测2.6,3.10,3.18等版本均无法启动模拟器)。
当然,通过Google官方直接下载也是OK的(自行百度),不过
- 下载速度比较慢呢;
- Google被屏,和下载Android源代码的原因一样,如果你没有的话,是无法下载kernel源代码的。
可以试试
git clone https://android.googlesource.com/kernel/goldfish.git
二、编译Kernel
进入Android源代码的主目录下,以下是博主的目录,因人而异。
cd ~/442
mkdir kernel
cd kernel
mkdir goldfish
cd goldfish将刚才下载的kernel源代码压缩包拷贝到goldfish目录中,并解压缩。
cp ~/Downloads/goldfish-android-goldfish-3.4.tar.gz ./
tar -zxvf goldfish-android-goldfish-3.4.tar.gz编辑Makefile
vim Makefile
然后,按照如下内容修改Makefile
ARCH ?=arm
CROSS_COMPILE ?=arm-none-linux-gnueabi-
注意,
CROSS_COMPILE的定义是基于自己的交叉编译链来填写的。
在Linux开发环境搭建 三 (在Ubuntu上Android/Linux编译环境的准备)一文中,我们已经配置了PATH变量,所以这里只需要填写arm-none-linux-gnueabi-即可(这是一个前缀,例如,编译时和gcc拼接成arm-none-linux-gnueabi-gcc命令);如果没有配置PATH,那么需要将交叉编译链的路径填上,例如/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-配置内核
通过如下命令为goldfish做内核配置:
make goldfish_armv7_defconfig
解释,
a. 这条命令是将~/442/kernel/goldfish/arch/arm/configs/目录下的goldfish_armv7_defconfig拷贝到~/442/kernel/goldfish/目录下的隐藏文件.config中,而.config文件正是编译内核时用到的配置文件,当然这个配置文件可以通过其他的方式生成,例如,make menuconfig等。
b. Android_4.4.2采用armv7架构,那么在选择goldfish配置时,注意选择goldfish_armv7_defconfig,如果选择goldfish_defconfig,会遇到启动模拟器黑屏的问题。编译内核
执行make,开始编译内核,最后将在~/442/kernel/goldfish/arch/arm/boot/目录下生成内核镜像文件zImage
make
三、运行Kernel + Android系统
经过前面的编译,我们得到zImage镜像,另外,在Ubuntu上下载、编译、运行Android系统一文中,我们已经编译出system.img、userdata.img、ramdisk.img。
接下来,我们便可以开始运行自己编译出来的Kernel + Android系统了,是否有点小激动呢?
进入Android源代码主目录~/442
cd ~/442配置Android的运行参数(在上一片文章已经介绍过了)
export PATH=$PATH:~/442/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=~/442/out/target/product/generic启动模拟器
emulator -show-kernel -partition-size 1024 -kernel ./kernel/goldfish/arch/arm/boot/zImage -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ./out/target/product/generic/ramdisk.img
细心的朋友会问,预编译prebuilds下有现成的内核镜像,为何还要费老大劲编译自己的kernel呢?原因很简单,我们接下来会真正的开始Android的源码学习,从下往上,从内核到应用层,纵向的学习Android系统,那么,内核部分将是我们万里长征第一步,敬请期待……
如果你喜欢博主的分享,请关注我吧,谢谢。
itxiebo
20160405
更多相关文章
- Android(安卓)studio查看sdk源代码
- android编译系统makefile(Android.mk)写法.txt
- Android编译系统makefile(Android.mk)说明
- android中Intent简介
- Android系统启动分析
- Android(安卓)App 获取root权限后,执行shell命令
- 让Android(安卓)变身回一台真正的Linux系统!!!
- android系统更新应用的添加
- android provision