KernelSU 源码编译完整指南
KernelSU 是 Android 设备的内核级权限管理工具,编译核心是 「获取对应设备的内核源码 + 集成 KernelSU 补丁 + 编译内核镜像」。以下是通用编译流程,适配大多数 Android 设备(重点以 AOSP 通用内核、高通 / 联发科芯片为例)。
一、前置准备
- 编译环境要求
- 系统:Ubuntu 20.04/22.04(推荐,WSL2 也可,需解决 USB 和编译依赖问题)
- 硬件:至少 8GB 内存(16GB+ 推荐)、50GB+ 磁盘空间(内核源码 + 工具链需大量存储)
- 依赖安装:
# Ubuntu/Debian 系列
sudo apt update && sudo apt install -y \
git curl wget flex bison gperf build-essential \
zip unzip libncurses5-dev libncursesw5-dev \
x11proto-core-dev libx11-dev libgl1-mesa-dev \
libxml2-utils xsltproc zlib1g-dev libssl-dev \
bc python3 python3-pip python3-dev \
liblz4-tool libelf-dev dwarves clang lld
- 关键工具下载
(1)Android NDK(推荐,替代单独工具链)
KernelSU 推荐使用 NDK r25c 或 r26b(兼容性最好):
# 下载 NDK r25c(64位 Linux)
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
unzip android-ndk-r25c-linux.zip -d ~/Android/
# 配置环境变量(临时生效,永久生效需写入 ~/.bashrc)
export NDK_PATH=~/Android/android-ndk-r25c
(2)KernelSU 源码
git clone https://github.com/tiann/KernelSU.git
cd KernelSU
# 切换到稳定分支(推荐 latest 或指定版本,如 v0.7.0)
git checkout latest
二、核心步骤:获取设备内核源码
编译 KernelSU 必须基于 你设备的对应内核源码(内核版本、配置需与设备一致,否则无法开机),常见获取方式:
方式 1:官方开源内核(优先)
谷歌 Pixel 设备 :https://android.googlesource.com/kernel/common/
OPPO / 一加:https://github.com/OnePlusOSS/
其他品牌:查看官网「开源中心」或 GitHub 组织
Android 通用内核仓库(兜底参考)
若上述渠道均未获取到gold-s-oss源码,可先下载 Android 通用内核(Redmi 机型内核多基于此开发)作为基础,再补充小米机型的专属补丁:
bash
克隆Android通用内核(适用于多数arm64机型)
git clone https://android.googlesource.com/kernel/common.git
该仓库是 Android 通用内核(ACK)的官方源码,Redmi Note 13 5G 的内核本质也是基于此类通用内核加硬件专属驱动修改而来,可结合小米其他机型的内核差异来补全适配。
如小米note13 源码

