type
status
date
slug
summary
tags
category
icon
password
📝 Pixel5 内核编译并开启KallSyms
0x0 前言
年初的时候想用手里已经落灰的Pixel5手机去装一个Apatch,但是发现内核居然没有开始kallsyms导致无法patch,尝试去Google拉取对应的源码手动开启编译,结果却卡bootloader不开机,终于在前两天发现了LLeaves大佬的博客,给出了不编译Aosp的方案,原文链接:https://blog.lleavesg.top/article/pixel5-kernel-build
编译环境:
- OS:Windows11,WSL
- Linux Version: Ubuntu 20.04
- VsCode WSL插件
在此,默认已经安装配置好环境,如需要安装wsl,Ubuntu环境的请自行Google
0x1 依赖安装
首先安装必要的依赖
查看手机的Linux内核版本信息,并且确定分支
使用
cat /proc/version
查看版本号pixel5对应的分支为
android-msm-redbull-4.19-android12
,因为我在这个地方使用的版本为Android12,所以我们在https://android.googlesource.com/kernel/manifest/+refs中查找android-msm-redbull-4.19-android12
我们使用repo进行拉取
0x2 Repo安装
环境配置
0x3 拉取源码
拉取的速度在于个人的网速
💡Tips 如何配置WSL的代理 首先我使用的代理软件为Clash Verge
,我设置的端口为7890
Ubuntu下我使用的shel为zsh
修改~/.zshrc
添加代码根据cat /etc/resolv.conf
查看wsl的ip,使用时只需要在终端输入proxy
即可
源码大概40g左右,我大概1个小时左右拉完
目录结构为:
我们先切换到和我们内核同版本的分支,如我们查看
/proc/version
得到的版本号4.19.202-g5fbe36ea56f7-ab8008033
,g后面的5fbe36ea56f7
即为分支号切换分支:
0x4 解决办法
我们先探讨一下为什么必须要编译AOSP才能使内核刷入正常开机呢,其实我也不太清楚
在使用正常的方式将内核编译完成之后,需要将编译出的产物:
*.ko
Image.lz4
Image.lz4-dtb
kernel-uapi-headers.tar.gz
放到aosp/device/google/redbull-kernel
中,然后编译aosp,译完成后将kernel/out/android-msm-pixel-4.19/dist/
中的vendor_boot.img
复制到AOSP目录下out/target/product/redfin
中,才能正常刷写开机但是AOSP的源码非常庞大,并且对于机器的性能也有强硬的要求,跑一次aosp非常的麻烦
我们其实只是需要boot中的
ramdisk
,将它链接到我们编译的boot中去(详细原理和踩坑过程可以参考
LLeaves
大佬的博客)我尝试了很多方法,在
android12
中都提取不出来我们最终需要的,例如我的系统是sq1a.220205.002
,在boot中提取出来的ramdisk
对比aosp中编译提取出来的,缺少了许多文件,在ventor_boot
中提取到的又比我们需要的多很多文件在尝试N次和手机砖了N次后,终于得出以下方法
- 编译AOSP 在AOSP环境下进行编译
- 编译LineageOS 提取编译后boot的ramdisk
- 使用官方
Android11
的工厂包进行提取
我们使用https://forum.xda-developers.com/attachments/android-image-kitchen-v3-8-win32-zip.5300919/ 工具进行解包boot.img
将提取到的
boot.img-ramdisk.cpio.lz4
放在源码根目录,即pixel5-kernel
修改
private/msm-google/build.config.redbull.common
中的GKI_RAMDISK_PREBUILT_BINARY
使得
ramdisk
被打包进入boot.img
更改完后在
pixel5-kernel
目录下编译内核0x5 开启KallSyms
private/msm-google/arch/arm64/configs/redbull_defconfig
生成.config
到private/msm-google/.config
make ARCH=arm64 menuconfig
打开可视化配置界面,键入/
进行搜索,搜索KALLSYMS
我们根据
Location
去开启,开启后进行Save保存并退出生成新的config,覆盖原有的
defconfig
,并删除.config
,完成后在msm-google
目录下提交git,防止出现脏内核重新编译内核,如果报错提示
private/msm-google
不干净,需要使用make mrproper
进行清理编译完毕后,使用fastboot命令刷入,产物在
pixel5-kernel/out/android-msm-pixel-4.19/dist
,刷入boot.img和ventor_boot.img成功开机后,查看内核
下载
APatch
,patch内核这次提示找到了符号,patch完成后重新刷入开机