Qemu 架构 硬件模拟器

news2024/11/25 18:33:30

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

wget 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/bin
    sudo 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.qcow2

qemu-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 addr
    xp /fmt addr 
                显示内存内容,其中 'x' 为虚地址,'xp' 为实地址。
                参数 /fmt i 表示反汇编,缺省参数为前一次参数。   
    6. p|print'   计算表达式值并显示,例如 $reg 表示寄存器结果。
    7. memsave addr size file
    pmemsave addr size file 
                     将内存保存到文件,memsave 为虚地址,pmemsave 为实地址。
    8. breakpoint 相关:
                     设置、查看以及删除 breakpoint,pc执行到 breakpoint,qemu 停止。(暂时没有此功能)
    9. watchpoint 相关:  设置、查看以及删除 watchpoint, 当 watchpoint 地址内容被修改,停止。(暂时没有此功能)
    a. s|step            单步一条指令,能够跳过断点执行。
    b. r|registers       显示全部寄存器内容。
    c. info 相关操作      查询 qemu 支持的关于系统状态信息的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单元测试界的高富帅,Pytest框架 (二) 前后置方法和 fixture 机制

前言 上一篇文章入门篇咱们介绍了pytest的基本使用,这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现,也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何…

利用procrank和lsof定位出客户软件内存OOM的问题

最近遇到一些事情,觉得挺憋屈的,可是再憋屈总得往前走吧!打工人,不好办啊!事情是这样的,笔者在芯片原厂负责SDK和行业解决方案输出的,可以理解成整体SDK turnkey方案。但是有些客户多少还要改一…

单例模式(饿汉式单例 VS 懒汉式单例)

所谓的单例模式就是保证某个类在程序中只有一个对象 一、如何控制只产生一个对象? 1.构造方法私有化(保证对象的产生个数) 创建类的对象,要通过构造方法产生对象 构造方法若是public权限,对于类的外部,可…

企业架构LNMP学习笔记31

负载均衡服务器的高可用备用服务器配置: 负载均衡服务器的配置比单台服务器的配置要高很多。硬件上要上一个台阶。 所有的请求流量都要经过负载均衡服务器,负载均衡服务器压力很大,防止她宕机,导致后端web服务器都不可用&#xf…

ROS2下使用TurtleBot3-->SLAM导航(仿真)RVIZ加载不出机器人模型

一、问题描述 在使用台式机进行仿真时,大部分例程很顺利,但在SLAM导航时,在RVIZ中却一直加载不出机器人模型,点击Navigation2 Goal选择目标点进行导航时,无响应。 启动后在RVIZ2和终端看到一个错误 按照官网的指令试…

探索 Wall-E 的寻路算法

几年前,Yandex 组织了一场名为“机器人快递员”的竞赛,并提供了诱人的奖品:一张参加专业人士封闭式自动驾驶会议的门票。该竞赛类似于一场游戏,参与者的任务是在地图上找到最佳路线并使用机器人快递员优化送货。 当我深入研究这个主题时,我发现尽管路线查找问题已经解决,…

ms17-010(永恒之蓝)漏洞复现

