数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 68|回复: 1

[安卓] 搞机三叉戟:Redmi Note 10 5G camellia 型号M2103K19C,非通用内核集成KernelSU Next编译试机成功

[复制链接]
发表于 1 小时前 来自手机浏览器 | 显示全部楼层 |阅读模式
搞机三叉戟,废话记录:Redmi Note 10 5G  camellia 型号M2103K19C,非通用内核集成KernelSU Next编译试机成功
书接上回
一,
搞机一条龙,复盘废话记录:Redmi Note 10 5G  camellia 型号M2103K19C ,解bootloader,Root ,TWRP, 刷LineageOS,刷LSPosed模块,尝试编译内核失败。
二,
搞机二条虫,废话记录:Redmi Note 10 5G  camellia 型号M2103K19C ,第三方recovery触控已修复,吃上杂鱼ReSukiSU。
废话开始,说是万事开头难,一步踏错,步步错,历经种种,终成硕果,总结记录几句,以便学习。

明确本次流程与目标: 内核源码 --> Image.gz -->  AnyKernel3 zip包。
1,monkey mi官方开源源码,缺胳膊少腿,各方说法是说安卓9后不再开源设备树,驱动之类??
2,经上二回书一番下来:(这前两我已试过都ok)

https://github.com/camellia-devs/kernel_xiaomi_mt6833
https://github.com/rwxrx-rx/kernel_xiaomi_mt6833(这哥们仓库里对应有本机相关的设备树,构建action等)
https://github.com/Sangmadun/kernel_xiaomi_mt6833(未试)
3,编译环境,依赖与工具链,从上源码内容相关更新等其他相关信息,确定为clang-22 LLD-22
4,本机内核编译完成后最终产物为 Image.gz。
( mi系一般为Image.gz或Image.gz-dtb,
谷姐系一般为Image.lz4或Image.lz4-dtb,
可从源码上例如build.config.aarch64,其他.mk文件,原机boot.img里等其他途径里获知)
5,内核打包工具,常用几种
(A,abootimg 可以直接安装使用apt install abootimg 。
B,安卓官方mkbootimg,可从安卓源克隆下来,再透过unpack_bootimg.py 与repack_bootimg.py脚本解包打包,不懂什么用的,--here查看下帮助。
C,比较常用的是Angkernel3,打包后可通过twrp刷入,或其他apk软件直接刷入。)


接下来,开始编译操作。
最简单方法是使用GitHub上kernelsu_action工作流这类,配置下环境即可编译,但这多没意思,当初倒也是通过这工作流运行中相关细节中学到很多,例如人家make传递的参数是什么样的,环境变量什么配置的,正所谓新手友好。
但是这把我还是要试试使用手机软件Xed editor里的linux终端来编译,本实都是一样的东西,架构不罢了。
  
1,进软件终端,安装相关工具依赖。(由于搞时是缺咋补咋,这里翻看下/var/log/apt/history.log整合合出来记录一下)

这里先安装几个常用的
  1. apt install git wget curl nano vim unzip zip
复制代码

记得装这两是为了解决git空证书过期之类有关错误
  1. apt install openssl ca-certificates
复制代码

整合记录,安装编译所需
  1. apt install make clang gcc  lld llvm bison flex libssl-dev cpio gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi
复制代码

(这里并没有指定版本号,目前默认安装出来的是clang-18 llvm-18 aarch64-linux-gnu-13当时主要是试试能不能走通,并不考虑那么多,默认只给到20,较新版本可能要换源,简单但賴的换,或者先apt update, apt upgrade下,其实也没必要更,后面事实证明也能编译出来)
(刚开始搞时,一键复制粘贴别人教程里的包,有些包无法找到,去掉后,装完,搞来搞去后面直接把apt工具搞乱了,报dep配置状态错等,以及于后面甚至无法安装上其他包,找找无法找到解决办法,心态蹦了,卸了终端,卸了apk,重头来,改为缺咋补咋,本身终端安装好时就已经默认安装有不少依赖库包了)

2,克隆源码到本地目录
  1. git clone --depth=1 https://github.com/camellia-devs/kernel_xiaomi_mt6833 -b flyme  kernel_xiaomi_mt6833-flyme
复制代码


3,配置cofing
  1. nano /home/kernel_xiaomi_mt6833-flyme/arch/arm64/configs/camellia_defconfig
复制代码

(简单修改一下,开头一行这个CONFIG_LOCALVERSION="-flyme",例如改为CONFIG_LOCALVERSION="-fackmi",取一个你喜欢的名字,这仅仅是加在内核版本后面的一个字符串而已,不改也行,这里主要是为了后面刷入手机后了能有个对比区分,以便知道目前是哪个内核。)
保存退出nano。

来到内核目录下
  1. cd /home/kernel_xiaomi_mt6833-flyme
  2. mkdir out
复制代码

(mkdir out 不创建也行,印象中如果指定O=out时好像会自动创建。强烈建议指定 O=目录,这个参数,以保证源码文件和编译产成的文件隔离。
由于这里是直接使用linux默认本地环境工具,不使用其他工具链,也就无需再去克隆和配置其他工具链bin路径环境,另env命令可查看相关环境信息)
  1. make O=out  ARCH=arm64 SUBARCH=arm64 CC=clang camellia_defconfig
