-
-
Pixel 3 Kernel 4.9 编译集成 ReSukiSU 指南
-
发表于: 10小时前 177
-
Pixel 3 Kernel 4.9 编译集成 ReSukiSU 指南
前言
在编译 Pixel 3 的 SukiSU-Ultra 内核时遇到了各种兼容性问题,经过多次尝试后改用 ReSukiSU 方案。参考 JackA1ltman 的 NonGKI_Kernel_Build_2nd 仓库中提供的补丁代码,成功编译出带有 susfs 和 kpm 的 ReSukiSU 版本。
本文记录了完整的编译过程,供有相同需求的用户参考。编译过程中部分 patch 可能存在冲突需要手动修正,文章末尾会提供修正后的 patch 文件以及打包 boot 后驱动丢失的解决方案。
编译环境准备
本次编译采用 WSL 下的 Ubuntu 22.04,需先安装必要的编译环境,并下载 Pixel 3 源码。
必要编译环境
sudo apt install -y build-essential git make clang llvm lz4 zstd zip unzip tar curl wget bc cpio flex bison perl python3 python3-pip libssl-dev libelf-dev libncurses5-dev libncurses-dev libbz2-dev liblz4-tool u-boot-tools dtc coccinelle lib32stdc++6 gcc-aarch64-linux-gnu g++-aarch64-linux-gnu openjdk-8-jdk
设置 git
git config --global user.email "xxx@gmail.com"
git config --global user.name "xxx"
设置安装 repo
可以使用官方下载或者镜像下载
mkdir ~/bin
PATH=~/bin:$PATH
curl 6c0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6r3!0J5j5h3N6W2i4K6u0W2k6$3!0G2k6$3I4W2j5i4m8A6M7#2)9J5k6h3y4G2L8g2)9J5c8X3N6A6N6q4)9J5k6s2u0W2M7r3!0Q4x3X3c8V1L8%4N6F1L8r3!0S2k6s2y4Q4x3V1k6J5k6i4m8G2 > ~/bin/repo
# curl -L c4eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6Y4K9i4c8Q4x3V1k6Y4K9i4c8Q4x3X3c8J5k6i4m8G2 -o repo 或者采用镜像站点进行下载
chmod a+x ~/bin/repo
repo version # 执行查看是否安装成功
# 后续需要用到python
sudo ln -s /usr/bin/python3 /usr/bin/python
内核源码下载
pixel3 内核源码直接使用官方的链接同步进行下载,或采用镜像站点进行下载即可(建议官方下载可将编译工具环境一并同步下来不需要在去配置)
官方下载请参考 Android 官方内核编译文档

mkdir android-kernel && cd android-kernel
repo init -u 02bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2k6$3!0G2k6$3I4W2M7$3!0#2M7X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3K9$3g2J5L8X3g2D9i4K6u0r3L8h3q4F1K9h3k6W2M7%4b7`. -b android-msm-crosshatch-4.9-android12
repo sync -c --no-tags
镜像站点下载
⚠️ 注意:此种方式需要自行配置编译工具链,不建议新手使用
mkdir android-kernel && cd android-kernel
git clone -b android-msm-crosshatch-4.9-android12 f65K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2L8%4y4H3i4K6u0W2N6s2g2F1j5g2)9J5k6i4c8K6K9h3&6Y4K9s2g2S2i4K6u0W2k6h3c8#2i4K6u0W2j5$3&6Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0r3K9$3g2J5L8X3g2D9i4K6u0r3L8i4y4E0i4K6u0W2k6$3W2@1
同步完成后进入下一步 ReSukiSU 集成
ReSukiSU 集成
参考 ReSukiSU 官方集成方式 ReSukiSU 官方构建指南
进入/private/msm-google[所有操作基本基于此目录下]下载 ReSukiSU 补丁
curl -LSs "123K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5j5i4N6Q4x3X3g2Y4K9i4c8Z5N6h3u0#2M7$3g2J5j5$3!0F1N6r3g2F1N6q4)9J5k6h3y4G2L8g2)9J5c8W2u0W2f1%4g2C8K9g2y4g2i4K6u0r3f1X3g2e0N6h3E0A6f1#2g2Q4x3V1k6E0j5h3W2F1i4K6u0r3K9$3g2J5L8X3g2D9i4K6u0r3M7$3g2@1N6i4m8Q4x3X3g2K6K9l9`.`." | bash
由于需要集成 susfs 和 kpm 故不能全参考官方集成方式进行修补,需要借鉴**NonGKI_Kernel_Build_2nd**项目中补丁进行修补即可,参考 build-xiaomi-mix2s-evox10-a15.yml 这个 action 中的编译过程进行修补,直接从项目中找到对应文件进行修补即可
修补 KMP 部分
由于 4.9 内核部分缺少 memory 相关函数,需先进行此部分 patch 进行修复
patch -p1 < set_memory_to_49_and_low.patch

