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…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...