在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的(自行百度),不过

  1. 下载速度比较慢呢;
  2. Google被屏,和下载Android源代码的原因一样,如果你没有的话,是无法下载kernel源代码的。
    可以试试
    git clone https://android.googlesource.com/kernel/goldfish.git

二、编译Kernel

  1. 进入Android源代码的主目录下,以下是博主的目录,因人而异。
    cd ~/442
    mkdir kernel
    cd kernel
    mkdir goldfish
    cd goldfish

  2. 将刚才下载的kernel源代码压缩包拷贝到goldfish目录中,并解压缩。
    cp ~/Downloads/goldfish-android-goldfish-3.4.tar.gz ./
    tar -zxvf goldfish-android-goldfish-3.4.tar.gz

  3. 编辑Makefile
    vim Makefile
    然后,按照如下内容修改Makefile
    ARCH ?=arm
    CROSS_COMPILE ?=arm-none-linux-gnueabi-
    在Ubuntu上下载、编译、运行Android内核Linux Kernel_第1张图片
    注意,
    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-

  4. 配置内核
    通过如下命令为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,会遇到启动模拟器黑屏的问题。

  5. 编译内核
    执行make,开始编译内核,最后将在~/442/kernel/goldfish/arch/arm/boot/目录下生成内核镜像文件zImage
    make
    在Ubuntu上下载、编译、运行Android内核Linux Kernel_第2张图片


三、运行Kernel + Android系统

经过前面的编译,我们得到zImage镜像,另外,在Ubuntu上下载、编译、运行Android系统一文中,我们已经编译出system.img、userdata.img、ramdisk.img。
接下来,我们便可以开始运行自己编译出来的Kernel + Android系统了,是否有点小激动呢?

  1. 进入Android源代码主目录~/442
    cd ~/442

  2. 配置Android的运行参数(在上一片文章已经介绍过了)
    export PATH=$PATH:~/442/out/host/linux-x86/bin
    export ANDROID_PRODUCT_OUT=~/442/out/target/product/generic

  3. 启动模拟器
    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

在Ubuntu上下载、编译、运行Android内核Linux Kernel_第3张图片


细心的朋友会问,预编译prebuilds下有现成的内核镜像,为何还要费老大劲编译自己的kernel呢?原因很简单,我们接下来会真正的开始Android的源码学习,从下往上,从内核到应用层,纵向的学习Android系统,那么,内核部分将是我们万里长征第一步,敬请期待……

如果你喜欢博主的分享,请关注我吧,谢谢。


itxiebo
20160405

你可能感兴趣的:(Android)