当前位置: 首页 > news >正文

QEMU使用方法

一、下载qemu

qemu是一个模拟器,可以模拟运行x86、arm、ppc、mips、riscv等CPU,可以添加自定义开发板和硬件设备(如pcie设备),与vmware不同的是vmware是一个虚拟运行环境,一个是模拟器,一个是虚拟运行环境。

下载qemu使用如下命令:
git clone https://gitlab.com/qemu-project/qemu.git

二、编译qemu:

# cd qemu
# ./configure --target-list=x86_64-softmmu # 配置,只编译x86系统模拟
# make -j$(nproc) # 开始编译,-j参数加快速度

三、添加开发板

如下是在qemu种添加一个AST2600(ARM Cortex-A7核)芯片的pf12开发板示例:

1、在hw/arm/aspeed.c下添加开发版描述:

// 在 hw/arm/aspeed.c 文件中 static const TypeInfo aspeed_machine_types[] = { // ... 已有的 Machine 定义,如 "ast2600-evb" { .name = MACHINE_TYPE_NAME("pf12"), // 命令行中使用的机器名 .parent = TYPE_ASPEED_MACHINE, // 继承自 AST SoC 的 Machine 父类 .class_init = aspeed_machine_pf12_class_init, // 初始化函数 }, // ... };

2、实现class_init函数,该函数需实现如下内容:

  • 指定 CPU 型号:设置开发板使用的 CPU 核心类型;
  • 定义内存布局:配置 RAM 的起始地址和大小;
  • 添加外设:通过函数调用将 UART、I2C、GPIO、MMC、网卡等外设挂载到总线上,并分配它们的内存地址和中断号;
  • 配置启动流程:指定固件(如 U-Boot)的加载地址和启动方式。

四、添加硬件

1、在hw/misc/或hw/char/创建test-device.c文件:

1、定义设备状态结构体 // 假设我们的设备叫 "amd.xor-test" typedef struct XorTestState { SysBusDevice parent_obj; // 父对象,必须放在第一位 MemoryRegion iomem; // 设备的MMIO内存区域 qemu_irq irq; // 中断引脚 uint32_t regs[2]; // 两个32位寄存器 } XorTestState; 2、实现寄存器的读写逻辑 static const MemoryRegionOps xor_test_ops = { .read = xor_test_read, // 读操作函数 .write = xor_test_write, // 写操作函数 .endianness = DEVICE_LITTLE_ENDIAN, // ... }; 3、实现设备初始化和复位函数 static const TypeInfo xor_test_info = { .name = TYPE_XOR_TEST, // 设备类型名称,如 "amd.xor-test" .parent = TYPE_SYS_BUS_DEVICE, // 父类,通常为系统总线设备 .instance_size = sizeof(XorTestState), .class_init = xor_test_class_init, .instance_init = xor_test_init, }; 4、注册设备类型 static void xor_test_register_types(void) { type_register_static(&xor_test_info); } type_init(xor_test_register_types) // 注册宏

2、在hw/misc/Makefile.objs或hw/char/Makefile.objs添加如下:

obj-$(CONFIG_MY_DEVICE) += test-device.o

3、启动 QEMU 时:
-device <设备名> # 添加设别
-device <设备名>,help # 查看设备支持的属性
-device <设备名>,<参数1=val1>,<参数2=val2>,<参数3=val3> # 向设备传参

五、启动qemu

