Qemu 架构 硬件模拟器
Qemu 架构 硬件模拟器
Qemu 是纯软件实现的虚拟化模拟器,
几乎可以模拟任何硬件设备,
我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,
虚拟机认为自己和硬件打交道,
但其实是和 Qemu 模拟出来的硬件打交道,
Qemu 将这些指令转译给真正的硬件。

从本质上看,虚拟出的每个虚拟机对应 host 上的一个 Qemu 进程,
而虚拟机的执行线程(如 CPU 线程、I/O 线程等)对应 Qemu 进程的一个线程。
1. 源码下载
centos:
sudo apt-get install qemu
ubuntu:
sudo yum install qemu -y
安装包:$wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2
$tar xjvf qemu-2.0.0.tar.bz2wget https://download.qemu.org/qemu-2.12.0.tar.x
xz -d qemu-2.12.0.tar.xz
tar xvf qemu-2.12.0.tar qemu-2.12.0/Git渠道:
$git clone git://git.qemu-project.org/qemu.git
2. 配置编译及安装
$cd qemu-2.12.0 //如果使用的是git下载的源码,执行cd qemu
配置:$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror --target-list="x86_64-softmmu" x86 64位格式$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror --target-list="i386-softmmu" 32位格式configure 脚本用于生成 Makefile,其选项可以用 ./configure --help 查看。这里使用到的选项含义如下:--enable-kvm:编译 KVM 模块,使 Qemu 可以利用 KVM 来访问硬件提供的虚拟化服务。--enable-vnc:启用 VNC。--enalbe-werror:编译时,将所有的警告当作错误处理。--target-list:选择目标机器的架构。默认是将所有的架构都编译,但为了更快的完成编译,指定需要的架构即可。安装好之后,会生成如下应用程序:1. ivshmem-client/server:这是一个 guest 和 host 共享内存的应用程序,遵循 C/S 的架构。2. qemu-ga:这是一个不利用网络实现 guest 和 host 之间交互的应用程序(使用 virtio-serial),运行在 guest 中。3. qemu-io:这是一个执行 Qemu I/O 操作的命令行工具。4. qemu-system-x86_64:Qemu 的核心应用程序,虚拟机就由它创建的。5. qemu-img:创建虚拟机镜像文件的工具,下面有例子说明。6. qemu-nbd:磁盘挂载工具。编译:$make -j4
安装:$sudo make install
符号链接:cd /usr/local/binsudo ln -s qemu-system-i386 qemu
3. 创建虚拟机
a. 使用qemu-img创建虚拟机镜像
虚拟机镜像用来模拟虚拟机的硬盘,在启动虚拟机之前需要创建镜像文件。
qemu-img create -f qcow2 test-vm-1.qcow2 10G-f 选项用于指定镜像的格式,
qcow2 格式是 Qemu 最常用的镜像格式,
采用来写时复制技术来优化性能。
test-vm-1.qcow2 是镜像文件的名字,
10G是镜像文件大小。
镜像文件创建完成后,可使用 qemu-system-x86 来启动x86 架构的虚拟机.
b. 使用 qemu-system-x86 来启动 x86 架构的虚拟机
qemu-system-x86_64 test-vm-1.qcow2
因为 test-vm-1.qcow2 中并未给虚拟机安装操作系统,
所以会提示 “No bootable device”,无可启动设备。
c. 启动 VM 安装操作系统镜像
qemu-system-x86_64 -m 2048 -enable-kvm test-vm-1.qcow2 -cdrom ./Centos-Desktop-x86_64-20-1.iso
-m 指定虚拟机内存大小,默认单位是 MB,
-enable-kvm 使用 KVM 进行加速,
-cdrom 添加 fedora 的安装镜像。
可在弹出的窗口中操作虚拟机,
安装操作系统,安装完成后重起虚拟机便会从硬盘 ( test-vm-1.qcow2 ) 启动。之后再启动虚拟机只需要执行:qemu-system-x86_64 -m 2048 -enable-kvm test-vm-1.qcow2qemu-img 支持非常多种的文件格式,
可以通过 qemu-img -h 查看.
其中 raw 和 qcow2 是比较常用的两种,
raw 是 qemu-img 命令默认的,
qcow2 是 qemu 目前推荐的镜像格式,是功能最多的格式。
运行参数
sudo ln -s qemu-system-i386 qemu
如果 qemu 使用的是默认 /usr/local/bin 安装路径,
则在命令行中可以直接使用 qemu 命令运行程序。qemu 运行可以有多参数,格式如:qemu [options] [disk_image]
其中 disk_image 即硬盘镜像文件。部分参数说明:1. `-hda file' / `-hdb file' /`-hdc file' /`-hdd file': 使用 file 作为 硬盘 0、1、2、3镜像。
2. `-fda file' / `-fdb file': 使用 file 作为软盘镜像,可以使用 /dev/fd0 作为 file 来使用主机软盘。
3. `-cdrom file': 使用 file 作为光盘镜像,可以使用 /dev/cdrom 作为 file 来使用主机 cd-rom。
4. `-boot [a|c|d]': 从软盘(a)、光盘(c)、硬盘启动(d),默认硬盘启动。
5. `-snapshot': 写入临时文件而不写回磁盘镜像,可以使用 C-a s 来强制写回。
6. `-m megs': 设置虚拟内存为 msg M字节,默认为 128M 字节。
7. `-smp n': 设置为有 n 个 CPU 的 SMP 系统。以 PC 为目标机,最多支持 255 个 CPU。
8. `-nographic': 禁止使用图形输出。
9. 其他:A. 可用的主机设备 dev 例如:a. vc 虚拟终端。b. null 空设备c. /dev/XXX 使用主机的 tty设备d. file: filename 将输出写入到文件 filename 中。e. stdio 标准输入/输出。f. pipe:pipename 命令管道 pipename。等。B. 使用 dev 设备的命令如:a. `-serial dev' 重定向虚拟串口到主机设备 dev 中。b. `-parallel dev' 重定向虚拟并口到主机设备 dev 中。c. `-monitor dev' 重定向 monitor 到主机设备 dev 中。C. 其他参数:a. `-s' 等待 gdb 连接到端口 1234。b. `-p port' 改变 gdb 连接端口到 port。c. `-S' 在启动时不启动 CPU, 需要在 monitor 中输入 'c',才能让qemu继续模拟工作。d. `-d' 输出日志到 qemu.log 文件。
在实验中,例如 lab1,可能用到的命令如:
qemu -hda ucore.img -parallel stdio # 让ucore在qemu模拟的x86-64/32硬件环境中执行
或
qemu -S -s -hda ucore.img -monitor stdio # 用于与gdb配合进行源码调试
常用调试命令
qemu中monitor的常用命令: 1. help 查看 qemu 帮助,显示所有支持的命令。2. q|quit|exit 退出 qemu。3. stop 停止 qemu。4. c|cont|continue 继续执行。5. x /fmt addrxp /fmt addr 显示内存内容,其中 'x' 为虚地址,'xp' 为实地址。参数 /fmt i 表示反汇编,缺省参数为前一次参数。 6. p|print' 计算表达式值并显示,例如 $reg 表示寄存器结果。7. memsave addr size filepmemsave addr size file 将内存保存到文件,memsave 为虚地址,pmemsave 为实地址。8. breakpoint 相关:设置、查看以及删除 breakpoint,pc执行到 breakpoint,qemu 停止。(暂时没有此功能)9. watchpoint 相关: 设置、查看以及删除 watchpoint, 当 watchpoint 地址内容被修改,停止。(暂时没有此功能)a. s|step 单步一条指令,能够跳过断点执行。b. r|registers 显示全部寄存器内容。c. info 相关操作 查询 qemu 支持的关于系统状态信息的操作。
相关文章:
Qemu 架构 硬件模拟器
Qemu 架构 硬件模拟器 Qemu 是纯软件实现的虚拟化模拟器, 几乎可以模拟任何硬件设备, 我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机, 虚拟机认为自己和硬件打交道, 但其实是和 Qemu 模拟出来的硬件打交道ÿ…...
通过starrocks jdbc外表查询sqlserver
1.sqlserver环境准备,使用docker环境,可以参考使用flink sqlserver cdc 同步数据到StarRocks_gongxiucheng的博客-CSDN博客 部署获得sqlserver环境; 2.获取starrocks环境,也可以通过docker部署,参考:使用…...
ArcGIS 10.5安装教程!
软件介绍: ArcGIS Desktop 10.5中文特别版是一款功能强大的GSI专业电子地图信息编辑和开发软件,ArcGIS Desktop 包括两种可实现制图和可视化的主要应用程序,即 ArcMap 和 ArcGIS Pro。ArcMap 是用于在 ArcGIS Desktop 中进行制图、编辑、分析…...
ConstraintLayout约束布局
1.进行复杂页面布局时,最外层的根布局不要用ConstraintLayout. 示例布局: <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.co…...
通过pyinstaller将python项目打包成exe执行文件
目录 第一步:安装pyinstaller 第二步:获取一个ico图标(也即是自己这个exe文件最后的图标) 第三步:打包 第一步:安装pyinstaller pip install pyinstaller 第二步:获取一个ico图标ÿ…...
P1068 [NOIP2009 普及组] 分数线划定
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的 150 % 150\% 150% 划定,即如果计划录取 m m …...
应用在汽车新风系统中消毒杀菌的UVC灯珠
在病毒、细菌的传播可以说是一个让人敏感而恐惧的事情。而对于车内较小的空间,乘坐人员流动性大,更容易残留细菌病毒。车内缺少通风,残留的污垢垃圾也会滋生细菌,加快细菌的繁殖。所以对于车内消毒就自然不容忽视。 那么问题又来…...
TOOLLLM: FACILITATING LARGE LANGUAGE MODELS TO MASTER 16000+ REAL-WORLD APIS
本文是LLM系列的文章之一,针对《TOOLLLM: FACILITATING LARGE LANGUAGE MODELS TO MASTER 16000 REAL-WORLD APIS》的翻译。 TOOLLLMs:让大模型掌握16000的真实世界APIs 摘要1 引言2 数据集构建3 实验4 相关工作5 结论 摘要 尽管开源大型语言模型&…...
【JavaSpring】spring接口-beanfactory和applicationcontext与事件解耦
beanfactory 1.applicationcontext的父接口 2.是Spring的核心容器 功能 表面只有getBean,但实现类默默发挥了巨大作用 1.管理所有bean 2.控制反转 3.基本的依赖注入 applicationcontext 功能 1.继承了MessageSource,有了处理国际化资源的能力 …...
《深入理解Java虚拟机》——Java内存区域与内存溢出异常
Java内存区域与内存溢出异常 运行时数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存 实例堆溢出栈溢出 运行时数据区域 根据《Java虚拟机规范的规定》,Java虚拟机所管理的内存将会包含已下架几个运行时数据区域。 程序计数器 在Java虚…...
公众号hanniman往期精选
目录 一、AI产品分析(10篇) 二、AI产品经理(10篇) 三、AI技术(10篇) 四、AI行业及个人成长(10篇) 一、AI产品分析 1、【重点】深度 | 关于AIGC商业化的13个非共识认知(80…...
谷粒商城----缓存与分布式锁
1、缓存使用 为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而 db 承担数据落盘工作。 哪些数据适合放入缓存? 即时性、数据一致性要求不高的 访问量大且更新频率不高的数据(读多,写少&…...
【JavaEE进阶】Spring事务和事务传播机制
文章目录 一. 什么是Spring事务二. Spring中事务的实现1. Spring编程式事务2. 声明式事务2.1 trycatch下事务不会自动回滚的解决方案2.2 Transactional 作用范围2.3 Transactional 参数说明2.4 Transactional 工作原理 三. 事务的隔离级别1. 事务的四大特性2. Spring中设置事务…...
【Hive】drop table需注意外部表
什么是内部表,外部表? 比较专业的定义: 外部表需要转为内部表,执行删除操作才能真的删表结构删表数据。否则drop table仅是删除了表数据,表结构还是存在的。 alter table tb_name set TBLPROPERTIES(EXTERNALfalse);…...
【2023数学建模国赛】A题定日镜场的优化设计模型建立
2023年全国大学生数学建模竞赛A题定日镜场的优化设计,目前已写出第四版国赛A题思路和模型详细公式,目录如下: 一、 问题重述... 1 二、 问题分析... 1 三、 模型假设... 6 四、 问题一模型的建立和求解... 6 4.1 定日镜场坐标系的建立...…...
QT 事件与信号区别
事件(Event)和信号(Signal)是两个在编程中具有不同概念和用途的术语。 事件(Event): 事件是程序运行过程中发生的特定动作或状态改变。可以是用户输入、硬件触发、系统通知等。 事件通常由操作…...
[Vue3 博物馆管理系统] 使用Vue3、Element-plus tabs组件构建选项卡功能
系列文章目录 第一章 定制上中下(顶部菜单、底部区域、中间主区域显示)三层结构首页 第二章 使用Vue3、Element-plus菜单组件构建菜单 第三章 使用Vue3、Element-plus走马灯组件构建轮播图 第四章 使用Vue3、Element-plus tabs组件构建选项卡功能 [第五…...
【算法专题突破】滑动窗口 - 长度最小的子数组(9)
目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 1. 题目解析 题目链接:209. 长度最小的子数组 - 力扣(Leetcode) 要注意的是,题目给的是正整数, 而题目要求并不难理解,就是找最短的…...
骨传导与入耳式耳机哪种音质好?该如何选择?
骨传导耳机和传统耳机的定位不同,所以没有可比性,如果一定要说哪款耳机音质好,答案是入耳式耳机音质比较好! 首先入耳式耳机是直接塞入耳朵佩戴,会最大程度减少漏音,同时不会改变音质,会直接传…...
【多线程】Timer任务定时器实现与盲等原子性问题的解决
目录 一、定时器 二、标准库中的Timer 三、代码实现 四、死锁 一、定时器 代码中的定时器通常是在一定的时间执行对应的代码逻辑 二、标准库中的Timer public static void main(String[] args){Timer timer new Timer();timer.schedule(new TimerTask() {Overridepublic…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