查看 patch 是否存在未修补的需要手动进行修补,可使用 git status 查看
git status

需要对存在 rej 文件进行修补,此处只对一个进行演示修补

对 rej 的文件对应的文件进行修补后清除一下 rej 文件
find . -type f \( -name "*.rej" -o -name "*.orig" \) -delete
修补 susfs 部分及 inline_hook
首先修补 susfs 部分文件,一路回车修补
patch -p1 < susfs_patch_to_4.9.patch
查看存在冲突部分进行手动修补(和修补 set_memory 一致自行修补),可以存在多个冲突需要仔细对照修补
git status


修补 inline_hook
./susfs_inline_hook_patches.sh
其他补丁集成
Hide Stuff 补丁
伪造 /proc 进程内存视图,抹除 KSU/SUSFS/ 定制内核所有痕迹,参考.github\workflows\patch-hide-stuff\action.yml 文件制作一个 bash 文件
if grep -q "show_vma_header_prefix_fake" "fs/proc/task_mmu.c"; then
echo "[+] Found show_vma_header_prefix_fake."
else
spatch --sp-file added_show_vma_header_prefix_fake.cocci --in-place fs/proc/task_mmu.c
echo "[+] Added show_vma_header_prefix_fake."
fi
if grep -q "struct dentry \*dentry" "fs/proc/task_mmu.c"; then
echo "[+] Found variable."
else
sed -i '/const char \*name = NULL;/a\ struct dentry *dentry;' fs/proc/task_mmu.c
echo "[+] Added dentry."
fi
if grep -q "jit-zygote-cache" "fs/proc/task_mmu.c"; then
echo "[+] Found hide stuff."
else
spatch --sp-file function_hide_stuff.cocci --in-place fs/proc/task_mmu.c
echo "[+] Added hide stuff."
fi
if grep -q "bypass:" "fs/proc/task_mmu.c"; then
echo "[+] Found bypass."
else
if grep -q 'if (show_vma_header_prefix' "fs/proc/task_mmu.c"; then
perl -i -0pe 's/(if \(show_vma_header_prefix\(m, start, end, flags, pgoff, dev, ino\)\)\s+return;)/$1\nbypass:/s' fs/proc/task_mmu.c
echo "[+] Added bypass."
else
sed -i '/show_vma_header_prefix(m, start, end, flags, pgoff, dev, ino);/a\bypass:' fs/proc/task_mmu.c
echo "[+] Added bypass."
fi
fi
if grep -q "lineage" "fs/proc/base.c"; then
echo "[+] Found hide stuff part ii."
else
spatch --sp-file function_hide_stuff_partii.cocci --in-place fs/proc/base.c
echo "[+] Added hide stuff part ii."
fi
if grep -q "/dev/ashmem" "fs/proc/task_mmu.c"; then
sed -i 's|"/dev/ashmem (deleted)"|"/system/framework/framework-res.apk"|' fs/proc/task_mmu.c
sed -i 's|"/dev/ashmem (deleted)"|"/system/framework/framework-res.apk"|' fs/proc/base.c
echo "[+] Changed ashmem to framework-res."
fi
然后将仓库中\Patches\HideStuff 的文件复制到/private/msm-google 下,将上面的 sh 在此目录下执行即可

