使用u-boot

时间:2017-09-15 12:44:05

标签: linux arm embedded-linux qemu u-boot

我是嵌入式系统的新手,我在qemu上玩ARM。因此,我遇到了使用cpu cortex-a9从多功能表达模拟SD启动Linux内核映像的问题。

我按以下顺序准备了所有内容:首先,我使用适当的ARM工具链使用vexpress_defconfig构建了内核。然后我用vexpress_ca9x4_defconfig构建了u-boot。一切都很顺利。我采用的linux内核源代码是4.13版本(git最新稳定版)。 U-boot版本是2017.09-00100。然后我准备了SD图像:

dd if=/dev/zero of=sd.img bs=4096 count=4096
mkfs.vfat sd.img
mount sd.img /mnt/tmp -o loop,rw
cp kernel/arch/arm/boot/zImage /mnt/tmp
umount /mnt/tmp

接下来我尝试按如下方式运行qemu:

qemu-system-arm -machine vexpress-a9 -cpu cortex-a9 -m 128M -dtb kernel/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel uboot/u-boot -sd sd.img -nographic

U-boot加载成功并给我命令提示符。 SD真的存在并附加:

=> mmcinfo
Device: MMC
Manufacturer ID: aa
OEM: 5859
Name: QEMU! 
Tran Speed: 25000000
Rd Block Len: 512
SD version 1.0
High Capacity: No
Capacity: 16 MiB
Bus Width: 1-bit
Erase Group Size: 512 Bytes

我尝试将SD中的压缩图像加载到内存中并启动它:

fatload mmc 0:0 0x4000000 zImage

一切都很好

=> fatload mmc 0:0 0x4000000 zImage
reading zImage
3378968 bytes read in 1004 ms (3.2 MiB/s)

但后来我想启动内核并收到错误:

=> bootz 0x4000000
Bad Linux ARM zImage magic!

我也试过用u-boot的mkimage制作的U-boot图像,就像这个例子一样:

uboot/tools/mkimage -A arm -C none -O linux -T kernel -d kernel/arch/arm/boot/Image -a 0x00010000 -e 0x00010000 uImage

还会在-C gzip和不同的加载/输入地址上尝试zImage,但无济于事。图像被复制到sd.img。当我fatload图片并使用iminfo检查时,无论我尝试哪种选项,我都会遇到错误:

=> iminfo 0x4000000

## Checking Image at 04000000 ...
Unknown image format!

我完全感到困惑,这个问题让我疯狂,而互联网上关于这个主题的信息相当稀少。请告诉我我做错了什么并重定向到正确的方向。

使用的qemu是QEMU emulator version 2.9.0

0 个答案:

没有答案