Android系统源代码编译—[5]构建内核
来源:互联网 发布:linux镜像文件iso下载 编辑:程序博客网 时间:2024/05/03 08:46
本文描述了仅构建内核的细节。接下来的说明假设你已经下载了完整的AOSP,并分别以真机和模拟器为例描述构建过程。
如果你是按照前面的文章已经下载了完整的Android代码就说明你的AOSP是完整的。
选择一个内核
这个表列出来内核源代码和二进制文件的名称和位置:
真机(Nexus 5)
可以通过使用/dev/block/platform目录下的条目,来确定目标设备使用的芯片,
root@hammerhead:/dev/block/platform # lsmsm_sdcc.1
我这里是Nexus 5 得到的芯片信息是msm。
模拟器
模拟器的内核固定是goldfish。
下载源代码
Nexus 5
选择好要构建的内核后,就可以通过git clone开始下载对应的内核源代码,
root@Tangxx:~/android_source/android_442# mkdir kernel && cd $_root@Tangxx:~/android_source/android_442/kernel# git clone \> https://android.googlesource.com/kernel/msm.git
Clone完成后,我们就得到了对应代码分支的仓库,然而你会发现当前目录下没有任何文件,
root@Tangxx:~/android_source/android_442/kernel# cd msmroot@Tangxx:~/android_source/android_442/kernel/msm# lsroot@Tangxx:~/android_source/android_442/kernel/msm#
要获得AOSP支持设备的内核源代码,最后一步是check out正确的commit,由于在git仓库中kernel文件的commit信息和文档,总是落后于新设备的发布,我们可以使用/proc/version下的版本字符串,或者解压后的内核镜像。这里使用/proc/version下的版本字符串:
root@hammerhead:/ # cat /proc/version Linux version 3.4.0-gadb2201 (android-build@vpbs1.mtv.corp.google.com) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Wed Nov 20 14:42:53 PST 2013
在获得的版本信息中最重要的是内核版本号中3.4.0-g后面的7位十六进制数字—adb2201 。用这个字符串就能check out 出准确的commit,
root@Tangxx:~/android_source/android_442/kernel/msm# git checkout adb2201HEAD is now at adb2201… mm: Hold a file reference in madvise_remove
至此,已经获得了目标设备的内核源代码副本。
模拟器
模拟器git clone goldfish版本内核,
root@Tangxx:~/android_source/android_442/kernel# git clone \> http://android.googlesource.com/kernel/goldfish.git
git clone完成后,可以使用
git branch -a
来查看支持那些Linux内核版本的下载,这里直接选择3.4版本内核进行下载,
root@Tangxx:~/android_source/android_442/kernel/goldfish# git checkout -t \> remotes/origin/android-goldfish-3.4 -b goldfish3.4
搭建编译环境
编译内核需要正确的编译环境,包括ARM编译工具链以及各种编译工具(eg,make),本文主要使用AOSP中预编译好的工具链。
第一步,配置编译环境,
Nexus 5
模拟器
这样AOSP目录就有了编译工具链,可以通过查询编译版本确认,
一些额外的步骤,设定系统环境变量通知内核我们使用的编译工具链,
root@Tangxx:~/android_source/android_442# cd kernel/msm/root@Tangxx:~/android_source/android_442/kernel/msm# export CROSS_COMPILE=arm-eabi-root@Tangxx:~/android_source/android_442/kernel/msm# export SUBARCH=armroot@Tangxx:~/android_source/android_442/kernel/msm# export ARCH=armroot@Tangxx:~/android_source/android_442/kernel/msm#
至此,编译环境就搭建好了。
配置内核
Linux内核支持很多架构和硬件组合,为了能够给任意一种配置组合编译内核,可以指定一个defconfig的配置面板,这个模板位于/arch/arm/configs目录中,比如,Nexus 5 的hammerhead代码版本可以使用hammerhead_defconfig。
root@Tangxx:~/android_source/android_442/kernel1/msm# make hammerhead_defconfig
最终编译系统会读取该配置模板,并写入.config文件中。
.config文件隐藏在内核代码根目录/kernel/msm下,可以通过CTRL+H查看,除了使用模板,还可以直接编辑这个配置文件,但推荐使用模板。
这里直接使用默认的配置面板即可,如果需要对编译后的内核进行调试,就需要修改特定的配置了,后续文章会讲到。
编译内核
当完成编译环境配置和内核配置后,就可以执行编译了,
root@Tangxx:~/android_source/android_442/kernel/msm# make[…] Kernel:arch/arm/boot/zImage is readyroot@Tangxx:~/android_source/android_442/kernel/msm#
至此,内核就编译完成了。
- Android系统源代码编译—[5]构建内核
- Android系统源代码编译—[1]搭建一个构建环境
- Android系统源代码编译—[3]准备构建
- Android系统源代码编译—[4]运行构建
- Android 内核源代码交叉编译
- Android 内核源代码交叉编译
- Android 内核源代码交叉编译
- Android系统源代码编译—[0]要求
- Android系统源代码编译—[2]下载源代码
- Android 源代码 2 编译系统
- pandaboard ES学习之旅——5 Android Linux内核源代码下载与编译
- [转]Android 内核源代码交叉编译
- Android 内核源代码交叉编译纺
- 编译Android的源代码,内核及其工具包
- Android内核源代码下载与编译
- 下载并编译Android内核源代码
- Android源代码和内核源代码的下载,编译和运行
- 树莓派折腾之烧录系统、下载源代码、编译内核
- 岁月飞逝,一晃而过
- PPP协议
- 设计模式之桥梁模式和策略模式的区别
- mongodb3.0.4安装简介
- 埃及分数
- Android系统源代码编译—[5]构建内核
- 全局编码
- Codeforces Round #383 (Div. 2)
- 走在20出头的路上
- [jQuery知识]jQuery之知识九-事件高级
- Nginx是什么,有什么优点?为什么选择Nginx做web服务器软件?
- uva10635(lcs lis O(NlgN))
- 1. Two Sum
- 三、向量的加减乘除法