MENU

记录:为 renoir 编译 DerpFest 15.2、安装 KernelSU Next

• 2025 年 08 月 01 日 • 阅读: 89 • 未分类

许久没有关注自定义ROM相关的东西了,这些天又来了兴致。重新简单了解了下,新版本的 DerpFest 似乎已经是基于 LineageOS 了,那么对于 LineageOS 支持的设备,用 LineageOS 提供的设备树,应该能比较轻松地完成编译。

——事实上也确是如此,笔者为手里的 renoir 设备成功构建了 DerpFest 15.2,特将这一过程记录下。如果你恰好有相同设备,也可以跟着操作一番,体验一下 ROM 的构建流程。

如果打算自行构建...

自行构建对系统配置有一定要求:
系统内存 > 32 GB,可能仍需更多 Swap 虚拟内存;
剩余硬盘(SSD)容量 > 500 GB,且如果使用机械硬盘将导致构建极慢。

本文中可能存在错误与不完善之处,恳请读者批评指正。

title=

关于编译...

关于编译所需的依赖和详细教程,可以参考对应设备的 LineageOS Wiki。

对于本文中的设备,即: Build for renoir | LineageOS Wiki

笔者的编译环境为 Ubuntu 24.04 (WSL)。受篇幅所限,下文将不再提及配置依赖的过程。

一、拉取 ROM 源代码

编译开始前需要获取 ROM 的源代码,需要用到 repo 工具(由 Google 开发,简化了对多个 Git 版本库的管理)。

首先进行初始化:

mkdir ~/derp && cd ~/derp
repo init -u https://github.com/DerpFest-AOSP/manifest.git -b 15.2 --git-lfs

为了节省磁盘空间,也可再添加参数 --depth=1 设置减少克隆深度。

一直卡住?

repo 初始化过程中会先尝试连接 Google 的服务器进行更新,国内用户可能无法访问。可以改用 清华大学开源软件镜像站 解决。

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

此外如有需要,进行下一步同步之前,还可以修改 .repo/manifests/default.xml ,将

<remote  name="aosp"
           fetch="https://android.googlesource.com"

改为

<remote  name="aosp"
           fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP"

接下来,同步源代码:

repo sync -j8

耐心等待这一步完成。

二、获取设备所需源代码

1. 直接下载部分

除了 ROM 源代码,还需要特定设备所需的配置、内核部分的源代码。可以手动克隆所需仓库,也可以像下面这样操作。

先初始化构建环境:

. build/envsetup.sh

再执行:

# $device 此处即 renoir,$release 此处即 bp1a。
lunch lineage_$device-$release-user

运行出错?

出错是正常的,但如果错误信息里有关于“DERPFEST_BUILD_TYPE”的内容,可能需修改 vendor/lineage/config/version.mk,将 6 - 10 行直接修改为 DERPFEST_BUILD_TYPE := Community

注意 lunch 命令格式

以前 lunch 命令没有 $release 这一部分,如果仍直接执行 lunch lineage_renoir-user 是不正确的。

构建系统会自动从 LineageOS 的仓库获取所需源代码,在本例中就包括:

device/xiaomi/renoir device/xiaomi/sm8350-common kernel/xiaomi/sm8350 hardware/xiaomi

但是并不包含一些专有文件(vendor/xiaomi/renoir vendor/xiaomi/sm8350-common),它们需要单独提取(在下一步中说明)。没有它们,编译无法进行,这也是这一步骤报错的原因。

2. 提取部分

请参阅 Wiki 并谨慎操作

对于 DerpFest 官方支持的设备,可能不需要手动提取 vendor

此外,不同设备的提取方式可能不同,请参考 LineageOS Wiki:Extracting proprietary blobs from LineageOS zip files 。本文所述对应着 Wiki 中的 Payload-based OTA

我们下载好 LineageOS 构建好的 ROM ,用 payload_dumper 等工具提取出所有分区的 img 镜像。假设把它们全部保存在 ~/system_dump ,接下来进行提取:

cd device/xiaomi/renoir
./extract-files.py ~/system_dump/
cd ../../..

此时 vendor/xiaomi/renoirvendor/xiaomi/sm8350-common 就应该提取出来了。

三、修改源代码

1. 为内核添加 KernelSU Next

根据 KernelSU Next 的文档

cd kernel/xiaomi/sm8350
curl -LSs "https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/next/kernel/setup.sh" | bash -

然后,参考 向后移植 path_umount 修改 fs/namespace.c 即可。

2. 其他修改

根据实际需要进行修改。比如,为内核启用 Docker 所需的配置...... 在此就不再赘述。

在本例中笔者遇到过下面的问题:

[ 98% 67/68] finishing legacy Make module parsing ...
FAILED:
build/make/core/main.mk:1117: warning:  device/xiaomi/renoir/lineage_renoir.mk includes non-existent modules in PRODUCT_PACKAGES
Offending entries:
android.hardware.thermal-service.qti
build/make/core/main.mk:1117: error: Build failed.
16:29:09 ckati failed with: exit status 1

临时解决方法是,找到 device/xiaomi/sm8350-common/common.mk 中的这一部分:

# Soong namespaces
PRODUCT_SOONG_NAMESPACES += \
    $(LOCAL_PATH) \
    hardware/xiaomi

向其中添加 hardware/qcom-caf/thermal-legacy-um 即可。

更新前内容

临时解决方法是:

git clone -b lineage-22.2-legacy-um https://github.com/LineageOS/android_hardware_qcom_thermal hardware/qcom/thermal

并找到 device/xiaomi/sm8350-common/common.mk 中的这一部分:

# Soong namespaces
PRODUCT_SOONG_NAMESPACES += \
    $(LOCAL_PATH) \
    hardware/xiaomi

向其中添加 hardware/qcom/thermal 即可。

四、配置签名

这一部分可以省略,但不建议,因为未签名的 ROM 无法通过 Play Integrity 认证。

# subject 内信息可自行修改
subject='/C=US/ST=State/L=City/O=Android/OU=Android/CN=Android/emailAddress=email@example.com';
for x in releasekey nfc platform shared media networkstack verity otakey testkey sdk_sandbox bluetooth;
do ./development/tools/make_key vendor/lineage/signing/keys/$x "$subject";
done

执行上述命令后,一路回车即可。

不要重复执行

构建完 ROM 并刷入设备后,如果后续重新构建并需要保留数据更新(dirty-flash),需要确保签名相同。
请不要重复执行上面的代码,否则会使用新生成的密钥签名!

五、开始构建

前面做了那么多准备工作,是时候开始构建了。首先重新执行上面第二部分的 lunch 命令:

lunch lineage_renoir-bp1a-user

不出意外的话,构建系统将打印一些基础信息,确认无误后开始构建:

mka derp -j12

出现 OOM 错误?

尝试降低并行线程数(-j 后面的数字),并增加 Swap 容量。

经过数小时的等待,就可以看到构建后的成果了(中途查错调试,实际用时约 3 小时):

image.png
六、后续工作

将自己编译的 ROM 刷到设备上体验一下吧!也许没有问题,也许还存在一些瑕疵......

引用一下 LineageOS Wiki 中的结语:

Success! So… what’s next?

You’ve done it! Welcome to the elite club of self-builders. You’ve built your operating system from scratch, from the ground up. You are the master/mistress of your domain… and hopefully you’ve learned a bit on the way and had some fun too.


PS:为什么选择构建 DerpFest?因为笔者曾经使用过 DerpFest,喜欢它的一些自定义功能,并向其提交过一些翻译,对其比较熟悉。

最后编辑于: 2025 年 08 月 17 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码