gdb --args \ # 在 GDB 中启动 QEMU,用于调试 QEMU 进程本身 qemu-system-x86_64 \ # 启动 x86_64 架构的系统模拟器 --enable-kvm \ # 启用 Linux 内核 KVM 加速,利用宿主 CPU 硬件虚拟化提升性能 -boot c \ # 从硬盘(disk C)引导系统,对应 -drive 中的第一个磁盘 -drive format=qcow2,file=$UBUNTU/ubuntu-22.04-amd64.img \ # 定义系统盘,格式为 qcow2(支持快照、压缩) -drive format=raw,file=$UBUNTU/disk_shared.ext4 \ # 定义第二块硬盘,格式为裸设备 raw,通常用作数据盘 -m 8G \ # 分配 8GB 客户机内存 -smp 4 \ # 为客户机配置 4 个 CPU 核心 -nic user,hostfwd=tcp::$12345-:22 \ # 用户态网络堆栈,将宿主机 12345 端口转发到虚拟机 22 端口(SSH) -nographic \ # 不使用图形界面,将串口/控制台重定向到当前终端 -device edu,edu_id=0,bar_size=1G,offset=0x10000/0x20000 # 启动edu模块,这是一个教学用的开源pcie模块,edu_id/bar_size/offset为传入模块的参数 -device test_device,device_id=0,bar_size=1G,offset=0x10000/0x20000 # 启动test_device模块,这是个自定义模块,device_id/bar_size/offset为传入模块的参数

六、常用命令

  • 查看支持的cpu型号:

qemu-system-x86_64 -cpu help
qemu-system-arm -cpu help
qemu-system-aarch64 -cpu help
qemu-system-ppc -cpu help
qemu-system-ppc64 -cpu help
qemu-system-mips -cpu help
qemu-system-riscv32 -cpu help
qemu-system-riscv64 -cpu help

  • 查看支持的开发板:

qemu-system-x86_64 -M help
qemu-system-arm -M help
qemu-system-aarch64 -M help
qemu-system-ppc -M help
qemu-system-ppc64 -M help
qemu-system-mips -M help
qemu-system-riscv32 -M help
qemu-system-riscv64 -M help

http://www.jsqmd.com/news/1113786/

相关文章:

  • UE5 Verse 编程语言完整体系指南
  • ASC0101S自动方向感应架构深度解析:传输门、单稳态加速器与无方向控制的双向电平转换
  • 企业级开源CMDB系统架构解析:构建智能IT资产管理的5大核心设计原则
  • codex对接1688运费,图搜实现选品
  • 从传统零食到健康赛道:马大姐「多谷时代」的技术破局路径分析
  • python、JavaScript 、JAVA等实例代码演示教你如何获取股票数据(实时数据、历史数据、CDMA、KDJ等指标数据)
  • 科研制图告别复杂软件!okbiye AI 绘图分档功能一站式解决全学科出图难题
  • 3步搭建个人音乐API服务:网易云音乐接口的终极解决方案
  • 我用 Codex 重写了同事维护三年的代码,他没说谢谢——而是找了领导
  • 装备制造行业PLM软件系统最新厂商盘点,助力行业数字化转型
  • 多维聚合数据操作:切片、钻取与立方体构建实战
  • 熊猫出海GEO发布《2026最新DeepSeek算法收录规则拆解》报告
  • 通达信缠论插件ChanlunX:3步实现智能缠论分析
  • 3个步骤彻底解决知网文献下载难题:CNKI-download知网爬虫工具完全指南
  • 当笔记遇到代码:如何在Obsidian中打造你的个人数据科学工作站
  • c++中的左值右值,以及左值引用和右值引用
  • 揭秘Python剪映API:如何用代码批量处理1000个视频?
  • GetQzonehistory:5分钟快速找回QQ空间全部历史说说完整指南
  • 收藏 | Java程序员转战大模型,8个月薪资涨50%,小白也能轻松入门!
  • 大模型API中转站实测:上架时效与计费透明度双维度评测
  • 父系边界即文明边界
  • 1-VMware虚拟机的安装
  • (bug)vscode的设置问题
  • 向罗永浩学上课 | 职教课堂的底层逻辑与AI赋能(17)第十七章:7天试点执行计划
  • 如何5分钟搭建个人网易云音乐API服务:完整指南与实战教程
  • 五大神经网络架构核心原理与实战指南:CNN、RNN、Transformer、GAN、GNN
  • 智能建筑 KNX 选型攻略:施耐德与 ABB 全维度对比,附常用型号清单
  • HarmonyOS APP《画伴梦工厂》开发第26篇:安全权限管理——abilityAccessCtrl 实战
  • AI入门PPT大纲:原理、应用、挑战与趋势全解析
  • SQL注入实战指南:从原理到靶场通关,掌握Web安全必修课