修补 Honor Note10 内核

CListery ARE YOU OK?

本文将以 Honor Note10 作为测试平台,介绍如何修改内核配置,以及如何在 docker 环境下编译内核,最后启用 SELinux 的 permissive 模式。

环境描述

  • docker-compose version 1.27.4
  • Ubuntu 18.04.6 LTS
  • Honor Note10
    • Model: RVL-AL09
    • Root: Magisk 28.1
    • Core: HiSilicon Kirin970
    • Kernel: 4.9.148
    • Security Patch: 2019-12-1

准备工作

创建环境

  1. 建立工作目录

    1
    2
    mkdir Code_Opensource
    mkdir software
    • 将 Kernel Source Code 解压到 Code_Opensource 目录
    • 将 magiskboot 放到到 software/magisk/ 目录
    • 将 Android NDK 解压到 software/android-ndk-r16-beta1/ 目录
  2. 创建容器

    • 创建 docker-compose.yml

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      version: '3.8'

      services:
      ubuntu:
      image: ubuntu:bionic
      container_name: bionic
      command: tail -f /dev/null
      volumes:
      - ${PWD}/Code_Opensource:/code:rw
      - ${PWD}/software:/software:rw
    • 启动容器

      1
      docker-compose up -d

编译内核

  1. 修改内核配置

    • Code_Opensource/kernel/arch/arm64/configs/merge_kirin970_defconfig

      1
      2
      # CONFIG_SECURITY_SELINUX_DEVELOP is not set
      CONFIG_SECURITY_SELINUX_DEVELOP=y
  2. 编译内核

    • 配置编译环境

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      # 配置镜像源
      sed -i 's/http:\/\/archive.ubuntu.com/http:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list
      # 安装编译依赖
      sudo apt install -y build-essential dc python
      # 配置环境变量
      export PATH=/software/android-ndk-r16-beta1/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin:$PATH
      export CROSS_COMPILE=aarch64-linux-android-
      export ARCH=arm64
      # CC(GNU Compiler Collection)编译器的彩色输出
      export GCC_COLORS=auto
    • 查看原始内核信息

      • 获取内核镜像

        1
        2
        3
        4
        5
        6
        # 查看内核挂载点
        adb shell "su -c 'ls -al /dev/block/platform/ff3c0000.ufs/by-name/kernel'"
        # 备份 kernel 镜像
        adb shell "su -c 'dd if=/dev/block/xxx of=/sdcard/Download/kernel.img'"
        # 拉取 kernel 镜像
        adb pull /sdcard/Download/kernel.img software/magisk/
      • 解包原始内核

        1
        2
        3
        cd software/magisk
        # 解包,同时记录下日志信息
        ./magiskboot unpack -n kernel.img
        • 日志信息

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          Parsing boot image: [kernel.img]
          HEADER_VER [1]
          KERNEL_SZ [15263371]
          RAMDISK_SZ [336956]
          SECOND_SZ [0]
          RECOV_DTBO_SZ [0]
          OS_VERSION [9.0.0]
          OS_PATCH_LEVEL [2019-12]
          PAGESIZE [2048]
          NAME []
          CMDLINE [loglevel=4 initcall_debug=n page_tracker=on unmovable_isolate1=2:192M,3:224M,4:256M printktimer=0xfff0a000,0x534,0x538 androidboot.selinux=enforcing buildvariant=user]
          CHECKSUM [8756a966a7b8957fa7e2742a28355059cd255ab9000000000000000000000000]
          KERNEL_FMT [gzip]
          RAMDISK_FMT [raw]
    • 编译内核

      仔细看注释信息!!!
      仔细看注释信息!!!
      仔细看注释信息!!!

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      mkdir -p /code/out
      cd /code/kernel
      make ARCH=arm64 O=/code/out merge_kirin970_defconfig
      # 如果下面这条命令失败,可以重新执行或修改 -j 参数
      make ARCH=arm64 O=/code/out -j32
      cp -f /code/out/arch/arm64/boot/Image.gz /code/kernel/tools
      cd /code/kernel/tools
      # --cmdline 参数使用解包后的 CMDLINE,同时修改 androidboot.selinux=enforcing 为 androidboot.selinux=permissive
      # --os_patch_level 只能使用 YYYY-MM-DD 格式并且只能等于或大于手机的安全补丁日期
      ./mkbootimg --kernel Image.gz --base 0x0 \
      --cmdline "loglevel=4 initcall_debug=n page_tracker=on unmovable_isolate1=2:192M,3:224M,4:256M printktimer=0xfff0a000,0x534,0x538 androidboot.selinux=permissive buildvariant=user" \
      --tags_offset 0x07A00000 --kernel_offset 0x00080000 --ramdisk_offset 0x07C00000 \
      --header_version 1 --os_version 9 --os_patch_level 2019-12-01 \
      --output kernel-permissive.img

打包内核

1
2
3
4
cd /software/magisk
mv /code/kernel/tools/kernel-permissive.img ./
./magiskboot repack -n kernel-permissive.img
ls new-boot.img -al

刷入内核

1
2
3
adb reboot bootloader
fastboot flash kernel new-boot.img
fastboot reboot

启用 SELinux

1
2
adb shell "su -c 'setenforce 0'"
adb shell "su -c 'getenforce'"
  • 标题: 修补 Honor Note10 内核
  • 作者: CListery
  • 创建于 : 2024-12-31 16:39:24
  • 更新于 : 2025-02-14 09:46:09
  • 链接: http://clistery.github.io/2024/12/31/android/honor-note10-kirin970-fix-kernel/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论