首页
社区
课程
招聘
[原创]记一次安卓内核源码编译刷机过程(修改反调试标志位)。
发表于: 2017-7-16 00:22 26110

[原创]记一次安卓内核源码编译刷机过程(修改反调试标志位)。

2017-7-16 00:22
26110

   

二、记一次安卓系统源码编译刷机过程 一文中,我们成功编译了Android 4.4.4_r1源码并刷入系统了 Nexus 5 设备,下面是设置界面的信息。上面显示的内核版本信息是3.4.0-gd59db4e,内核的编译时间是Mon Mar 17 15:16:36 PDT 2014,也就是说内核之前就已经编译过了,我们编译系统源码的时候并没有编译内核源码!那么编译好的内核文件放在了哪里呢?答案是device/<vendor>/<name>目录,针对Nexus 5 设备,就是device/lge/hammerhead-kernel目录

这里写图片描述    

系统源码和内核源码是可以分开编译的,如果仅仅对内核修改,就没必要编译系统源码。所以下面的过程是在假设我们没有下载系统源码的情况下操作的!为了编译成功,没下载系统源码的同学一定要 参考 一、记一次Android系统源码下载过程一文把编译环境配置一下。类似于Android源码根目录,可以新建一个内核编译项目的根目录文件夹AndroidKernal,把后面的各种操作下载在该目录下进行。至于已经下载系统源码的同学,就在Android系统源码根目录下新建kernel文件夹作为根目录。Google 官方教程:https://source.android.com/source/building-kernels    

我们首先应当确定自己设备所对应的内核。Google官方给出了二进制文件的名称及内核源代码所在Android源码树中的位置:(这时内核源代码还没有下载本地)

这里写图片描述    

各个版本内核源码项目所对应的下载命令:Google也给出了相应的下载命令:

由于网络连接问题,可以把上面所有 git clone命令中https://android.googlesource.com/网址换成清华镜像站的https://aosp.tuna.tsinghua.edu.cn/ 网址。

各个内核项目所支持的设备

我用是Nexus 5手机, 代号 harmmerhead(锤头),查找上表知道,内核二进制文件所在系统源码树的device/lge/hammerhead-kernel目录,内核源码在系统源码树的kernel/msm目录,内核对应的编译配置为hammerhead_defconfig,  该版本内核项目对应的下载命令为

msm内核项目是Google公司针对高通msm移动芯片组(骁龙处理器)而开发的内核项目,我们在之前创建的AndroidKernel目录下执行git命令下载该项目(已经下载Android系统源码的同学在系统根目录下创建kernel目录下进行下载)

这里写图片描述    

这时msm 项目的.git仓库 下载到了新创建的msm目录中,而msm内核的代码还没有从本地.git仓库中检出来,所以整个msm目录空空的。
进入 msm 目录后,查看msm项目的所有分支。下面的只列出了Nexus 5(代号:harmmerhead)相关的内核分支

该检出哪个分支呢?由于我不是特别熟悉git 命令操作,并不能根据git日志详细区分各个版本之间的区别。AOSP前技术领导人Jean-Baptiste Queru在给一位内核开发提交者的邮件中写道,在安卓分支后缀中,mr = "maintenance release", fr = "factory rom".,分支的名字在开发中是不断变化,最好以commid id进行提交。那么我们就以commid id进行检出。官方给出的实例是按分支名进行下载,但是我暂时确定不了分支,所以采用了commid id这种方式。
那么我们怎么获得内核的版本信息与其中commid id呢?

官方给出了一条通用的命令,来获得指定二进制内核文件的版本信息

例:
这里写图片描述    

而Nexus 5 设备的内核名为zImage-dtb,官方给出的针对该设备的命令是:

这里写图片描述    