no-kprobe 补丁
抛弃 kprobe 钩子,改用 syscall / SUSFS 内联钩子,躲开所有基于 kprobe 的 Root 检测,内核更稳、隐藏更强。
先执行 backport_kernel_read_and_kernel_write_4.9.patch
patch -p1 < backport_kernel_read_and_kernel_write_4.9.patch
# 然后查看git status 是否存在rej
git status

再执行 backport_patches.sh 和 backport_selinux_patches.sh
x@xx:~/android-kernel/private/msm-google$./backport_patches.sh
Current backport patch version:2025-11-14
======================================
[+] fs/namespace.c Patched!
[+] Count: 2
======================================
[+] fs/internal.h Patched!
[+] Count: 1
======================================
[-] KernelSU have no strncpy_from_user_nofault, Skipped.
======================================
[-] KernelSU have no strncpy_from_user_nofault, Skipped.
======================================
[-] KernelSU have no strncpy_from_user_nofault, Skipped.
======================================
======================================
[+] include/linux/seccomp.h Patched!
[+] Count: 1
======================================
x@xx:~/android-kernel/private/msm-google$ ./backport_selinux_patches.sh
Current SELinux backport patch version:2025-11-14
======================================
[-] KernelSU have no selinux_inode, Skipped.
[-] KernelSU have no selinux_cred, Skipped.
======================================
[-] KernelSU have no selinux_inode, Skipped.
======================================
[-] KernelSU have no selinux_cred, Skipped.
======================================
[-] KernelSU have no selinux_inode, Skipped.
[-] KernelSU have no selinux_cred, Skipped.
======================================
Re:Kernel 补丁
内核运行时环境伪装 + 系统调用表隐藏 + 规避内核版本 / 特征检测
patch -p1 < rekernel_extra.patch
./rekernel_patches.sh
Baseband Guard (BBC) 补丁
保护基带、EFS、Persist、Modem 等关键分区不被恶意篡改、非法刷写。⚠️ 注意:在集成过程中按照脚本编译后并未追加配置文件,此补丁可能未生效(若有大佬知道原因可告知,非常感谢)
根据仓库代码制作 bash 脚本进行操作,由于内核版本低有些不太兼容,需要手动修改一下
wget -O- e23K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6$3j5#2)9J5k6s2c8W2j5h3S2G2N6i4y4W2i4K6u0r3b7X3q4K6k6h3u0S2L8X3c8Q4x3X3c8Y4N6h3q4J5k6q4)9J5c8Y4u0S2N6#2)9J5c8X3#2S2K9h3&6Q4x3V1k6K6k6i4c8#2M7q4)9J5k6i4y4Z5 | bash
echo -e "\nCONFIG_BBG=y" >> ./arch/arm64/configs/b1c1_defconfig
if grep -q "DEFINE_LSM" "include/linux/lsm_hooks.h" && ! grep -q "baseband_guard" "./arch/arm64/configs/b1c1_defconfig"; then
echo "=======Detect======="
echo "= Found DEFINE_LSM ="
echo "===================="
if grep -q "CONFIG_LSM" "./arch/arm64/configs/b1c1_defconfig"; then
echo "[-] Have not found default CONFIG_LSM values."
echo 'CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,apparmor,baseband_guard"' >> ./arch/arm64/configs/b1c1_defconfig
else
echo "[+] Found default CONFIG_LSM values."
sed -i 's/\(CONFIG_LSM="[^"]*\)"/\1,baseband_guard"/' ./arch/arm64/configs/b1c1_defconfig
fi
fi
echo "Patched Baseband Guard for your kernel successfully."

