修补 Honor Note10 内核

本文将以 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
准备工作
- Kernel Source Code
- Magisk Tools
- Android NDK
创建环境
建立工作目录
1
2mkdir Code_Opensource
mkdir software- 将 Kernel Source Code 解压到
Code_Opensource
目录 - 将 magiskboot 放到到
software/magisk/
目录 - 将 Android NDK 解压到
software/android-ndk-r16-beta1/
目录
- 将 Kernel Source Code 解压到
创建容器
创建 docker-compose.yml
1
2
3
4
5
6
7
8
9
10version: '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
编译内核
修改内核配置
Code_Opensource/kernel/arch/arm64/configs/merge_kirin970_defconfig
1
2# CONFIG_SECURITY_SELINUX_DEVELOP is not set
CONFIG_SECURITY_SELINUX_DEVELOP=y
编译内核
配置编译环境
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
3cd software/magisk
解包,同时记录下日志信息
./magiskboot unpack -n kernel.img日志信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14Parsing 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
14mkdir -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 | cd /software/magisk |
刷入内核
1 | adb reboot bootloader |
启用 SELinux
1 | adb shell "su -c 'setenforce 0'" |
- 标题: 修补 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 进行许可。
评论