复制代码


4,编译走起
  1. make -j$(nproc) O=out ARCH=arm64 SUBARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=clang  AR=llvm-ar NM=llvm-nm  OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump STRIP=llvm-strip LLVM=1 LLVM_IAS=1  LD=ld.lld 2>&1 | tee build_kernel.log
复制代码

(强烈建议管道流保存下编译过程日志,方便后期查看排错。从滚动显示中可看出从.c文件到.o到build-in再合并整个过程。
warning警告,这两Wunused-variable -Wunused-function不少,只要不是error错误问题应该不大。其他警告也有,有就有了,狗不理就行,管它呢)

5,最终成果,编译耗时约50分钟,建议始终保持亮屏,锁后台,以免被杀,就是等。都到这state2,就差冲刺一射了,什么还报错了,看来你这是要拔套啊,定滴,不用管它,因为本机并不需要Image.gz-dtb,看箭头处已经打包生成我们需要的产物Image.gz了。这就OK了

(又该什么处理这个报错??,还有没有这个必要处理呢??毕竟目前也已经够用了,懂得可以告知一下??)

6,打包AnyKernel3包
先克隆到本地家,并进入它目录下
  1. git clone --depth=1 https://github.com/osm0sis/AnyKernel3.git  /home/AnyKernel3
  2. cd  ~/AnyKernel3
复制代码

复制产物Image.gz到它目录下,并修改anykernel.sh文件相关参数保存。按照README.md文件说明来就可以了。我的如下, 这里赖的一个个去对,直接不检查,留空)
  1. cp ~/kernel_xiaomi_mt6833-flyme/out/arch/arm64/boot/Image.gz  ./
  2. nano anykernel.sh
复制代码


打包,并排除一些不必要文件。
  1. zip -r9 AnyKernel3-Camellia-fackmi.zip *  -x .git* README.md
复制代码

这就是结果。

7,   接下来就复制AnyKernel3-Camellia-fackmi.zip出来传到要刷的手机从twrp刷入,重启,系统,进来了这把成了,简单测试一下WiFi,蓝牙,触控,显示等没咋问题。

可看到内核相关信息,工具链,名称,都对上了。

8,最后一环,就是来集成KernelSU Next。
       4.14的内核,用旧版本legacy,到内核源码目录下,直接一把运行。
  1. cd ~/kernel_xiaomi_mt6833-flyme
  2. curl -LSs "https://raw.githubusercontent.com/KernelSU-Next/KernelSU-Next/next/kernel/setup.sh" | bash -s legacy
复制代码

等走完,它会自动修补相关文件,这时内核目录下会也多一个KernelSU Next目录,

修改配置
  1. nano ./arch/arm64/configs/camellia_defconfig
复制代码

查缺补漏就完了,加上这几个,我的缺三,补上。保存退出。

再次make配置和编译(配置完时可以再次检查out/.config文件里是否已经添加上了这些配置参数,再来编译,基本就是从上面第3,make命令那里再来一次,又是漫长的50多分钟)

刷入手机看看,装好KernelSU Next应用,成了。但是报错:
当前KernelSu版本5过低,KernelSu无法正常工作。请将管理器版本升级至6或以上。

我这都已经是官方GitHub上放出来的最新版本了。乱唑来。好在,这个不难,去下方群,下个较新的版本的KernelSU Next应用,这群是每日自动构建,发布的。装上,重启,ok,完事。
https://t.me/ksunext_ci


试下授权roo正常,模块也正常,一切OK。

(举一反三,什么Resukisu (Bakasu),KernelSU Next,sukisu ultra 之类的都是KernelSu家族分支出来的版本,细节上改动差异,集成流程大差不差,按相关文档来便可,太老版本或者不支持打补丁的方式的似乎是要修改源码,也有相应脚本,可以网上多找找,其他模块susfs这些,应该也类似,就不研究了)

(什么缓存这些编译产生的文件??难道每次修改都要从头走一程每个文件再重新编译??,那么耗时,有什么好方法能加速二次编译??)

9,出错记录。
当初尝试用谷姐家这版本的clang时,编译时报Segmentation fault,走到init.main.o时报错,什么完蛋玩意,又错了。
https://android.googlesource.com/platform/prebuilts/clang/host/linux-arm64/+/refs/heads/mirror-goog-llvm-r596125-release/clang-r584948b/
尝试从GitHub上的LLVM 放出的下载包,竟然解压不出来了,我命令没错呀,这么离谱的嘛?这是什么格式的压缩包?文件已删了,1.7G(有那么大嘛?这也不是源码什么的包呀,搞错了?),就没必要在再重复下载演示了。
我的命令大概tar -Jxvp -f Xxxx.tar.xz -C clang没错吧?

就这样吧,源码找对了,才是一切前提呀,收工,又废一帖,谢谢观看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +6 收起 理由
sunjun1989 + 6 優秀文章

查看全部打赏

发表于 14 分钟前 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-11-14 08:54 , Processed in 0.109200 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表