内核压缩格式

一般地,在打包内核的时候,需要确定原机boot.img中的kernel压缩格式来打包内核。

常见的内核格式为Image,Image.gz,Image.gz-dtb等。

dtb是device tree binary的简称。

binary,顾名思义,就是可以被bootloader直接读取执行的内容。它们在开机启动在早期阶段由bootloader解码,传递给内核,从而帮助内核完成启动过程。

dt是kernel device tree的简称。

dt就是一堆设备特有的配置文件,它们的出现是为了使内核代码树变得干净一些。

编译后的dtb文件将会被与内核的编译产物Image.xx连接,最终生成Image.xx-dtb,常见的有Image-dtb Image.gz-dtb Image.lz4-dtb等。

一般情况下,可以通过以下两种方法确定内核的压缩格式。

查看本机配置确定

注:此方法需要root权限。

  • 1.使用root权限复制/proc/config.gz到本机目录

  • 2.解压config.gz

  • 3.使用文本管理器打开config文件

  • 4.查找以下字段。

例如以下选项会链接dtb到image:

CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE=y

在这个选项被关闭后,编译也会生成dtb文件,但不会主动连接至内核镜像。

以下选项会确定压缩格式为.gz-dtb:

CONFIG_IMG_GZ_DTB=y #需要配合上述选项使用。

其他压缩格式,如lz4等,以此类推。

使用magiskboot

  • 1.提取本机boot.img或提取本机完整升级包中的boot.img

  • 2.使用mgaiskboot unpack指令 会得到类似以下的信息:

~/root $ magiskboot unpack boot.img
Parsing boot image: [boot.img]
HEADER_VER      [2]
KERNEL_SZ       [18077279]
RAMDISK_SZ      [2360622]
SECOND_SZ       [0]
RECOV_DTBO_SZ   [0]
DTB_SZ          [174303]
OS_VERSION      [12.0.0]
OS_PATCH_LEVEL  [2023-06]
PAGESIZE        [2048]
NAME            []
CMDLINE         [bootopt=64S3,32N2,64N2 buildvariant=user]
CHECKSUM        [94b890e37c126c1641b7baf359f15a8ec62f0882000000000000000000000000]
KERNEL_FMT      [gzip]
RAMDISK_FMT     [gzip]
VBMETA

找到KERNEL_FMT字段。这里显示的是gzip。则说明内核的压缩格式为.gz或.gz-dtb.