rk3568的oh版本烧录镜像有多个image,本文解释这些img的作用
包含镜像如下
MiniLoaderAll.bin 瑞芯微平台的芯片级的romcode parameter.txt 瑞芯微平台分区表 resource.img 瑞芯微平台的资源文件,内部存放logo.bmp logo_kernel.bmp rk-kernel.dtb boot_linux.img ext2的boot分区,里面存放extlinux的image和dtb以及extlinux.conf,同时存放开机logo的bmp(logo.bmp logo_kernel.bmp) ramdisk.img oh系统的ramdisk文件,做二级启动 system.img oh系统的系统文件 vendor.img oh系统芯片相关厂商目录,vendor/{产品解决方案厂商}/{产品名称}定义的文件按照规则放入vendor分区 sys_prod.img oh系统定义的产品通用配置,对系统组件的能力扩展以及能力定制,承载产品级差异能力,存放产品相关的配置文件 chip_prod.img oh系统产品硬件配置组件,单板外设特有硬件能力以及产品级硬件差异配置, 存放芯片相关的配置文件 updater.img oh系统升级镜像,用于完成升级;正常启动时不加载次镜像,和ramdisk格式一致 eng_system.img oh系统的eng模式,利用mount --bind属性overlay文件 chip_ckm.img oh系统单独分区,用来支持内核树外独立构建ko模块能力 userdata.img oh系统可写的用户数据镜像
在/device/board/hihope/rk3568/loader
目录中,通过/device/board/hihope/rk3568/kernel/build_kernel.sh
拷贝到out/rk3568/packages/phone/images/
同上也在/device/board/hihope/rk3568/loader
中,通过/device/board/hihope/rk3568/kernel/build_kernel.sh
拷贝到out/rk3568/packages/phone/images/
对于loader目录的文件,是通过/device/board/hihope/rk3568/BUILD.gn
包含/device/board/hihope/rk3568/kernel/BUILD.gn
中定义script = "build_kernel.sh"来运行build_kernel.sh的
对于parameter.txt内容,这里不详细解析,可以查看之前文章
这个镜像内部包含文件logo.bmp logo_kernel.bmp rk-kernel.dtb
其中logo.bmp logo_kernel.bmp是开机uboot加载图片和内核加载图片,而rk-kernel.dtb是uboot阶段加载的默认dtb文件。瑞芯微平台可以将uboot加载的dtb和kernel加载的dtb放在同一个位置,但是oh下的rk3568没有这样做。所以需要resource.img放uboot加载的dtb,而boot_linux.img放内核通过extlinux加载的dtb
uboot加载dtb日志如下
dwmmc@fe2b0000: 1, dwmmc@fe2c0000: 2, sdhci@fe310000: 0 Bootdev(atags): mmc 0 MMC0: HS200, 200Mhz PartType: EFI DM: v1 boot mode: normal FIT: No boot partition A/B read part name is bootctrl current_slot_addr value is 0x52544e45 current slot is 1381256773 Found DTB in resource part DTB: rk-kernel.dtb
这里如果想解压resource.img,如下命令
../../OBJ/linux-5.10/scripts/resource_tool --verbose --unpack --image=../../OBJ/linux-5.10/resource.img
此时在当前目录的out下存在如下文件
logo.bmp logo_kernel.bmp rk-kernel.dtb
如果想自行打包resource.img,如下
../../OBJ/linux-5.10/scripts/resource_tool ../../OBJ/linux-5.10/arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0-linux.dtb logo.bmp logo_kernel.bmp
此时当前目录下存在resource.img,直接烧录即可
注意:值得留意的是,resource_tool 打包时logo.bmp和logo_kernel.bmp不要带路径,否则启动时找不到
boot_linux.img是内核的镜像文件,这里是通过ext2打包,通过extlinux加载,uboot默认使能extlinux即可正常加载
boot_linux.img内文件如下
. ├── extlinux │ ├── extlinux.conf │ ├── Image │ └── toybrick.dtb ├── logo.bmp ├── logo_kernel.bmp
这里注意的是,logo.bmp和logo_kernel.bmp目前uboot并没有使用,所以此文件可以删掉,后续如果动态开机日志修改时,需要修改uboot,读取此分区的bmp文件才行。
而toybrick.dtb
是内核加载的设备树,Image是内核加载的二进制,uboot加载信息如下
Found /extlinux/extlinux.conf Retrieving file: /extlinux/extlinux.conf 203 bytes read in 4 ms (48.8 KiB/s) 1: rockchip-kernel-5.10 A/B read part name is bootctrl current_slot_addr value is 0x52544e45 current slot is 1381256773 Get a/b slot failed. assume device do not support A/B partition find partition ' ramdisk ' Load from partition ' ramdisk ' to address 0xa200000, count: 8192 block(s) Read from partition ' ramdisk ' done, total block(s) 8192 Openharmony ramdisk_addr_r = 0x0a200000:0x400000 find partition ' boot_linux ' Load from partition ' boot_linux ' to address 0x280000, count: 196608 block(s) Read from partition ' boot_linux ' done, total block(s) 196608 Retrieving file: /extlinux/Image 47439880 bytes read in 266 ms (170.1 MiB/s) append: earlycon=uart8250,mmio32,0xfe660000 root=PARTUUID=614e0000-0000-4b53-8000-1d28000054a9 rw rootwait rootfstype=ext4 Retrieving file: /extlinux/toybrick.dtb