Part 0 · 前言
OPPO 与 OnePlus 内核编译大体相近,但仍有细微差异,让不少新手望而却步。
编译内核大多是”被迫选择”——比如官方内核不满足 Root / KSU / 模块需求时。本文聊的是如何基于官方开源内核源码,编译出属于自己的内核。
Part 1 · 准备资源
1.1 编译环境(任选其一)
-
Ubuntu(含 WSL)
-
Termux
-
GitHub Actions
1.2 找源码(关键)
需要先知道自己机型的 SoC 型号(如骁龙 695 = SM6375,不确定可查网)。
需要在 GitHub 上找 两个仓库:
|
品牌
|
组织
|
devicetree 仓库命名
|
普通 kernel 仓库命名
|
|---|---|---|---|
|
OPPO
|
oppo-source |
android_kernel_modules_and_devicetree_oppo_[SoC] |
android_kernel_oppo_[SoC] |
|
OnePlus
|
OnePlusOSS |
android_kernel_modules_and_devicetree_oneplus_[SoC] |
android_kernel_oneplus_[SoC] |
示例(OPPO A1 5G,PHS110):
-
android_kernel_modules_and_devicetree_oppo_sm6375 -
android_kernel_oppo_sm6375
克隆到 两个不同文件夹,
git clone时注意 分支别选错。Part 2 · 编译环境(Ubuntu / WSL)
2.1 装依赖
sudo apt update && sudo apt-get install \
git ccache automake flex lzop bison gperf build-essential \
zip curl zlib1g-dev g++-multilib libxml2-utils bzip2 \
libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools \
pngcrush schedtool dpkg-dev make optipng maven libssl-dev \
pwgen libswitch-perl policycoreutils minicom \
libxml-sax-base-perl libxml-simple-perl bc libc6-dev-i386 \
libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip \
device-tree-compiler python3 zstd libc6 binutils \
libc6-dev-i386 gcc g++ p7zip p7zip-full -y
2.2 摆放源码(新旧内核路径不同)
🆕 新内核设备
-
devicetree 仓库内一般有
kernel-platform/和vendor/ -
在
kernel-platform/下新建common/ -
把 kernel 源码全部移进
common/ -
cd进common
🔙 旧内核设备
-
devicetree 仓库内一般有
kernel/和vendor/ -
进
kernel/msm-5.4/(不同设备目录名可能不同) -
把 kernel 源码全部移进来
-
cd进msm-5.4
⚠️ 部分旧内核需要 Clang 版本较低 + GCC 4.9 交叉编译例:PHS110 用 Clang 11.0.2 + GCC 4.9,工具链配置可问 AI 或自查。
Part 3 · 开始编译
3.1 defconfig → .config
新内核
make ARCH=arm64 LLVM=1 O=out gki_defconfig
(
gki_defconfig换成自己机型的 defconfig)旧内核
make -j$(nproc --all) CC="clang" O=out ARCH=arm64 LD=ld.lld \
LLVM=1 LLVM_IAS=1 \
CLANG_TRIPLE=aarch64-linux-gnu- \
CROSS_COMPILE=/home/gan/gcc64/bin/aarch64-linux-android- \
CROSS_COMPILE_ARM32=/home/gan/gcc32/bin/arm-linux-androideabi- \
gki_defconfig
📌/home/gan/gcc64这类路径 改成你自己的工具链路径,别直接复制。
3.2(可选)menuconfig 微调
# 新内核
make ARCH=arm64 O=out menuconfig
# 旧内核
make CC="clang" O=out ARCH=arm64 LD=ld.lld LLVM=1 LLVM_IAS=1 \
CLANG_TRIPLE=aarch64-linux-gnu- \
CROSS_COMPILE=你的gcc64路径 \
CROSS_COMPILE_ARM32=你的gcc32路径 \
menuconfig
常见操作:关内核签名验证(
CONFIG_MODULE_SIG_FORCE之类)。3.3 正式编译
新内核
make ARCH=arm64 LLVM=1 O=out -j$(nproc --all)
旧内核
make -j$(nproc --all) CC="clang" O=out ARCH=arm64 LD=ld.lld \
LLVM=1 LLVM_IAS=1 \
CLANG_TRIPLE=aarch64-linux-gnu- \
CROSS_COMPILE=你的gcc64路径 \
CROSS_COMPILE_ARM32=你的gcc32路径
编译成功后,
out/arch/arm64/boot/下会得到 Image/ Image.gz。Part 4 · 刷入内核
-
推荐用 AnyKernel3 打成 zip
-
用 Kernel Flasher 或 TWRP / 搞机助手刷入
-
刷前 一定备份原 boot / vendor_boot / 字库
-
出问题可 9008 救砖
Part 5 · 注意事项
-
部分源在 GitHub 可能被墙,注意网络
-
刷完若 卡第一屏无限重启 → 立刻 9008 回朔 boot
-
自编译内核可能驱动不完全,出现卡顿 / 功能缺失属正常
-
用着不适就刷回官方原版内核












没有回复内容