目录 前言 一、了解渗透测试流程 二、使用nmap工具对win7进行扫描 2.1 2.2 2.3 2.4 2.5 三、尝试ms17-010漏洞利用 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 四、结果展示 4.1 4.2 4.3 4.4 4.5 总结 前言 ms17-010(永恒之蓝&am…

mysql八股1

参考MySQL八股文连环45问(背诵版) - 知乎 (zhihu.com) 基础 1.范式 第一范式:强调的是列的原子性 第二范式:要求实体的属性完全依赖于主关键字。所谓完全 依赖是指不能存在仅依赖主关键字一部分的属性。(就是主键不…

Linux防火墙(iptables)

一、linux的防火墙组成 linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。 netfilter(内核空间)位于Linux内核中的包过滤防火墙功能体系,称为Linux防火墙的“内核…

Vulnhub:Kira: CTF靶机

kali:192.168.111.111 靶机:192.168.111.238 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.238访问80端口 点击upload发现是个上传点 点击language发现存在文件包含 上传php图片马再利用文件包含反弹shell http://1…

CIO40: 数字化落地最佳实践(16000字)

1-数字化规划 第一步:数字化规划。CIO要根据企业的发展现况及未来战略方向、根据企业董事长的布局和理念、根据企业各业务板块领导人的格局和理念,做出一份董事长和领导层高度认同的数字化规划,而且需要用PPT进行完整和专业的表达出来&#x…

基于SpringBoot的在线教育平台系统

基于SpringBootVue的线教育平台系统,前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:管理员、学生、老师 …

When后接什么动词?

1、when doing用法 When从句的主语和主句的主语是同一个或同一些人时,从句的谓语动词为be动词doing形式,可以把从句的主语和be动词省略,即用when doing sth是指当做……事情时, 如: when doing the work,we should b…

(以太网交换机)BCM53575B0KFSBG、BCM56870A0KFSBG、BCM56760B0KFSBG采用BGA封装的集成电路

一、BCM53575B0KFSBG 1G/2.5G/10G/25G TSN 连接交换机 应用 中小企业 2.5G/10G 交换机 使用时间敏感网络(TSN)的工业以太网/汽车应用 联网 (TSN) 的工业以太网/汽车应用 用于基站、闪存阵列、专业级音频/视频和机箱背板的嵌入式连接交换机 (…

自然语言处理NLP:一文了解NLP自然语言处理技术,NLP在生活中的应用,图导加深了解,NLP语料库,NLP开源工具

目录 1.自然语言处理NLP 1.1 NLP中英对照(双份) 1.2 相关文章 2.NLP语料库 2.1 NLP语料库列举 2.2 相关文章 3.NLP开源工具 3.1 NLP开源工具列举 3.2 相关文章 4.自然语言文本分类模型代码 5.图导NLP 6. NLP在生活中的应用 1.自然语言处理NLP …

Kafka中Consumer源码解读

Consumer源码解读 本课程的核心技术点如下: 1、consumer初始化 2、如何选举Consumer Leader 3、Consumer Leader是如何制定分区方案 4、Consumer如何拉取数据 5、Consumer的自动偏移量提交 Consumer初始化 从KafkaConsumer的构造方法出发,我们跟踪到…

ubuntu22.04 设置网卡开机自启

配置文件路径 在Ubuntu中,网络配置文件通常位于/etc/netplan/目录下,其文件名以.yaml为后缀。Netplan是Ubuntu 17.10及更高版本中默认的网络配置工具,用于配置网络接口、IP地址、网关、DNS服务器等。 我们可以看到配置文件为 01-network-ma…

【K210+ESP8266图传上位机开发】TCP server + JPEG图像解析上位机开发

本文章主要记录基于 【K210-ESP8266】 图传和显示的过程,上位机开发过程,系统架构和下位机开发请参考文章: 【K210-ESP8266】开发板上传图像数据到服务器并实时显示 💖 作者简介:大家好,我是喜欢记录零碎知…

easyrecovery 2023最新数据恢复软件免费下载激活教程

对于每天电脑不离身,键盘不离手的法律人来说,最惨痛的事故莫过于“没保存”了,意外断电、系统崩溃、介质故障、计算机病毒、文件误删除、系统升级、文件同步更新、程序运行意外中止、人为故意删改等各种原因都可能导致我们的文件数据损坏和丢…

eNSP-抓包实验

拓扑结构图: 实验需求: 1. 按照图中的设备名称,配置各设备名称 2. 按照图中的IP地址规划,配置IP地址 3. 使用Wireshark工具进行抓ping包,并分析报文 4. 理解TCP三次握手的建立机制 实验步骤: 1、配置P…