3. 运行U-Boot于QEMU
任务目标
使用QEMU模拟器启动上一案例中编译生成的U-Boot镜像(或本案例提供的预编译镜像),使其运行于ARM虚拟平台(vexpress-a9),进入U-Boot命令行交互界面,并执行help命令验证命令系统可用。
环境依赖
- QEMU(版本 ≥ 5.0,需支持ARM系统模拟)
- U-Boot镜像文件:
u-boot(无扩展名,ELF格式)或u-boot.bin(原始二进制格式),由U-Boot源码编译生成
实现与运行
U-Boot本身是固件程序,无需编写额外代码。本案例核心操作是使用QEMU正确加载并启动U-Boot镜像。以vexpress-a9开发板配置为例(该配置在U-Boot源码中对应vexpress_ca9x4_defconfig),执行以下命令:
# 方式一:使用ELF格式镜像(推荐,包含调试信息)
qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot
# 方式二:使用原始二进制镜像(需指定加载地址)
qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot.bin -device loader,addr=0x60000000,cpu-num=0
参数说明:
-M vexpress-a9:指定模拟ARM Versatile Express A9开发板-m 256M:分配256MB内存(vexpress-a9默认内存映射为512MB,此处分配足够即可)-nographic:将串口输出重定向到当前终端,不弹出图形窗口-kernel u-boot:加载U-Boot ELF镜像,QEMU自动解析入口地址
验证方法
启动后观察串口输出,预期出现以下关键信息(以实际编译版本为准):
U-Boot 2023.04 (Jan 01 2024 - 00:00:00 +0000)
CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c5387d
CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: ARM Versatile Express
Memory: ECC: 256 MiB
DRAM: 256 MiB
...
Hit any key to stop autoboot: 0
=>
当出现=>提示符时,表示已进入U-Boot命令行。此时输入help并回车,预期输出类似:
=> help
? - alias for 'help'
base - print or set address offset
bdinfo - print Board Info structure
boot - boot default, i.e., run 'bootcmd'
...
若能看到命令列表输出,说明U-Boot已在QEMU中成功运行,且命令系统工作正常,案例验证通过。
常见问题
- 启动后无输出:确认使用
-nographic参数,且镜像文件路径正确。若使用u-boot.bin方式启动失败,改用ELF格式的u-boot文件。 - 提示“could not load kernel”:镜像路径错误或格式不匹配。检查文件是否存在,并确认是vexpress-a9对应的U-Boot构建产物。
- 自动启动倒计时后进入未知命令:在倒计时结束前按任意键中断自动启动流程,即可进入命令行。