1745427_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1745427_zh-CN

1745427_zh-CN

如何运行 core-image-tiny-initramfs.cpio.gz(或 ramfs / ramdisk.gz)?从 SD 卡

你好

使用 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

i.MX 8M | i.MX 8M Mini | i.MX 8M NanoRe: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

嗨,@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 命令和行为。

使用的 U-Boot 命令

u-boot= > setenv bootargs console=ttymxc1,115200 root=/dev/ram rw
u-boot= > fatload mmc 1:1 Image_copy.gz 在${loadaddr} 282 毫秒内读取 13450466 字节 (45.5 MiB/s)
u-boot= > fatload mmc 1:1 imx8mp-evk.dtb 在${fdt_addr} 4 毫秒内读取 82784 字节 (19.7 MiB/s)
u-boot= > fatload mmc 1:1 core-image-minimal-initramfs-imx8mp-ddr4-evk.cpio.gz 在${ramdisk_addr_r} 264 毫秒内读取 12602736 字节 (45.5 MiB/s)
u-boot= >${loadaddr}${ramdisk_addr_r} 启动:${filesize}${fdt_addr}
 

执行 booti 命令后,内核开始启动,但它不会挂载或使用 initramfs (cpio.gz) 作为根文件系统。

我附上了完整的内核启动日志以供参考。

问题

  1. 内核不加载 initramfs (cpio.gz)的可能原因是什么?尽管 U-Boot 已将其正确加载到内存中?

  2. 是否有任何支持 initramfs 所需的强制内核配置选项需要我验证?

  3. 在 i.MX8M Plus 上使用 initramfs 启动时的 bootargs 配置是否正确,还是需要其他参数?


Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

我注意到你说过 " 我确实有在 SD 卡上使用常规 rootfs 启动的步骤,但我们需要两个环境 "。

建议您阅读 SWUpdate OTA i.MX8MM EVK_rev3.pdf 第 35 页。

swUpdate OTA i.mx8mm EVK/i.mx8QXP MEK-恩智浦社区


也许这就是你想要的。

1.png

Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

也许这个演示能帮到你。

它只是一个 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 --- 此文件

https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/all-bootloader-device-tree-Linux-kernel-...


Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

如果您不知道在哪里可以找到文件,也没关系。如果这是"基本知识" ,应该有相关文档,但我在网上搜索了很多次都没有找到。

我很清楚各种 " 启动 " 命令,也曾在其他平台上使用过它们。我已经查看了源代码和其他启动配置。我在查找 nxp 平台所需的具体数值和参数。这应该在 " core-image-tiny-initramfs " 版本中可用,但我找不到使用该图像的步骤。(我确实有在 SD 卡上使用常规 rootfs 启动的步骤,但我们需要这两个环境。)

Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

我已经告诉过你!
而且它来自 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 的基础知识。非常基本。







Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

你好

是否有任何文档或信息如何使用所提供的 ramfs 配方?


谢谢,
Scott

Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

如果你查看 u-boot 帮助,你可以很容易地找到如何使用 ramdisk。


u-boot=> 帮助 booti
booti - 从内存中启动 Linux 内核 “镜像” 格式

用法:
booti [addr [initrd [: size]] [fdt]]
-启动 Linux “映像” 存储在 “addr” 处自变量 “initrd”
是可选的,用于指定内存中初始化的地址。
可选的参数 ':size' 允许
指定 RAW 初始化文件的大小。
由于启动 Linux 内核需要平面设备树,因此需要
第三个参数来提供设备树 blob 的地址。
要使用设备树 blob 但
没有 initrd 映像启动内核,请使用 '-' 作为 initrd 参数。

Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

你好

谁有答案?是否有使用提供的 core-image-tiny-initramfs 的文档?

谢谢,
Scott

Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

你好

我们需要从单个 uboot 启动多个内核和/或 ramfs。目标可以在 uboot 代码中确定,它可以设置适当的环境变量。我们已经在其他系统上做到了这一点,所以在这里也应该可以做到。

我们已经有了检测和使用不同内核的代码。我们需要采取步骤来启动 ramfs。


谢谢,
Scott

Re: How to run core-image-tiny-initramfs.cpio.gz (or ramfs / ramdisk.gz) from an SD card

你好

如果你只想版本 uboot,为什么不使用独立的 uboot?有关更多详细信息,请参阅第 3 章 移植 U-启动。

https://www.nxp.com/docs/en/user-guide/IMX_PORTING_GUIDE.pdf


此致


Tags (1)
No ratings
Version history
Last update:
‎12-16-2025 02:25 AM
Updated by: