https://blog.csdn.net/tq08g2z/article/details/77311842
更新 boot image 中的内核
- 将编译产生的 hi3660-hikey960.dtb (arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb) 复制到 hikey-kernel 目录下,文件名仍然为 hi3660-hikey960.dtb。hikey-kernel 目录在 AOSP 源码库中的具体位置为
device/linaro/hikey-kernel
。 - 将编译生成的 Image 文件 (arch/arm64/boot/Image.gz) 拷贝到 hikey-kernel 目录下,修改文件名为 Image.gz-hikey960。这将覆盖原来存在的同名文件。
编译Linux后生成vmlinux内核映像
aarch64-linux-android-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux Image
调用objcopy生成Image
gzip -9 Image
生成Image.gz
Image.gz和hi3660-hikey960.dtb生成boot.img
1. image的完整构成
一个完整的bootimage是由boot header、kernel、ramdisk、second stage(可选)、X509证书(可选)、签名信息(可选)组成。原始的boot.img只包括boot header、kernel、ramdisk、second stage(可选),且一般而言second staga都是没有的。
2. 原始boot.img格式
包括文件头boot_img_hdr,kernel.gz(Linux内核zImage),以及ramdisk.cpio.gz(根文件系统)
结构如下:
*
** +-----------------+
** | boot header | 1 page
** +-----------------+
** | kernel | n pages
** +-----------------+
** | ramdisk | m pages
** +-----------------+
** | second stage | o pages
** +-----------------+
原始boot.img的每部分都是页对齐的。其中boot header固定占用1个page的大小。kernel、ramdisk、second stage实际的大小会在boot header中标明。