Skip to content

12.适配部分4.14内核简要提示

Coconut edited this page Jul 13, 2024 · 8 revisions

简易说明

理论上,这个教程适合EMUI 10的4.14内核设备。
前清提要:适配4.9内核


配置要求

由于EMUI10内核对编译设备提高了要求,所以我建议高配电脑用户尝试。
配置需求:
Linux发行版:Ubuntu 22.04
CPU:建议4核心
RAM:视情况而定,建议16GB起步。推荐32GB。(如果是虚拟机,那肯定就直接内存翻倍然后再分配对应的内存大小。)
SSD:512GB足够。
显卡:核显,亮机卡或者更高。

为什么会要求如此高的内存?因为华为开启了CONFIG_LTOCONFIG_LTO_CLANG
你可以关闭这两个编译标记,但是理所当然内核优化会变差。好处是编译内存要求变低,8GB内存都够。
开启了编译会很慢,然后内存占用会慢慢膨胀到最高29GB左右。直到编译完成。


这里单刀直入:
defconfig修改和4.9的区别不大。
参考:defconfig:disable some useless features
手动集成KSU:KernelSU:integrate KernelSU for non GKI

由于KernelSU不再官方支持non-GKI内核,所以你只能使用最后支持non-GKI内核的v0.9.5代码:

2024.07更新:

警告:由于KernelSU不再维护non-GKI内核,最后支持non-GKI内核的KernelSU代码版本为v0.9.5!!!
但是因为兼容性问题,只能使用v0.9.2的源代码和管理器。都不要升级,升级了就不兼容大多数模块。

由于KernelSU修改了运行机制,华为EMUI 10设备无法使用高于此commit后的所有代码。
这意味着你只能降级KernelSU代码到v0.9.2(11682)。你不能使用4.9内核的同步KernelSU的命令直接同步。
你需要换用此命令:

curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.9.2

然后修改KernelSU代码兼容EMUI10
参考: 修复华为海思SoC设备部分兼容性补丁:kernel:Add Huawei hisi check
修改KSU代码修复内核重启后导致root授权失效:kernel: fix filp_open on older kernel's kworker #205


编译部分:

需求:

  • 谷歌的GCC,Clang交叉编译器
    + [AArch64交叉编译器_安卓10版本](https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/84fb09fafc92a3d9b4d160f049d46c3c784cc941.tar.gz)  
    + [ARM交叉编译器_安卓10版本](https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/5a8beef7b1aa2c8ca0dfe4a00358559d12dfa3b6.tar.gz)  
    + [Google Clang 安卓10版本](https://android.googlesource.com/platform//prebuilts/clang/host/linux-x86/+archive/3f889f9c9d42bae85728fa89ba5f92a01704fd83.tar.gz)  
    
  • 依赖库:
    基本和4.9区别不大。
    可以安装ccache增加编译效率。
    sudo apt install ccache -y
  • 编译命令:
      // 交叉编译器路径,根据自己实际路径填写
      export PATH=$PATH:$(pwd)/../Compiler/Google/GCC64/bin:$(pwd)/../Compiler/Google/Clang/clang-r346389c/bin
    
    
      // Find those flag in Makefile!!!
      // 这两个标记请在Makefile内寻找!!!AOSP编译标记,也是交叉编译器路径,根据自己实际路径填写
      export CLANG_PREBUILTS_PATH=$(pwd)/../Compiler/Google/Clang/clang-r346389c/
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/../Compiler/Google/Clang/clang-r346389c/lib64/
    
      export CROSS_COMPILE=aarch64-linux-android-
      export ARCH=arm64
    
      make ARCH=arm64 O=out CC="ccache clang" merge_kirin970_ksu_defconfig
      // 定义编译线程数
      make ARCH=arm64 O=out CC="ccache clang" -j$(nproc --all)
    
  • 打包命令:
    基本和4.9区别不大。

安装内核教程

逆天华为增加了镜像校验,无法关闭。
只能通过安装先Magisk然后dd if= of=的形式安装。最后卸载Magisk。
甚至不如直接用Magisk.
具体操作:

adb push kernel.img /sdcard/Download/   // 假设你编译好的KSU内核就叫kernel.img
adb shell
su  // 在Magisk内允许shell的su权限
cd /sdcard/Download/
dd if=kernel.img of=/dev/block/by-name/kernel // 替换默认内核

如何替换回默认内核?Fastboot里面直接刷。但是自己编译的就要这么搞。


兼容性警告!!

由于华为修改了Linux内核调度器,新版KernelSU(高于v0.9.2主代码以后的代码)代码将无法正常工作,会出现找不到KSU管理器的bug。
由于华为魔改安卓系统,所以大量依赖Zygisk或者其他特性的模块无法正常工作。

已知兼容

  1. ZygiskNext
  2. LSPosed
  3. PlayIntegrityFix

已知不兼容

  1. 幸运破解器的Xposed工作模式
  2. Magic_OverlayFS
  3. 几乎所有的调度模块
  4. 几乎所有的音效模块

这么麻烦值得么

综合上述,几乎不值得。
KernelSU在EMUI 10的唯一优势只有隐藏root。没了。
Bug多,兼容性差,安装麻烦。可以说是完全不推荐。
如果想规避华为恶心的ROOT检查之类,完全可以编译去除华为ROOT检查的内核,忽略KSU。
然后安装Magisk。
最后,其实KernelSU在EMUI 10的唯一优势马上也没了。360加固企业版可以完美检测KSU,然后KSU 1.0.0正式版马上就要推出,
KernelSU官方决定去除所有的non-GKI支持(也就是说低于5.10以下的内核被统统放弃了。)。
所以不如直接自定义内核+Magisk或者Magisk就行了。