如何在 qemu 下的 u-boot 中从 fat 分区加载内核(arm versatile pb)

How to load kernel from fat partition in u-boot under qemu ( arm versatile pb )

我已经添加到位于 include/configs/versatile.h 的 u-boot 通用 pb 配置文件中这一行:

#define CONFIG_CMD_FAT
#define CONFIG_DOS_PARTITION           1

将 fatload 命令添加到 u-boot。所以我支持 fatload 命令。 我以这种方式启动 u-boot:

qemu-system-arm -M versatilepb -m 128M -nographic -kernel u-boot

现在的问题是如何传递给包含带内核的胖文件系统的 qemu 文件(我对引导 FreeBSD 内核很感兴趣,但我认为加载 Linux 的示例也可以帮助我)然后加载内核并引导它在 u-boot 下。

所以,这里的问题是 versatilepb 在 U-Boot 中不支持 SD/MMC 卡,所以你真的不能。但是,如果你想在另一个支持 SD/MMC 的设备上执行此操作(比如 vexpress-a9),你可以这样做:

$ dd if=/dev/zero of=sd.bin bs=1k count=$((64  * 1024))
$ fdisk ./sd.bin
... create a partition

然后阅读 loopback mounting individual partitions from within a file that contains a partition table on linux 以了解如何使用 losetup 使该分区可用,格式化它,然后像真正的 SD 卡一样装载和复制数据。那么:

$ qemu-system-arm -M vexpress-a9 -kernel vexpress_ca9x4/u-boot  -nographic -sd sd.bin

现在 'mmc' 命令将与那个 sd.bin 文件一起工作。