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

通过上篇文章《Android系统6.0源代码编译过程分析(1)》分析下载Android6.0系统源码和编译源码的过程,编译源码成功后运行模拟器,如图所示:
这里写图片描述
经过漫漫长路,终于把下载源码和编译源码搞定了,接下来,继续分析编译SDK和内核。

1 编译SDK

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

source build/envsetup.sh

这里写图片描述
设置编译目标:

lunch sdk-eng

这里写图片描述

最后一步开始编译sdk:

make sdk

这里写图片描述
编译成功,如图所示:
这里写图片描述
/out/host/linux-x86/sdk/sdk 目录下就可以看到编译好的SDK:
这里写图片描述
建议把编译好的SDK也备份一下,以防在以后修改源码的时候丢失或者损坏。

2 下载、编译 kernel

(1)下载kernel

在上篇文章《Android系统6.0源代码编译过程分析(1)》中,下载下来的Android源代码,是不包括linux kernel内核代码的,是使用的谷歌工程师们预先编译好的内核(在prebuilts/qemu-kernel文件中),它们是两个部分。下载下来是为了方便查看里面的内核结构。Android源码默认的内核如图所示:
这里写图片描述 可以看出Android6.0是用的3.4版本的内核,因此自己也要下载Android源码系统对应的内核版本。
下载kernel源码,初始化仓库:

git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git

如图所示:
这里写图片描述
会自动创建一个goldfish目录,进入goldfish目录:

cd goldfish

查看所有分支:

git branch -a

如图所示:
这里写图片描述
下载检出文件到本地:

git checkout remotes/origin/android-goldfish-3.4

如图所示:
这里写图片描述
现在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-6.0.1/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin

编译:

make goldfish_armv7_defconfig

最后执行:

make

这里写图片描述
注意:(/media/wang/d1756fc5-46fe-4779-bee7-3912f0ce4e01/home/wang/)是笔者自己机械硬盘的路径名称,请读者换成自己的,或者用“~”代替
编译成功,如图所示:
这里写图片描述
返回Android系统源码目录,运行模拟器:

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

查看刚编译过的内核版本信息,如图所示:
这里写图片描述
分析的此次,Android系统源码下载、源码编译、SDK编译、内核编译就结束了。接下来,就开始该读者分析源码、解读源码、修改源码了。

猜你喜欢

转载自blog.csdn.net/warticles/article/details/80941462