安装和常用命令
bash
# 安装
sudo apt install qemu-system-arm qemu-utils
# 帮助信息
qemu-system-arm --help
# 支持的机器
qemu-system-arm -machine help
# 支持的cpu
qemu-system-arm -cpu help
# 指定内存启动
qemu-system-arm -M virt -m 512M -kernel nuttx -nographic
# 开启gdb调试
# -s = 监听 1234 端口
# -S = 启动时暂停,等 GDB 连接
qemu-system-arm -M virt -kernel nuttx -nographic -s -S
退出
bash
Ctrl+A X
quit
# 强制杀死所有 QEMU 进程(卡死时用)
pkill qemu-system-arm
三个常用机器
bash
# 通用虚拟 ARM 板,跑 NuttX / Linux / RTOS 最快最方便
-M virt
# 跑 STM32 裸机 / 单片机程序
-M stm32vldiscovery
# 跑 Zynq Cortex-A9 Linux / 裸机 / FreeRTOS
-M xilinx-zynq-a9
qemu-utils工具(非必须)
| 工具 | 作用 |
|---|---|
qemu-img |
最核心:磁盘镜像创建/转换/压缩 |
qemu-nbd |
把镜像挂载成块设备 |
qemu-io |
直接对镜像做 IO 测试 |
qemu-storage-daemon |
存储后端服务(高级) |
gdb 调试
安装
bash
sudo apt update
sudo apt install gdb-multiarch
启动板子
bash
qemu-system-arm \
-M virt \
-m 512M \
-nographic \
-kernel nuttx \
-s -S
新建窗口启动gdb
bash
gdb-multiarch nuttx
# 输入
set architecture arm
target remote localhost:1234
continue
# 打断点
b hello_main.c:12
# 断点信息
info break
#清楚断点
clear hello_main.c:12
# 局部变量列表
info locals
# 全局变量列表
info variables
## 变量过滤
info variables run
# 看变量
p run
# 看线程
info threads
例子
运行 nuttx
是 ARMv7/ARMv8 通用虚拟平台
bash
# 启动
qemu-system-arm \
-M virt \
-m 512M \
-nographic \
-kernel nuttx
# 调试
qemu-system-arm \
-M virt \
-m 512M \
-nographic \
-kernel nuttx \
-s -S
运行zynq linux
bash
qemu-system-arm -M xilinx-zynq-a9 -m 1024M -kernel zImage -dtb system.dtb -initrd rootfs.cpio.gz -serial mon:stdio -display none
运行zynq 裸机
bash
# 运行
qemu-system-arm \
-M xilinx-zynq-a9 \
-m 512M \
-kernel zynq_helloworld.elf \
-nographic \
-serial mon:stdio
# 调试
qemu-system-arm \
-M xilinx-zynq-a9 \
-m 512M \
-kernel zynq_helloworld.elf \
-nographic \
-serial mon:stdio \
-s -S
petalinux-boot --qemu
等效于下面命令,无法跑裸机
bash
qemu-system-arm -M xilinx-zynq-a9 \
-kernel images/linux/zImage \
-dtb images/linux/system.dtb \
-initrd images/linux/rootfs.cpio.gz \
-serial mon:stdio -display none