这篇主要记录一下如何下载linux内核源码,并编译使用。
首先下载源码:在安卓源码目录下新建kernel目录:
mkdir kernel
然后运行git clone命令:
git clone http://android.googlesource.com/kernel/goldfish.git
这里goldfish为模拟器用的内核。但是如果之前下载过安卓源码,并使用身份认证(即在~/目录下新建.netrc,并将用户名密码信息保存其中),运行这条命令后可能会出现如下error:
fatal: remote error: SSL is required
那这个主要就是因为:之前使用了Authentication方式,而这里使用了HTTP方式,在Authentication方式下,必须使用https方式,那么将上面那个命令稍作修改:
git clone https://android.googlesource.com/kernel/goldfish.git
加个s就好啦。OK,拉的时间比较长,先记录到此~~。
当然拉完后要记得 git branch -b 切换分支喔,这里选用的是 android-goldfish-2.6.29内核。
OK,拉的时间比较长,不过我后来找了个朋友直接在这个网站上下载下来了:
https://android.googlesource.com/kernel/goldfish/+archive/android-goldfish-2.6.29.tar.gz
他那儿是特殊环境,虽然是 Google 服务器,下载速度也是一流,我自己把代码都打包放在我的CSDN资源里,有需要的同学可以去我的资源里面下载,有2.6,3.4和3.10的版本,各取所需即可~~
下载完成后,就要开始编译内核了,编译的步骤比较简单:
1、首先将 gcc 加入环境变量,这里的 gcc 可不是系统自带的 gcc,而是专门编译安卓系统用的,目录在 prebuild 目录下,不过android5.0的跟之前有点差别:他的目录是:prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin,之前的都是prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
2、打开 kernel 目录下的 MakeFile 文件,修改
# ARCH ?= (SUBARCH)
# CROSS_COMPILE?=
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
此处注意 tab 键喔,最好是直接复制那两行,拷贝再修改。
3、安卓4.0之后编译命令为:
make goldfish_armv7_defconfig
make
4.0之前的编译命令:
make goldfish_defconfig
make
编译完后会在arch/arm/boot目录下生成 zImage 文件,这样内核就编译完成了。
编译完成后,根据之前的那篇文章,我在虚拟机中运行 emulator 比较卡,就使用 mac 下的sdk 的 ADT 代替,那我们这边就把生成的 zImage 文件也替换到 sdk 的 system-image 目录下,注意的是,在这个目录下,它的内核镜像文件名是:kernel-qemu,所以我们也要把 zImage 重命名为 kernel-qemu 即可。
但是,这里遇到一个问题,上面我拉的 kernel 源码是2.6.29的 goldfish 源码,生成这个 zImage 镜像替换后,重新打开 ADT 启动模拟器时一直黑屏,连开机的动画都没有,在网上查了查资料,发现也有人遇到这样的问题,说是换用新版本的 kernel 源码就可以了,所以我就又直接拉了最新的3.10的源码,编译完成,替换后发现,还是不行,后面又上网查,发现原来,这个是 kernel 3.10的一个 BUG。。。似乎还没有修复,没办法,我只好用了中间的那个版本:3.4,编译完成后,替换 zImage 镜像,成功开机: