Pixel5内核编译开启KallSyms
2024-7-30
| 2024-7-31
0  |  阅读时长 0 分钟
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才能使内核刷入正常开机呢,其实我也不太清楚
在使用正常的方式将内核编译完成之后,需要将编译出的产物:*.koImage.lz4Image.lz4-dtbkernel-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的工厂包进行提取
 
将提取到的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生成.configprivate/msm-google/.config
make ARCH=arm64 menuconfig 打开可视化配置界面,键入/ 进行搜索,搜索KALLSYMS
 
notion image
我们根据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
成功开机后,查看内核
notion image
 
下载APatch,patch内核这次提示找到了符号,patch完成后重新刷入开机
notion image
notion image
  • Android
  • Kernel
  • Pixel5 编译、刷入AOSP使用NDK(ollvm混淆)编译KPM
    Loading...
    目录