你好
使用 8Mplus 评估板,我们需要运行 core-image-tiny-initramfs 或 SD 卡中的 ramfs。我可以版本镜像,但找不到正确的uboot命令来使用它。我在其他文章中看到了 core-image-tiny-initramfs.cpio.gz 的参考,但是这些帖子没有列出 uboot 命令。
我试过这些命令:
setenv loadramdisk " load mmc 2:2 0x80000000 /启动/ramdisk.gz "
setenv ramargs " setenv bootargs ${mmcargs} root=/dev/ram0 rw rootfstype=ext4 ramdisk_size=0x20000000 " setenv ramboot " echo 从 ramdisk 启动...;运行 ramargs;bootz ${loadaddr} 0x80000000 ${fdt_addr_r} " setenv bootcmd " run loadfdt loadramdisk ramboot
"
我总是得到错误信息"zimage:Bad magic!"
我怀疑问题出在地址上。根据 imx8mp-evk.dtb 的来源,内存地址应该是有效的,但没有来自 uboot 的信息。
谢谢,
Scott
嗨,@goodspeed,@ScottSJ,@kimease、
目前正在开发 i.MX8M Plus EVK 板,并想使用 initramfs (ramfs.img / ramfs.cpio.gz) 启动文件系统作为根文件系统,直接从仅具有启动分区的 SD 卡加载 (FAT32)。
SD 卡不包含单独的根文件系统分区。
SD 卡仅包含一个 FAT32 启动分区
FAT32 分区上的文件:
镜像(u-boot+内核)
设备树 Blob (.dtb)
initramfs 映像(cpio.gz)
以下是确切的 U-Boot 命令和行为。
执行 booti 命令后,内核开始启动,但它不会挂载或使用 initramfs (cpio.gz) 作为根文件系统。
我附上了完整的内核启动日志以供参考。
内核不加载 initramfs (cpio.gz)的可能原因是什么?尽管 U-Boot 已将其正确加载到内存中?
是否有任何支持 initramfs 所需的强制内核配置选项需要我验证?
在 i.MX8M Plus 上使用 initramfs 启动时的 bootargs 配置是否正确,还是需要其他参数?
我注意到你说过 " 我确实有在 SD 卡上使用常规 rootfs 启动的步骤,但我们需要两个环境 "。
建议您阅读 SWUpdate OTA i.MX8MM EVK_rev3.pdf 第 35 页。
swUpdate OTA i.mx8mm EVK/i.mx8QXP MEK-恩智浦社区
也许这就是你想要的。
也许这个演示能帮到你。
它只是一个 u-boot booti 命令。您可以根据内核映像格式(Image、zImage 等)将 booti 改为 bootz。
booti${loadaddr} ${initrd_addr} ${fdt_addr}
initrd_addr 是 uramdisk_boot.rootfs.aarch64.img ramdisk 的位置/地址。
在你的情况下,应该是core-image-tiny-initramfs.cpio.gz。
|-- 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch --- 此演示的补丁文件|-- demo_binary| |-- flash.b0.bin --- b0 引导加载程序| |-- flash.bin --- c0 引导加载程序| |-- Image-imx8qxpc0mek.bin --- Linux 内核| |-- imx8qxp-mek.dtb --- 设备树| |-- uramdisk_boot.rootfs.aarch64.img --- RAM 磁盘| |-- uuu.qspi.all.b0.uuu --- b0 的 uuu 脚本| `-- uuu.qspi.all.uuu --- c0 的 uuu 脚本`-- readme.txt --- 此文件
如果您不知道在哪里可以找到文件,也没关系。如果这是"基本知识" ,应该有相关文档,但我在网上搜索了很多次都没有找到。
我很清楚各种 " 启动 " 命令,也曾在其他平台上使用过它们。我已经查看了源代码和其他启动配置。我在查找 nxp 平台所需的具体数值和参数。这应该在 " core-image-tiny-initramfs " 版本中可用,但我找不到使用该图像的步骤。(我确实有在 SD 卡上使用常规 rootfs 启动的步骤,但我们需要这两个环境。)
我已经告诉过你!
而且它来自 u-boot 文档。这是一份文件
如果你查看 u-boot 帮助,你可以很容易地找到如何使用 ramdisk。
u-boot=> 帮助 booti
booti - 从内存中启动 Linux 内核 “镜像” 格式
用法:
booti [addr [initrd [: size]] [fdt]]
-启动 Linux “映像” 存储在 “addr” 处自变量 “initrd”
是可选的,用于指定内存中初始化的地址。
可选的参数 ':size' 允许
指定 RAW 初始化文件的大小。
由于启动 Linux 内核需要平面设备树,因此需要
第三个参数来提供设备树 blob 的地址。
要使用设备树 blob 但
没有 initrd 映像启动内核,请使用 '-' 作为 initrd 参数。
如果你查看二进制版本 tar ball 中的 uuu 脚本 “example_kernel_emmc.uuu”,你就会发现如何使用虚拟磁盘。
FB:ucmd setenv fastboot_buffer ${loadaddr}
FB:下载 -f _Image
FB:ucmd setenv fastboot_buffer ${fdt_addr}
FB:下载 -f _板.dtb
FB: ucmd setenv fastboot_buffer${initrd_addr}
FB: download -f _initramfs.cpio.gz.uboot
#FB: ucmd setenv bootargs console=${console},${baudrate} earlycon=${earlycon},${baudrate}
FB: acmd${kboot} ${loadaddr} ${initrd_addr} ${fdt_addr}
FB:acmd ${kboot} ${loadaddr} ${initrd_addr} ${fdt_addr}
u-boot= > 帮助 booti
booti - 从内存中启动 Linux 内核“镜像”格式
使用方法:
booti [addr [initrd[:size]]] [fdt]].[fdt]]
kboot 这里是 booti
loadaddr 这里是 addr
initrd_addr 这里是 initrd,是 ramdisk,可能是 core-image-tiny-initramfs.cpio.gz
这里的 fdt 是 fdt_addr
还是那句话,我已经把一切都告诉你了!!!.....!
"如果没有 initrd 映像,请在 initrd 参数中使用"-"。"
这就是为什么你经常在带有 linux 内核和设备树 dts 的启动命令行中看到 “-” 的原因。
因为大多数情况下不需要 ramdisk。
这只是 u-boot 的基础知识。非常基本。
你好
是否有任何文档或信息如何使用所提供的 ramfs 配方?
谢谢,
Scott
如果你查看 u-boot 帮助,你可以很容易地找到如何使用 ramdisk。
u-boot=> 帮助 booti
booti - 从内存中启动 Linux 内核 “镜像” 格式
用法:
booti [addr [initrd [: size]] [fdt]]
-启动 Linux “映像” 存储在 “addr” 处自变量 “initrd”
是可选的,用于指定内存中初始化的地址。
可选的参数 ':size' 允许
指定 RAW 初始化文件的大小。
由于启动 Linux 内核需要平面设备树,因此需要
第三个参数来提供设备树 blob 的地址。
要使用设备树 blob 但
没有 initrd 映像启动内核,请使用 '-' 作为 initrd 参数。
你好
谁有答案?是否有使用提供的 core-image-tiny-initramfs 的文档?
谢谢,
Scott
你好
我们需要从单个 uboot 启动多个内核和/或 ramfs。目标可以在 uboot 代码中确定,它可以设置适当的环境变量。我们已经在其他系统上做到了这一点,所以在这里也应该可以做到。
我们已经有了检测和使用不同内核的代码。我们需要采取步骤来启动 ramfs。
谢谢,
Scott
你好
如果你只想版本 uboot,为什么不使用独立的 uboot?有关更多详细信息,请参阅第 3 章 移植 U-启动。
https://www.nxp.com/docs/en/user-guide/IMX_PORTING_GUIDE.pdf
此致