Baseband Guard (BBC) 补丁排错
官方脚本不匹配
大概率编译会报错,因为脚本中并未匹配到一条数据添加头文件,故需要手动添加



由于下载的 setup.sh 脚本中存在补丁匹配没匹配到添加函数头需手动修补


函数重复
会出现这个函数重复问题,直接注释一个即可


配置设置及编译
配置设置
pixel3 的配置文件为/private/msm-google/arch/arm64/configs/b1c1_defconfig 文件,添加如下配置
CONFIG_KSU=y
CONFIG_KSU_SUSFS=y
CONFIG_SUSFS_EXTRA_WORKS=y
CONFIG_KSU_SUSFS_SUS_PATH=y
CONFIG_KSU_SUSFS_SUS_MOUNT=y
CONFIG_KSU_SUSFS_SUS_KSTAT=y
CONFIG_KSU_SUSFS_SPOOF_UNAME=y
CONFIG_KSU_SUSFS_ENABLE_LOG=y
CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS=y
CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG=y
CONFIG_KSU_SUSFS_OPEN_REDIRECT=y
CONFIG_KSU_SUSFS_SUS_MAP=y
CONFIG_THREAD_INFO_IN_TASK=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
CONFIG_KPM=y
#BBC配置 需要集成BBC开启
CONFIG_BBG=y
修改 android-kernel/build.config 文件,注释检查编译配置文件行

直接开始编译
./build/build.sh
若编译过程中错误停止提示字符超过 64 字节时,直接写死一个内核名称即可


编译完成后应为开启 kpm 需要对 Image 进行补丁,需去SukiSU_patch仓库中下载 patch 脚本

然后放到 /out/android-msm-pixel-4.9/private/msm-google/arch/arm64/boot 下进行修补 Image,将生成新的 oImage(即 patch 后的 Image),用其打包回 boot 即可
./patch_linux

解决 Image 打包成 boot 后驱动丢失问题
[!NOTE]
若编译整个安卓系统的可忽略打包 boot 后驱动丢失问题情况
由于直接使用 magiskboot 手动解压 boot 后将 Image 替换打包进去刷入系统会存在驱动丢失问题,故参考 B 站上的视频教程进行解决。
提取驱动编译参数
需要先找个原本的 boot.img(可以去刷机包中提取)

然后使用Android Image Kitchen工具提取 boot 文件和驱动参数,点击运行 unpackimg.bat 将自动解压 boot(注意软件不能在中文路径下使用)

需要解压页面中参数如下:
BOOT_IMAGE_HEADER_VERSION=2
KERNEL_CMDLINE="console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 cgroup.memory=nokmem lpm_levels.sleep_disabled=1 usbcore.autosuspend=7 loop.max_part=7 androidboot.boot_devices=soc/1d84000.ufshc androidboot.super_partition=system buildvariant=user"
BASE_ADDRESS=0x00000000
PAGE_SIZE=4096
并且需要解压 split_img 目录下 boot.img-ramdisk.cpio.gz

然后将解压的 boot.img-ramdisk.cpio 文件放到内核编译目录下面

后续还需去官方编译源码中找到mkbootimg.py,该脚本可将把 kernel + ramdisk.cpio.gz + dtb + 头信息合成 boot.img 即可刷入

现在编译时需要重新修改编译命令
BUILD_BOOT_IMG=1
MKBOOTIMG_PATH=mkbootimg.py
VENDOR_RAMDISK_BINARY=ramdisk.cpio
KERNEL_BINARY=Image.lz4
BOOT_IMAGE_HEADER_VERSION=2 KERNEL_CMDLINE="console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 cgroup.memory=nokmem lpm_levels.sleep_disabled=1 usbcore.autosuspend=7 loop.max_part=7 androidboot.boot_devices=soc/1d84000.ufshc androidboot.super_partition=system buildvariant=user"
BASE_ADDRESS=0x00000000
PAGE_SIZE=4096
build/build.sh
直接可编译出 boot.img