方式 2:提取设备当前内核配置
如果找不到官方源码,可先提取设备的内核配置(用于后续编译匹配):
1.设备已 root(临时 root 即可,如 Magisk)
2.执行以下命令提取配置:
# 手机端 adb 命令
adb pull /proc/config.gz ./ # 提取配置文件
gunzip config.gz -c > .config # 解压为 .config(后续编译用)
方式 3:第三方内核源码(如 LineageOS 内核)
如果官方未开源,可使用第三方适配的内核源码(需确保与设备型号、Android 版本匹配):
# 示例:LineageOS 通用内核(需替换为设备对应分支)
git clone https://github.com/LineageOS/android_kernel_google_msm.git
cd android_kernel_google_msm
git checkout lineage-21.0 # 对应 Android 14
三、集成 KernelSU 到内核源码
- 进入内核源码目录
cd /path/to/your/kernel_source # 替换为你的内核源码路径
- 应用 KernelSU 补丁
KernelSU 提供自动集成脚本,支持大多数内核(3.18+ 版本,Android 10+ 推荐):
# 假设 KernelSU 源码在 ~/KernelSU
~/KernelSU/kernel/setup.sh self
- 配置 KernelSU 选项(可选)
编辑内核配置文件 .config,可自定义以下选项(通常默认即可):
make menuconfig # 打开图形化配置界面
- 找到 KernelSU 菜单:
- Enable KernelSU:必须勾选(默认已勾)
- KernelSU Version:默认自动获取
- SU File Path:默认 /system/xbin/su(无需修改)
- Support Magic Mount:支持模块挂载(默认开启)
保存配置并退出(按 Esc → 选择 Save → 回车 → Exit)。
四、编译内核镜像
- 配置编译环境变量
根据设备架构和内核版本设置(关键!错误会导致编译失败):
# 1. 设置目标架构(常见:arm64-v8a → ARCH=arm64;x86_64 → ARCH=x86_64)
export ARCH=arm64
# 2. 设置交叉编译器(使用 NDK 内置工具链)
# 这个命令末尾的 -(连字符)不是笔误,而是交叉编译器的「命名约定」 —— 核心原因是 CROSS_COMPILE 是「前缀」而非完整路径,编译器工具链的可执行文件名称会以这个前缀开头,末尾的 - 是为了拼接工具名(如 gcc、ld、as 等)
export CROSS_COMPILE=$NDK_PATH/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-
# 3. 设置编译工具(可选,clang 编译需添加)
export CC=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
export CLANG_TRIPLE=aarch64-linux-android-
# 4. 设置设备_defconfig(关键!替换为你设备的 defconfig)
# 示例:Pixel 6 → google/gs101_defconfig;小米 12 → vendor/xiaomi/sm8350_defconfig
DEFCONFIG=your_device_defconfig # 替换为实际 defconfig 名称
- 生成编译配置
make O=out $DEFCONFIG # O=out 指定输出目录为 out(避免污染源码)
- 如果之前已提取过设备 .config,可直接复制到 out 目录:
cp /path/to/your/.config out/.config
- 开始编译
# -j 后面是线程数(推荐 = CPU 核心数 × 1.5,如 8 核 → -j12)
make O=out -j$(nproc)
- 编译成功后的产物
编译完成后,在 out/arch/$ARCH/boot/ 目录下生成内核镜像,常见格式:
- Image.gz:通用压缩镜像
- Image.lz4:LZ4 压缩镜像(部分设备使用)
- boot.img:完整 boot 镜像(部分内核源码支持直接生成)
- dtbo.img:设备树覆盖镜像(部分设备需要)
五、刷入设备(关键步骤)
编译后的内核镜像需打包为 boot.img(或 init_boot.img,Android 13+ 部分设备使用),再刷入设备。
- 打包 boot.img(如果只生成 Image.gz)
需要设备的原始 boot.img(可从官方 ROM 提取),使用 magiskboot 或 mkbootimg 打包:
# 1. 提取原始 boot.img 的 ramdisk 和 dtb
magiskboot unpack boot_original.img
# 2. 替换内核镜像(Image.gz 替换原 kernel)
cp out/arch/arm64/boot/Image.gz kernel
# 3. 重新打包
magiskboot repack boot_original.img boot_kernelsu.img
- 刷入设备
1.设备解锁 Bootloader(需提前解锁,各品牌解锁方式不同)
2.进入 Fastboot 模式:
adb reboot bootloader
3.刷入 boot.img:
fastboot flash boot boot_kernelsu.img
# 如果是 Android 13+ 且使用 init_boot.img:
# fastboot flash init_boot init_boot_kernelsu.img
4.重启设备:
fastboot reboot
六、验证 KernelSU 是否生效
1.设备重启后,安装 KernelSU 管理器(APK):
2.打开 APK:
- 如果显示「KernelSU 已激活」,说明编译和刷入成功
- 可尝试授予 APP root 权限,验证功能正常
常见问题排查
- 编译报错「undefined reference to xxx」
- 原因:内核版本与 KernelSU 不兼容( KernelSU 支持 3.18+ 内核,优先 Android 10+)
- 解决:升级内核源码版本,或使用 KernelSU 对应分支(如旧内核用 legacy 分支)
- 编译卡在「CC xxx.o」无响应
- 原因:内存不足或线程数过多
- 解决:减少 -j 线程数(如 make -j4),或增加交换分区(SWAP)
- 刷入后无法开机(卡在开机 logo)
- 原因:内核配置与设备不匹配(defconfig 错误、驱动缺失)
- 解决:
a.确认 defconfig 是设备专用版本
b.对比原始内核的 .config 与编译配置,补全缺失的驱动选项
c.检查内核版本是否与设备 Android 版本兼容(如 Android 14 需内核 5.4+)
- KernelSU 管理器显示「未激活」
- 原因:KernelSU 补丁未正确集成,或内核镜像未刷入成功
- 解决:
a.重新执行 setup.sh 脚本,确保补丁应用成功
b.检查编译日志,确认 CONFIG_KERNELSU=y 已生效
c.重新打包 boot.img,确保内核镜像替换正确
参考资料
参考资料
- KernelSU 官方文档:https://kernelsu.org/zh-CN/guide/build.html
- Android 内核编译指南:https://source.android.com/docs/setup/build/building-kernels
- 设备内核源码查询:https://github.com/orgs/Android-Kernel-Sources/repositories
如果遇到具体设备的编译问题(如找不到 defconfig、芯片平台特殊配置),可提供设备型号、Android 版本、内核版本,进一步细化步骤!