杭州腾渊创想网络科技官网
杭州腾渊创想网络科技官网
杭州腾渊创想网络科技官网
杭州腾渊创想网络科技官网
杭州腾渊创想网络科技官网

OPPO 与 OnePlus 机型内核编译指南

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/
  • cdcommon

🔙 旧内核设备

  • devicetree 仓库内一般有 kernel/vendor/
  • kernel/msm-5.4/(不同设备目录名可能不同)
  • kernel 源码全部移进来
  • cdmsm-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
  • 自编译内核可能驱动不完全,出现卡顿 / 功能缺失属正常
  • 用着不适就刷回官方原版内核
请登录后发表评论

    没有回复内容