linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接

时间:2024-06-01 10:38:50

**

第一部分支持zImage、dtb、ramdisk独立启动,支持(bootz zImage-dtb地址 ramdisk地址:ramdisk大小 dtb地址)的格式启动

1.1. 选择bootz模式启动zImage内核

**
之前选择bootm模式启动boot.im,boot.img带有its格式的header,需要根据header去header。现在直接启动zImage,需要通过do bootz()函数启动。方式如下:
1.1.1. 在uboot目下执行make menuconfig,选中bootz
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接

1.1.2. 选中Command line interface —> Boot commands —> bootz

linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接

1.1.3. 选中Enable a default value for bootcmd修改bootcmd value为:bootz 0x82100000 0x860f8000:0x01000000
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
1.1.4. 执行make savedefconfig保存.config到defconfig
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
1.1.5. 执行cp defconfig configs/finch_fpga_defconfig保存到本地配置文件
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接

1.2. 支持rootfs.cpio.gz直接启动

在image.c的1069行可以看到要想支持rootfs.cpio.gz启动,必须先定义CONFIG_SUPPORT_RAW_INITRD
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接

UBOOT下定义CONFIG_SUPPORT_RAW_INITRD

linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接

至此设置启动参数bootz zImage地址 ramdisk地址:ramdisk大小 dtb地址即可完成启动
(eg: bootz 0x82100000 0x860f8000:0x01000000 0x833f8000不同芯片不一样)

第二部分支持zImage和dtb拼接成zImage-dtb启动,支持bootz zImage-dtb地址 ramdisk地址:ramdisk大小的格式启动

2.1. 支持dtb给kernel传参

从下面这段代码可以看fdt image无法直接传递地址时,需要使能TAG参数
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
使能TAG参数

linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接

2.2. 内核配置

Kernel目录下,使能CONFIG_ARM_APPENDED_DTB功能,该功能是将DTB文件拼接到Image的后面,步骤如下:

2.2.1. 执行make finch_fpga_defconfig ARCH=arm
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
2.2.2. make menuconfig ARCH=arm
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
2.2.3. 选中Use appended device tree blob to zImage (EXPERIMENTAL)和Supplement the appended DTB with traditional ATAG information
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
2.2.4. make savedefconfig ARCH=arm保存defconfig
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接
2.2.5. cp defconfig arch/arm/configs/finch_fpga_defconfig

2.2.6. git diff查看结果如下:
linux支持 zImage rootfs dtb 直接启动 及 zImage和dtb拼接