但由于需要对 Image 进行 kpm 补丁,故可以对 Image 进行补丁后在执行脚本合并 boot.img,先对 oImage 压缩到 lz4 格式
lz4 oImage
# 然后指定oImage.lz4路径,dtb ramdisk 路径和生成boot路径,其余参数和编译使用提取脚本参与一致,也看查看编译时脚本最后运行参数即可提取到该脚本参数
python mkbootimg.py --kernel /home/x/android-kernel/out/android-msm-pixel-4.9/dist/oImage.lz4 --header_version 2 --base 0x00000000 --pagesize 4096 --cmdline 'console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on msm_rtb.filter=0x237 ehci-hcd.park=3 service_locator.enable=1 cgroup.memory=nokmem lpm_levels.sleep_disabled=1 usbcore.autosuspend=7 loop.max_part=7 androidboot.boot_devices=soc/1d84000.ufshc androidboot.super_partition=system buildvariant=user' --dtb /home/x/android-kernel/out/android-msm-pixel-4.9/dist/dtb.img --ramdisk /home/x/android-kernel/out/android-msm-pixel-4.9/dist/ramdisk.gz -o /home/x/android-kernel/out/android-msm-pixel-4.9/dist/boot.img

刷入 boot 及管理器安装
刷入 boot 时可以进行临时刷入,若 boot 存在问题可关机重启后就正常了
adb reboot bootloader
# 临时刷入,重启后失效
fastboot boot boot.img
# 永久刷入
fastboot flash boot boot.img
# 刷入完成后重启进入系统
fastboot reboot
可以安装 ReSukiSu 管理器也可使用 SukiSU-Ultra 的管理



验证功能是否正常
刷入系统后,打开管理器查看是否正常识别:
- 打开 ReSukiSU 或 SukiSU-Ultra 管理器,确认显示内核版本信息
- 检查 SUSFS 状态:在管理器中确认 susfs 模块是否正常加载
- 检查 KPM 状态:确认 Kernel Patch Module 功能是否可用
- 安装一个测试模块验证模块管理功能正常
常见问题 FAQ
Q: patch 冲突如何手动修补?
A: 使用 git status 查找 .rej 文件,对照 .rej 内容手动修改对应源文件,修补完成后使用 find . -type f \( -name "*.rej" -o -name "*.orig" \) -delete 清理。
Q: 编译报错"字符超过 64 字节"怎么处理?
A: 找到对应的内核版本字符串定义位置,将其写死为一个固定的短内核名称即可。
Q: BBC (Baseband Guard) 补丁编译报错?
A: 由于官方脚本未正确匹配头文件,需要手动添加缺失的头文件引用,具体参考上文 BBC 补丁排错部分。
Q: 打包 boot 后驱动丢失怎么办?
A: 参考上文"解决 Image 打包成 boot 后驱动丢失问题"章节,使用 mkbootimg.py 并指定正确的 ramdisk、dtb 和 cmdline 参数重新打包。
Patch 地址
- GitHub Patch:plansec/pixel3Patch
参考链接
- 内核编译:Android 官方内核编译文档
- ReSukiSU:ReSukiSU/ReSukiSU
- ReSukiSU 官方指导:ReSukiSU 构建指南
- ReSukiSU 管理器:Manager-release.zip
- SukiSU-Ultra 管理器:SukiSU v4.1.2
- 编译补丁:JackA1ltman/NonGKI_Kernel_Build_2nd
- Baseband Guard:vc-teahouse/Baseband-guard
- KPM 补丁工具:SukiSU_patch/kpm
- 解压提取 boot 工具:osm0sis/Android-Image-Kitchen
- boot 合并脚本:mkbootimg.py
解决驱动异常:
上游内核源码及工具(susfs、SukiSU-Ultra、KernelSU):
[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。