环境搭建
搭建编译所需的环境
系统安装
教程基于ubuntu,你可以选择实机安装或者使用wsl2,如何安装请看使用 WSL 在 Windows 上安装 Linux
注:wsl将系统各盘挂载至
/mnt
目录,通过此挂载点可以实现文件传输
编译环境
使用以下命令安装所需软件包
|
|
注: 若使用其他发行版或有部分软件包找不到,可以暂时忽略,等编译出现如xxx not found
的错误时再安装
系统代理
如果你的设备能够直连Github,并且速度还不错,那你可以忽视这一步
我们使用clash作为代理工具
-
具体配置不再赘述,其他代理客户端也行,具体看代理提供商支持哪些协议
-
使用以下命令设置终端代理
|
|
源码下载
现在开始下载所需的内核源码和工具,我们最好创建一个工作目录
|
|
内核源码
如果你是小米用户,你可以试着下官方的源码,不过官方的源码可能不能成功编译,而且年久失修,大部分新机都没有公布源码,所以还是建议使用类原生的源码
|
|
cannon-r-oss
是作者的手机代号,需将cannon-r-oss
换成自己源码的分支
类原生的话就简单多了,点击仓库右上角的code,把HTTPS的链接复制下来
|
|
添加KernelSU
KernelSU 1.0 及更高版本已经不再支持非 GKI 内核,最后的支持版本为 v0.9.5,请注意使用正确的版本
使用
|
|
将KernelSU-v0.9.5添加到内核源码树
然后需要编辑你的配置文件,通常在arch/arm64/configs/
,较新的机型也可能在arch/arm64/configs/vendor/
进入文件夹,找到类似设备代号_defconfig
的文件,比如我的代号是cannon,配置文件就是cannon_defconfig
使用任意编辑器打开你的配置文件,查找是否开启以下配置 如果没有开启相关的配置,需要手动添加
|
|
工具链下载
作者使用zys-clang12和gcc4.9进行编译 因为zyc-clang需要下载压缩包并解压,所以我们先使用git下载gcc
|
|
选择任意方式下载 zyc-clang
|
|
下载完成后用tar -zxvf Clang-xxxx.tar.gz
解压
如果觉得目录太常不方便的话,可以用mv命令重命名文件夹
|
|
编译脚本
一般我们会用一个编译脚本设置环境变量、配置文件等
我的脚本是抄参考别人教程
|
|
写入以下内容
|
|
需要注意的是,cannon_defconfig
配置文件的路径已经在arch/arm64/configs/
假设你的配置文件是arch/arm64/configs/example_defconfig
那你只需要填写example_defconfig
即可
但如果你的配置文件位于arch/arm64/configs/vendor/example_defconfig
则需要填写vendor/example_defconfig
开始编译
用chmod +x build.sh
添加执行权限,./build.sh
执行编译脚本,产出在out/arch/arm64/boot
目录
打包内核
能来到这一步,你应该能成功编译出内核,恭喜你,接下来我们需要将它打包成boot或内核刷入
AnyKernel3
项目地址:https://github.com/osm0sis/AnyKernel3
用git下载AnyKernel3
|
|
你需要把产出的Image放到AnyKernel3的根目录,然后编辑anykernel.sh
需要改的是以下几点
|
|
配置完后使用zip -r9 UPDATE-AnyKernel3.zip * -x .git README.md *placeholder
即可打包内核
如果使用zsh,可能会报错not matches found
,只需要在.zshrc
中添加
|
|
然后再source ~/.zshrc
即可解决
MagiskBoot
如果你不喜欢用anykernel3,你也可以提取原版的boot.img使用编译出来的image替换原厂kernel
- 首先到Magisk下载magisk.apk,重命名为.zip并解压
- 把解压后的
Magisk-v26.1/lib/arm64-v8a/libmagiskboot.so
文件,用 adb push 到手机
|
|
Magisk-v26.1
需要改成下载的版本号
- 按照上面的方法把提取的boot.img和编译出的Image都push到手机
- 用
adb shell
进入adb,然后进入手机/data/local/tmp
/目录,赋予magiskboot可执行权限chmod +x magiskboot
- 执行
./magiskboot unpack boot.img
解包boot.img得到kernel文件 - 用Image替换kernel
mv -f Image kernel
- 最后执行
./magiskboot repack boot.img
命令重新打包boot.img,得到new-boot.img,备份原厂boot后在fastboot中刷入即
拓展
如果kprobe不正常工作,就会出现无限重启,不开机,替换boot后仍显示不支持等错误,接下来我们将手动修改源码集成ksu
首先让我们验证是否为kprobe的问题,
- 首先用vim打开
KernelSU/kernel/ksu.c
- 找到
ksu_enable_sucompat() 和 ksu_enable_ksud()
这两行,使用//
注释掉
|
|
就像这样
重新编译你的内核,看能否开机,如果能正常开机就是kprobe的问题,如果还是不能开机,检查你的源码是否适用你的系统
修改内核源码
- 使用这条命添加KSU
|
|
- 因为要改的比较多,推荐去看官方文档,写的比较详细
BugReport
如果手动集成还是失败,你可以去Github提供一个BugReport给作者,在管理其设置,发送日志即可发送错误日志
Docker支持
在手机终端中执行check-config.sh脚本,将所有missing
的配置添加到内核配置文件,并重新编译内核
参考|部分引用
Last modified on 2023-08-05