qemu相关脚本

安装和常用命令

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
相关推荐
sxlishaobin2 小时前
Maven Setting详解
java·学习·maven
li星野1 天前
相位补偿学习记录:把被颅骨“打乱“的声波重新对齐
学习
Z21-X1 天前
云原生运维学习笔记:ECShop全链路容器化部署与Docker底层资源隔离深度剖析
运维·笔记·学习·云原生
red_redemption1 天前
自由学习记录(230)
学习
晓梦林1 天前
BUUCTF-菜刀流量-MISC-学习笔记
笔记·学习
Godspeed Zhao2 天前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类
David猪大卫2 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger2 天前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.2 天前
CTF2MISC中等部分
开发语言·前端·学习
YueTann2 天前
mgtv5th-baseline学习
学习