前几天看到 OPPO 的 mt6877 源码放出了 Reno6 ColorOS13.1 分支。遂拉下来编译。
Config
首先需要知道 Reno6 ColorOS13.1 的内核用的是什么配置。
保险起见还是应该直接拿本机的 config 文件来进行编译。但是一方面 ColorOS13 太烂,烂的依托答辩。另一方面笔者没有解锁 Bootloader.而解锁又会清除数据。所以这条道路基本是行不通的。
根据查看本机信息得到 ColorOS 11.x/12.x 的内核版本是不变的,使用的配置均为 k6877v1_64_defconfig ,遂使用 k6877v1_64_k419_defconfig 来进行编译。
编译
这方面就没有啥太多想说的,无非就是安装依赖,拉取源码,然后写一个脚本编译然后就该干啥干啥了。
哦对了,如果要编译 OPLUS 内核的话,建议在 内核源码根目录的 nativefeatrues.memk 或者 oplus_native_features.mk 注释掉以下内容:
还有,如果是新机型的话,别忘了拉vendor源码。
1 | #OPLUS_FEATURE_SECURE_EXECGUARD=yes |
还要注释相关配置文件的内容:
1 | #ifdef CONFIG_OPLUS_SECURE_GUARD |
fix
然而不出以为的话应该会出意外。
然后果然出意外了。
1 | In file included from ../drivers/misc/mediatek/sensor/2.0/oplus_sensor_devinfo/oplus_sensor_feedback/sensor_feedback.c:24: |
遂通过 find 命令找到了该文件的位置:
1 | drivers/misc/mediatek/scp/include/scp.h |
于是就通过 ln 命令进行了软连接。考虑到头文件里可能还嵌入头文件,遂把剩下的头文件也 ln了过去。
你以为这就完了吗?
接着编译发现又出现了以下问题:
1 | DTC arch/arm64/boot/dts/mediatek/oplus6877_20181.dtb |
然而很抱歉,笔者翻阅了真我一加的 mt6877 源码后也没有找到这个文件,于是就注释掉了相关选项:
1 | #CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y |
而且笔者也并没有在 arch/arm64/boot/Makefile 里找到有关于 Image.gz-dtb 和 dtbo 的内容。
最后编译出了 Image.gz 文件
1 | AR drivers/misc/built-in.a |
附: 笔者比对了 android_kernel_oppo_mtk_4.19 ,除了配置文件不一样,其他地方应该是相同的
-------------本文结束感谢您的阅读-------------