Openharmony的boot_linux.img 是标准的ext2格式,他需要通过syslinux来标准启动,但是鉴于有些uboot并没有默认打开syslinux,而使用默认的fit格式启动,所以本文介绍将原来的ext2的boot.img转换成fit格式的boot,从而使得系统加载更兼容
关于fit镜像的说明,可以参考如下文档FIT镜像说明
为了打包fit格式的boot镜像,我们需要编写its文件,本文给一个示例文件如下:
/dts-v1/; / { description = "U-Boot FIT source file for arm"; images { fdt { data = /incbin/("rk3568-evb1-ddr4-v10-linux.dtb"); type = "flat_dt"; arch = "arm64"; compression = "none"; load = <0xffffff00>; hash { algo = "sha256"; }; }; kernel { data = /incbin/("Image"); type = "kernel"; arch = "arm64"; os = "linux"; compression = "none"; entry = <0xffffff01>; load = <0xffffff01>; hash { algo = "sha256"; }; }; ramdisk { data = /incbin/("ramdisk.img"); type = "ramdisk"; arch = "arm64"; os = "linux"; compression = "none"; entry = <0x00000000>; load = <0x00000000>; hash { algo = "sha256"; }; }; resource { data = /incbin/("resource.img"); type = "multi"; arch = "arm64"; compression = "none"; hash { algo = "sha256"; }; }; }; configurations { default = "conf"; conf { rollback-index = <0x00>; fdt = "fdt"; kernel = "kernel"; multi = "resource"; ramdisk = "ramdisk"; signature { algo = "sha256,rsa2048"; padding = "pss"; key-name-hint = "dev"; sign-images = "fdt", "kernel", "multi", "ramdisk"; }; }; }; };
根据上述的its的描述,我们需要如下文件
# "rk3568-evb1-ddr4-v10-linux.dtb" # "Image" # "ramdisk.img" # "resource.img"
对于openharmony,我们需要找到的dtb的位置在如下
out/kernel/OBJ/linux-5.10/arch/arm64/boot/dts/rockchip/xxxx.dtb
此时我们复制文件即可
cp out/kernel/OBJ/linux-5.10/arch/arm64/boot/dts/rockchip/xxxx.dtb fit/
对于openharmony,我们需要找到的image的位置如下
out/kernel/OBJ/linux-5.10/arch/arm64/boot/Image
此时我们复制文件即可
cp out/kernel/OBJ/linux-5.10/arch/arm64/boot/Image fit/
对于openharmony,我们需要找到ramdisk的位置如下
out/rk3568/packages/phone/images/ramdisk.img
此时我们复制文件即可
cp out/rk3568/packages/phone/images/ramdisk.img fit/
对于openharmony,我们需要找到resource的位置如下
out/kernel/OBJ/linux-5.10/resource.img
此时我们复制文件即可
cp out/kernel/OBJ/linux-5.10/resource.img fit/
根据上述操作,我们可以开始通过mkimage制作镜像,先安装mkimage命令
apt install u-boot-tools
此时系统具备mkimage二进制,开始制作命令如下
mkimage -f boot.its -E -p 0x800 boot.img
制作时的日志信息如下:
FIT description: U-Boot FIT source file for arm Created: Fri May 24 03:34:16 2024 Image 0 (fdt) Description: unavailable Created: Fri May 24 03:34:16 2024 Type: Flat Device Tree Compression: uncompressed Data Size: 143744 Bytes = 140.38 KiB = 0.14 MiB Architecture: AArch64 Load Address: 0xffffff00 Hash algo: sha256 Hash value: 9df414ede45c3a2417bbcc4b8de9510aba9e2600f5a160a6a3b721c761400e31 Image 1 (kernel) Description: unavailable Created: Fri May 24 03:34:16 2024 Type: Kernel Image Compression: uncompressed Data Size: 24385552 Bytes = 23814.02 KiB = 23.26 MiB Architecture: AArch64 OS: Linux Load Address: 0xffffff01 Entry Point: 0xffffff01 Hash algo: sha256 Hash value: 4f3ad02eb1c101976b8b3dea5bce379efb0fd00a61a646b336c725d388dd4bea Image 2 (ramdisk) Description: unavailable Created: Fri May 24 03:34:16 2024 Type: RAMDisk Image Compression: uncompressed Data Size: 2509910 Bytes = 2451.08 KiB = 2.39 MiB Architecture: AArch64 OS: Linux Load Address: 0x00000000 Entry Point: 0x00000000 Hash algo: sha256 Hash value: 027f5c7aa5ca3a2dde9d0bb744d3a508321308c1f47cb34b4053317e39fe6ecc Image 3 (resource) Description: unavailable Created: Fri May 24 03:34:16 2024 Type: Multi-File Image Compression: uncompressed Data Size: 12588544 Bytes = 12293.50 KiB = 12.01 MiB Hash algo: sha256 Hash value: bcd3ccc6ac2747de83f27d320bd3c3aed18762bb5f3045fa84ff926345e2a125 Default Configuration: 'conf' Configuration 0 (conf) Description: unavailable Kernel: kernel Init Ramdisk: ramdisk FDT: fdt
至此,我们可以获得boot.img用于fit启动