前言
前段时间写了一篇关于pixel4 Android内核编译编译内核的流程。 但是随着Android
版本的提升Google
开始推崇GKI
方式发内核模式,这种模式可以方便供应商剥离内核和驱动的捆绑性,官方抽象出一部分接口(GKI)提供给产生使用极大便利和解耦开发复杂性。
在pixel4 Android内核编译文章用了很多方式去解决内核校验问题,但是在Pixel6中这个得到缓解。
本文主要讲解一些自己一些心得和体会核心流程基于官方构建 Pixel 内核教程。
开始
本文使用
pixel 6
作为实验手机。
pixel 6是一个比较特殊的手机,因为刷入GKI内核需要额外需要从出厂镜像提取供应商镜像。(pixe 7不需要)。
根据官网介绍 pixel6 支持以下GKI内核版本。
本文使用android14-gs-pixel-6.1
作为内核版本。
下载出厂镜像
我们根据文档需要先下载AP1A.240505.004 (11583682)
这个版本出厂完整镜像。镜像下载地址
下载后解压后如下文件树。你可以注意到里面有一个flash-all.sh
。这个脚本用于刷一个完整出厂镜像到手机上。
tree ./
./
├── abl.img
├── android-info.txt
├── bl1.img
├── bl2.img
├── bl31.img
├── boot.img
├── bootloader-oriole-slider-1.3-11403664.img
├── d3m2.ec.bin
├── dtbo.img
├── evt.ec.bin
├── fastboot-info.txt
├── flash-all.bat
├── flash-all.sh
├── flash-base.sh
├── gsa.img
├── image-oriole-ap1a.240505.004.zip
├── ldfw.img
├── modem.img
├── pbl.img
├── product.img
├── proto11.ec.bin
├── pvmfw.img
├── radio-oriole-g5123b-130914-240205-b-11405587.img
├── super_empty.img
├── system_ext.img
├── system.img
├── system_other.img
├── tzsw.img
├── vbmeta.img
├── vbmeta_system.img
├── vbmeta_vendor.img
├── vendor_boot.img
├── vendor_dlkm.img
└── vendor.img
0 directories, 34 file
为了方便不出错(在pixel4 就因为bootloader低版本问题踩过坑)建议将pixel 刷一次这个出厂镜像(称为底包),手机重启bootloader后执行./flash-all.sh
即可。
接着我们需要下载对应内核分支源码
repo init -u https://android.googlesource.com/kernel/manifest -b android14-gs-pixel-6.1
repo sync -c --no-tags
上面的命令会下载好内核源码,接着接着我们需要拷贝出厂镜像一些东西到内核源码中。
提取出厂镜像部分文件到内核源码
这一步官方提供详细步骤不在演示
修改内核(可选)
这里根据你的需求修改源码,这里我们修改一个文件关闭经syscall会调用的函数flip_close
代码比较简单只是加了一句打印
编译内核
执行命令如下:
tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist
执行完成后会在out输出各种镜像文件和驱动。
tree out/slider/dist/
out/slider/dist/
...
├── vendor-bootconfig.img
├── vendor_boot.img
├── vendor_dlkm.img
├── vendor_boot.img
...
0 directories, 263 files
刷入内核
重启手机进入bootloader模式然后无脑键入一下命令即可完成刷入
fastboot oem disable-verification
fastboot flash boot out/slider/dist/boot.img
fastboot flash dtbo out/slider/dist/dtbo.img
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img
重启可以看到你DIY的系统。
root并查看修改是否生效(可选)
由于刷的底包并没有root权限,这里你可以有多种方式开启root去查看上面我们添加的内核日志。
这里我采用magisk
方式举例:
Magisk构建产物地址
下载安装Magisk.apk到手机
将out/slider/dist/boot.img
传入手机存储中
如:
adb push out/slider/dist/boot.img /sdcard
打开magisk修补boot.img
提取修补好的boot.img并刷入手机
adb reboot bootloader
# 建议先试用是否有用再刷入
# fastboot boot xxx.img 临时使用xxx.img引导系统启动,下次启动失效。用于测试
fastboot flash boot xxx.img
键入下面的命令查看内核日志输出
adb shell
su
dmesg
参考
官方构建 Pixel 内核教程