天天看点

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

通过上篇文章《Android系统6.0源代码编译过程分析(1)》分析下载Android6.0系统源码和编译源码的过程,编译源码成功后运行模拟器,如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

经过漫漫长路,终于把下载源码和编译源码搞定了,接下来,继续分析编译SDK和内核。

1 编译SDK

注意:编译SDK的时候会把之前编译好的out文件夹下的部分内容删除重新编译,读者可以在编译SDK之前最好备份out文件,其实不备份也没有关系,毕竟源码经过无数次的修改,才会达到读者的要求(除非是有的读者只看看源码里面的结构);不过从第二次开始重新 make -jN 编译的时候,会编译快的多。

进入Android源码目录文件夹下,先初始化编译环境:

source build/envsetup.sh
           
Android系统6.0源代码编译过程分析(2)之编译SDK及内核

设置编译目标:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

最后一步开始编译sdk:

make sdk
           
Android系统6.0源代码编译过程分析(2)之编译SDK及内核

编译成功,如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

在/out/host/linux-x86/sdk/sdk 目录下就可以看到编译好的SDK:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

建议把编译好的SDK也备份一下,以防在以后修改源码的时候丢失或者损坏。

2 下载、编译 kernel

(1)下载kernel

在上篇文章《Android系统6.0源代码编译过程分析(1)》中,下载下来的Android源代码,是不包括linux kernel内核代码的,是使用的谷歌工程师们预先编译好的内核(在prebuilts/qemu-kernel文件中),它们是两个部分。下载下来是为了方便查看里面的内核结构。Android源码默认的内核如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

可以看出Android6.0是用的3.4版本的内核,因此自己也要下载Android源码系统对应的内核版本。

下载kernel源码,初始化仓库:

如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

会自动创建一个goldfish目录,进入goldfish目录:

cd goldfish
           

查看所有分支:

如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

下载检出文件到本地:

如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

现在kernel源码就下载到goldfish目录下了。

(2)编译内核源码

在下载好的Android系统源码目录中新建kernel文件夹,把goldfish复制到kernel文件夹下。

修改goldfish目录下makefile文件配置:

sudo gedit Makefile
           

定位大约第195行:

ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)
           

更改为

ARCH            ?= arm
CROSS_COMPILE   ?= arm-eabi-
           

进入goldfish目录,配置环境变量:

export PATH=$PATH:~/android-./prebuilts/gcc/linux-x86/arm/arm-eabi-/bin
           

编译:

make goldfish_armv7_defconfig
           

最后执行:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

注意:(/media/wang/d1756fc5-46fe-4779-bee7-3912f0ce4e01/home/wang/)是笔者自己机械硬盘的路径名称,请读者换成自己的,或者用“~”代替

编译成功,如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

返回Android系统源码目录,运行模拟器:

source build/envsetup.sh
lunch sdk-eng
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage & //从内核文件启动模拟器
           

查看刚编译过的内核版本信息,如图所示:

Android系统6.0源代码编译过程分析(2)之编译SDK及内核

分析的此次,Android系统源码下载、源码编译、SDK编译、内核编译就结束了。接下来,就开始该读者分析源码、解读源码、修改源码了。

继续阅读