安卓手机之Linux内核的编译与烧写

编程知识 更新时间:2023-04-17 17:50:18

由于实验需要,要对安卓手机的Linux内核进行修改,修改前,先尝试一遍原版内核的编译与烧写。采用的手机是nexus 6p,代号(codename)为angler,手机自带Linux内核版本为3.10.73,Android系统版本为8.1.0(Oreo),具体版本号为OPM3.171019.013。

主要分为以下几步:

1、Linux内核源码的下载与版本选择

2、内核源码编译

3、将编译生成的Linux内核文件放入手机boot分区的镜像文件boot.img,并替换其中原有的kernel

4、将新的boot.img烧写入手机的boot分区,重启手机,完成。

 

整个过程主要参考了博客Ubuntu16.04编译nexus6p内核及make多目标异常分析,下面是对文章内容的一些补充。

①对于内核的选择,由于我需要对原有的内核进行修改,因此在选择要编译的内核版本时选择的是nexus 6p自带的版本,具体做法:在手机的设置-系统-关于手机里,查看内核版本为3.10.73-g4b78545,进入下载完成的内核目录"AndroidSourceDir"/kernel/msm/,执行:

git checkout 3.10.73-g4b78545

git checkout -b <YourBranchName>

然后就切换到了所需的内核版本。

②设置工具集目录的问题,确实应该照作者所说的设置为:"AndroidSourceDir"/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/,因为nexus 6p采用的是64位的arm芯片,而”AndroidSourceDir”/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin中是32位arm芯片的工具集,具体可参看:Switching to a custom toolchain [ARM][AARCH64]

③关于更新boot.img里的kernel文件

对于更新boot.img里的kernel文件,有两种方法。

第一种是像博客Ubuntu16.04编译nexus6p内核及make多目标异常分析中所说的,使用make bootimage命令,不过这种方法是基于你下载了全部的Android源码并编译过一次的基础上的,对于我来说,这种方法显然不合适,因为我只想修改boot.img里的的Linux内核,而且编译全部的Android源码是一件费力的事,需要150G以上的空间。

第二种是解包原版boot.img文件,将编译生成的内核文件Image.gz-dtb重命名为kernel,然后替换解包文件夹里的kernel文件,再将文件夹重新打包为boot.img。

 

首先我们需要原版的boot.img文件,我们可从从这里:

Factory Images for Nexus and Pixel Devices

下载nexus 6p的官方镜像,下载镜像时可参考当前手机内安卓系统的版本号,比如我的是版本号为OPM3.171019.013,在下载得到的压缩包中可以找到原版的boot.img文件。

解包和打包boot.img的工具我找了很久,比如这篇博客Android : 修改内核源码 and 编译、打包成新的boot.img中所提到的,Windows下的bootimg.exe和Linux下的bootimg-tools,不过遇到的问题是所能找到的bootimg.exe文件已经很久(3年多)未更新了,不清楚是否支持当前Android 8.1.0版本boot.img文件的解包和打包,bootimg-tools可以找到比较新的(博客中所给的bootimg-tools也很久未更新了,我找到的持续更新的版本为mkbootimg + unpackbootimg, forked and updated,需要的可以试试),但mkbootimg工具需要复杂的参数,博客里是基于nexus 5的,显然不能原封不动套用到nexus 6p上,这困扰了我许久。后来我找到了这个工具Unpack and repack boot.img,support dtb(dt.img).,作者编写了一个mkboot脚本,可以间接调用mkbootimg工具,并自动确定参数,最终使用这个工具成功处理得到新的boot.img文件。

④将boot.img烧写入手机boot分区,我采用的是如下步骤:

adb reboot bootloader
fastboot erase boot
fastboot flash boot boot.img

fastboot reboot

其中adb工具和fastboot工具可以通过这里下载得到官方版本。

需要补充的是,命令执行前要在手机端打开USB调试模式,并对bootloader进行解锁(这样fastboot命令才能对手机分区进行操作),具体步骤可以参考:

https://source.android/setup/running里的Unlocking the bootloader部分,即先手机端操作解开OEM锁,再在PC端操作解开bootloader锁。

⑤烧写完成后,可以在设置-系统-关于手机里查看内核版本条目,可看到内核编译时间与编译内核的主机等信息。

 

 

 

 

更多推荐

安卓手机之Linux内核的编译与烧写

本文发布于:2023-04-14 02:29:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/2c3c12684490ac0e7c46e71786ce4938.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内核   手机   Linux

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 74305文章数
  • 14阅读数
  • 0评论数