事实上,我们可以在设置 > 关于手机 > 内核版本 中直接查看内核版本信息,也可以通过cat /proc/version 命令查看。内核版本信息的格式为kernel version-gXXXXXXX,其中 XXXXXXX部分的值是git提交中 的short commit id的值(即kernel version-g<short commit id>),short commit id的值为commit id值的前7位。Nexus 5   设备Adnroid 4.4.4_r1版本 AOSP自带的内核值是`3.4.0-gd59db4e , 并且刷入手机能正常运行。
检出带代码有两种方式(推荐第二种):
一、直接  short commit  id = d59db4e 来检出分支。

这里写图片描述    

检出代码后的msm目录:

这里写图片描述    

二、确定 short commit id  所在的分支,按分支进行检出(推荐)

在本地 git clone msm 项目后,本地只有一个’master’ 分支,我们可以执行git branch -r --contains  d59db4e   命令来查看包含 d59db4ecommit id 的分支
这里写图片描述    

然后我们可以在远程分支的基础上在本地分化出一个新的分支来

我们输入git log 命令,发现d59db4e 值就是android-msm-hammerhead-3.4-kitkat-mr2最后一次提交的 short commit id

这里写图片描述    

之前下载过AOSP源码树的同学,就不用再下载预编译工具链了,AOSP跟目录中后该工具链。没有下载AOSP源码树的同学,在AndroidKernel目录下执行该执行进行下载:

这里写图片描述    

已经下载 AOSP源码树的同学,进入的源码树根目录下 ,重新执行source build/envsetup.sh命令就会自动配置好环境变量。
  没有下载源树的同学,在AndroidKernel目录下执行export PATH=$(pwd)/arm-eabi-4.6/bin:$PATH就会配置到环境变量中。

这里写图片描述    

注意上述两种方法都是在命令行中配置的,计算机重启后会消失需重新配置,可将交叉编译工具的的bin路径写到~/.bashrc文件中

编译前,一定要确定交叉工具链的路径在PATH 变量中。
在内核交叉编译前,配置一下编译选项

进入到msm 目录,配置

这里写图片描述    

执行 make 命令进行编译

编译成功后,会提示

这里写图片描述    

这时会在arch/arm/boot/ 目录生成 ImagezImagezImage-dtb 三个文件 。其中zImage-dtb 就是之前使用的内核二进制文件。

bootimg-tools工具是一款基于mkbootimg开发的boot.img 解包重打包C语言工具,github地址:https://github.com/pbatard/bootimg-tools
在乌班图上用下面的命令下载:

下载后进入bootimg-tools目录,执行make 命令编译该项目,在 makebootimg目录下生成了相应的二进制执行文件,将该二进制文件所在路径添加到 PATH路径中

这里写图片描述    

解包后生成 kernel  和 ramdisk.cpio.gz 两个文件

这里写图片描述    

这里写图片描述    

输入下面的命令进入fastboot 模式,并解锁

bootloader模式下输入下面的命令将bootnew.img 刷入boot分区


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  CCkicker   +5.00 2017/08/25
最新回复 (16)
雪    币: 3811
活跃值: (2174)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
第一次做沙发,小激动
2017-7-16 00:49
0
雪    币: 2575
活跃值: (502)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
3
精华没得说
2017-7-16 08:58
0
雪    币: 237
活跃值: (83)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
精华没得说
2017-7-16 13:03
0
雪    币: 10885
活跃值: (3288)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
5
感谢分享!
2017-7-16 16:50
0
雪    币: 546
活跃值: (1667)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
整理的不错,唯一的不足就是代码的排版比较乱。
2017-7-17 22:43
0
雪    币: 130
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
下载  gcc交叉编译工具链的那一个  git  clone是找不到库的
2017-7-20 17:19
0
雪    币: 7818
活跃值: (1073)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
8
写的真好。赞赞赞。
2018-3-21 10:55
0
雪    币: 4366
活跃值: (353)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
9
图片挂了呀....请问你有没有原文?
2018-9-3 11:36
0
雪    币: 7
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
加精的文章,图片是CSDN的啊???
2018-9-3 12:49
0
雪    币: 36
活跃值: (1061)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
mark
2020-3-21 21:40
0
雪    币: 159
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢分享!
2020-3-27 18:14
0
雪    币: 271
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
bluth 加精的文章,图片是CSDN的啊???
两边的作者看起来是同一个人
2022-6-7 20:13
0
雪    币: 148
活跃值: (1597)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
14
对于新版本此方式中的交叉编译器已经失效,我指android11,我下载的aosp中,并没有gcc编译器,并且给的网址好像也有问题我见下载不下来
2022-8-6 15:02
0
雪    币: 1
活跃值: (150)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
老板接开发吗?可否留个联系方式
2023-4-1 22:33
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
mark
2023-7-29 17:29
0
雪    币: 3090
活跃值: (30881)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
感谢分享
2023-7-29 22:55
1
游客
登录 | 注册 方可回帖
返回
//