当前位置:首页 » 操作系统 » qemulinux内核

qemulinux内核

发布时间: 2022-04-02 01:28:55

❶ KVM、QEMU和KQemu有什么区别

1、KVM是一套虚拟机管理系统,包括内核虚拟构架和处理器相关模块,其借用了 QEMU其它一些组件,KVM的非内核部分是由QEMU实现的;加载了模块后,才能进一步通过其他工具创建虚拟机。

2、QEMU是另外的一套虚拟机管理系统,Kqemu是QEMU的加速器,可以认为是QEMU的一个插件;QEMU可以虚拟出不同架构的虚拟机,如在x86平台上可以虚拟出power机器。

3、KVM负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但KVM不能模拟其他设备。QEMU是模拟IO设备(网卡,磁盘),KVM加上QEMU之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以一般都称之为QEMU-KVM。

(1)qemulinux内核扩展阅读:

1、KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。

2、QEMU在GNU/Linux平台上使用广泛。具有高速度及跨平台的特性,通过KQEMU这个闭源的加速器,QEMU能模拟至接近真实电脑的速度。

3、KQEMU现可运行在基于x86或x86_64的Linux2.4或Linux 2.6主机上。

❷ KVM他说的基于内核的虚拟机是什么意思

这个问题下面好几个答案是完全错的,也有些是对的,但写得很简单,看相关的讨论,估计读者都没有读懂。这里的关键问题是概念比较乱,我来帮忙整理一下。

下面的概念定义很多来自我自己的定义,但和现有的概念基本上不会冲突,也应该更容易帮助读者理解虚拟化技术,所以我猜应该没有什么问题。

虚拟化技术,一般理解上,是在一个操作系统之上,模拟另一个操作系统的执行环境。我们看到的各种游戏机模拟器,还有为开发CPU做仿真而做的模拟程序,就是早期比较常见的虚拟化解决方案,它的工作原理很简单:把CPU的所有寄存器都写在一组变量中(这组变量我们称为CPUFile),然后用一片内存当作被模拟CPU的内存(这片内存这里称为vMEM),然后在用一些数据结构表示IO设备的状态(这里称为vIO),三者的数据结构综合在一起,就是代表一个虚拟化的环境了(这里称之为VM),之后按顺序读出一条条的指令,根据这个指令的语义,更改VM的数据结构的状态(如果模拟了硬件,还要模拟硬件的行为,比如发现显存被写了一个值,可以在虚拟屏幕上显示一个点等),这样,实施虚拟的那个程序就相当于给被虚拟的程序模拟了一台计算机,这种技术,我称它为“解释型虚拟化技术”。指令是被一条一条解释执行的。

在这个方案中,我们有三个对象:
Host:执行虚拟程序的系统
Emulator:实施虚拟的,运行在Host上的那个程序
Guest:被虚拟出来的系统,也就是运行了软件(例如操作系统)的VM

这些概念在技术演进的过程中会一定程度变化,读者要注意这一点,记住它的原始含义,否则很容易乱掉。

解释型虚拟化技术很简单,直接,概念也容易理解,但很明显,这个效率是很低的。优化得比较成功的是qemu,它使用一种所谓“编译型”的技术,把每条被虚拟的设备的指令都写成一段C代码,用这段C代码去修改CPUFile等VM数据,然后再用编译器去编译这些C代码,借用了编译器的优化能力,最后在解释Guest的指令的时候,用一个“翻译区“,把这些C代码的编译结果拼起来,然后直接执行。这种方法有效提高了”解释”的效率(所以qemu才称为Quick-emulator),但效率很明显还是非常低的。Android的SDK模拟基于ARM的手机,用的就是这种技术。

随着技术的发展,有人就开始取巧了:很多时候,我们仅仅是在x86上模拟x86,这些指令何必要一条条解释执行?我们可以用CPU直接执行这些指令啊,执行到特权指令的时候,我们直接异常,然后在异常中把当前CPU的状态保存到CPUFile中,然后再解释执行这个特权指令,这样不是省去了很多”解释“的时间了?用这种技术实现的虚拟机,就称为”调度型虚拟化技术“,这种情况下,Emulator的主要工作就不是解释了,它的主要工作是调度,调度Host和所有的Guest来分时(或者分核)使用CPU。

qemu也可以工作在这种模式。要工作在这种模式,它需要在内核中插入一个kqemu.ko,以便处理那些特殊的,由它的模拟程序产生的异常。

这种情况下,我们会发现,Emulator已经不是原来那个意思了,虽然我们仍需要使用这个程序,但仅仅靠这个程序,它作为Host上的一个程序,没有办法调度Host的资源。所以我们引入另一个实体,所谓Hypervisor,Hypervisor负责调度,Emulator只是给它提请求而已。

(这里,Emulator的语义也发生变更了,读者有必要注意这一点)

Hypervisor需要掌控整个系统的资源,这样它就需要有所有设备的驱动,这样会让Hypervisor变得非常复杂的。所以Host的概念仍然存在,一种简化的理解可以是,BIOS启动Hypervisor,Hypervisor首先启动第一个OS,那个就是Host,之后Host上的Emulator启动Guest,Emulator向Hypervisor请求资源,Hypervisor模拟一个环境给新的Guest,但如果Guest向Hypervisor请求IO或者其他特殊能力,这些请求就会被Hypervisor调度到Host上,让Host执行。

在Xen上,这个Host称为DOM0,说明Xen是认为Host和Guest在调度上没有本质区别的,都是一个调度的对象,但DOM0带有所有的驱动,管理程序也可以放在这里直接和Hypervisor通讯。

好了,现在你可以明白为什么KVM称为”内核(K)的VM"技术了,Xen的Hypervisor是一个独立的部件,由BIOS(其实是grub了)直接加载,然后和DOMx的各个操作系统通讯。而KVM的Hypervisor直接就是内核的一部分,这个Hypervisor的代码直接就在Linux的内核中,当Host启动的时候,它们一起加载,一同初始化,只是Hypervisor的代码工作在虚拟机调度器的状态,而其他代码工作在普通内核状态而已。

这个用ARM64平台特别好理解,ARM64平台(不考虑安全态)3个特权级,EL0用户态,EL1内核态,EL2 Hypervisor态。这样,内核启动先进入EL2,初始化Hypervisor部分的状态,然后切换入EL1,初始化内核的状态,然后才fork init,进入EL0。这之后,你启动qemu-kvm,这个程序就可以通过系统调用(对/dev/kvm文件做ioctl)进入内核,调用KVM的请求,执行调度,从内核中直接做Hypervisor请求,进入Hypervisor要求调度Guest。

这样,很明显,KVM确实是”Linux内核提供的虚拟化技术“,这就是它和其他虚拟化技术不同的地方了。

vmware和virtualbox的技术和Xen类似,无论它们如何加载,是否独立,或者作为一个内核模块加载,毕竟它们不是内核原始设计的一部分。

至于是全虚拟化(Guest不知道你自己是被模拟的系统),还是Para虚拟化(Guest知道自己是模拟的系统,用直接和Hypervisor通讯的方法实现IO),这个问题和是否KVM没有关系(kvm两种模式都可以支持),和性能也没有关系。这仅仅是构架的不同。

讨论区有读者问,为什么没有看到VirtualBox从BIOS加载Hypervisor呢?这个涉及到两个要素:

第一,kqemu.ko也可以不从BIOS加载,这种模式我仍把kqemu称为Hypervisor,但这个Hypervisor并非工作在Hypervisor状态,它是和内核互相妥协从而工作在Hypervisor的角色上的,它的工作级别并不比Host高,但仍可以为Guest模拟出一个运行环境来。VirtualBox使用一样的技术。

第二,VirtualxBox还可以支持VT-x这样的硬件加速的虚拟工作状态。这个事情和VT-x的设计有关,VT-x的特权级继承自传统的x86特权级,就是0-3,0是最高优先级,3是最低优先级。像Linux就只用了0和3级表示内核和用户态。刚开始支持虚拟化的时候,Intel考虑0是Hypervisor级(VMM级),1是内核,3是用户。但这种设计造成不兼容和复杂度。所以到了64位后,新的模式是:系统刚启动的时候,是Host态0级,在这个级别你可以用VMXON进入VMM级,然后你可以在这个级别创建虚拟机,再用VMXON进入虚拟机,VMXOFF退出虚拟机。虚拟机中仍可以有0-3级。这样一来,在Host中,你只要能进入0级,就可以把自己提升到VMM级。VirtualBox只要能在内核中插入一个模块,就可以为自己获得VMM的权限。但这个方法在ARM64上是行不通的。

(读者应该已经注意到了,这里面的定义在整个发展过程中不断发生语义的变化,这造成很多人对技术误解,所以,我们理解计算的概念,更多看我们如何用和如何建模,如果你认为某个概念是持久不变的,基本上你很快就被计算机技术抛弃了。因为基于概念保持部分使用模式不变,然后进行技术演进,是计算机发展的常态)

❸ 使用buildroot编译arm架构的linux内核,使其支持usb摄像头,并使用qemu虚拟运行

#没有吧ext* 和 VFS编进去吧

cd/usr/src/linux
makemenuconfig
#选择ext4和VFS,在FileSystem里,很好找
make;makemole_install;makeinstall

❹ 究竟是用qemu-kvm还是qemu-system-x86

你好,很高兴为你解答!

KVM 只基于内核的虚拟化
Qemu本身就是一种虚拟化,也是一种硬件仿真模拟器
KQemu是Qemu针对于KVM做优化后和KVM的结合,性能比Qemu本身好很多。。。
我们目前说的KVM 其实就是qemu-kvm
在linux中是以一个/dev/kvm的块设备和qemu-kvm 的一个进程存在的

望采纳,谢谢

❺ linux 内核 qemu 相关

缺少了设备树文件(.dtb)和文件系统。
另外,“--append”选项用了两个短横杠。

❻ 有没什么工具可以调试Linux内核的

qemu模拟器,内带gdbserver,可以很方便的源码调试。
kdb,kgdb之类的也是调试器,最简单的就是printk看看

❼ qemu怎样为选择arm linux内核镜像选择运行arm平台

下载Linux内核

下载内核有两种方法,一种是用git直接下载内核代码树,方便后面的内核开发。另一种是直接到内核社区下载对应版本的源码包。我采用第一种方法,但后面发现主线上3.18版本和后面版本的代码,使用这种搭建方法运行不起来。目前未查明问题的根因。如果读者想快速搭建成功,建议选用3.16版本的内核进行搭建。

安装arm的交叉编译工具链

想必做嵌入式开发的朋友,对交叉编译工具链不陌生。如果你订制一个交叉编译工具链,建议你使用crosstool-ng开源软件来构建。但在这里建议直接安装arm的交叉编译工具链:

sudoapt-getinstallgcc-arm-linux-gnueabi

编译Linux内核

生成vexpress开发板子的config文件:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=armvexpress_defconfig

编译:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=arm

生成的内核镱像位于arch/arm/boot/zImage,后续qemu启动时需要使用该镜像。

下载和安装qemu模拟器

其实Ubuntu12.04有qemu的安装包,但由于版本较低,对vexpress开发板支持不友好,建议下载高版本的qemu:

wget

配置qemu前,需要安装几个软件包:

sudoapt-getinstallzlib1g-dev

sudoapt-getinstalllibglib2.0-0

sudoapt-getinstalllibglib2.0-dev

配置qemu,支持模拟arm架构下的所有单板:

./configure--target-list=arm-softmmu--audio-drv-list=

编译和安装:

make

makeinstall

测试qemu和内核能否运行成功

qemu已经安装好了,内核也编译成功了,到这里最好是测试一下,编译出来的内核是否OK,或者qemu对vexpress单板支持是否够友好。

运行命令很简单:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage-nographic-append"console=ttyAMA0"

如果看到内核启动过程中的打印,说明前的搭建是成功的。

这里简单介绍下qemu命令的参数:

-Mvexpress-a9模拟vexpress-a9单板,你可以使用-M?参数来获取该qemu版本支持的所有单板

-m512M单板运行物理内存512M

-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage告诉qemu单板运行内核镜像路径

-nographic不使用图形化界面,只使用串口

-append"console=ttyAMA0"内核启动参数,这里告诉内核vexpress单板运行,串口设备是哪个tty。

注意:

我每次搭建,都忘了内核启动参数中的console=参数应该填上哪个tty,因为不同单板串口驱动类型不尽相同,创建的tty设备名当然也是不相同的。那vexpress单板的tty设备名是哪个呢?其实这个值可以从生成的.config文件CONFIG_CONSOLE宏找到。

如果搭建其它单板,需要注意内核启动参数的console=参数值,同样地,可从生成的.config文件中找到。

制作根文件系统

到这里是否大功告成了呢?其实在上面的测试中,你会发现内核报panic,因为内核找不到根文件系统,无法启init进程。

根文件系统要考虑两个方面:

1.根文件系统的内容

如果你看过《LinuxFromScratch》,相信你会对这一步产生恐惧感,但如果一直从事嵌入式开发,就可以放下心来。根文件系统就是简单得不能再简单的几个命令集和态动态而已。为什么LinuxFromScratch会有那么复杂,是因为它要制作出一个Linux发生版。但在嵌入式领域,几乎所有的东西,都是mini版本,根文件系统也不例外。

本文制本的根文件系统=busybox(包含基础的Linux命令)+运行库+几个字符设备

2.根文件系统放在哪里

其实依赖于每个开发板支持的存储设备,可以放到NorFlash上,也可以放到SD卡,甚至外部磁盘上。最关键的一点是你要清楚知道开发板有什么存储设备。

本文直接使用SD卡做为存储空间,文件格式为ext3格式

下载、编译和安装busybox

wget

makedefconfig

makeCROSS_COMPILE=arm-linux-gnueabi-

makeinstallCROSS_COMPILE=arm-linux-gnueabi-

安装完成后,会在busybox目录下生成_install目录,该目录下的程序就是单板运行所需要的命令。

形成根目录结构

先在Ubuntu主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录

1.创建rootfs目录(根目录),根文件系统内的文件全部放到这里

sudomkdirrootfs

2.拷贝busybox命令到根目录下

sudocpbusybox-1.20.2/_install/*-rrootfs/

3.从工具链中拷贝运行库到lib目录下

sudocp-P/usr/arm-linux-gnueabi/lib/*rootfs/lib/

4.创建4个tty端终设备

sudomknodrootfs/dev/tty1c41

sudomknodrootfs/dev/tty2c42

sudomknodrootfs/dev/tty3c43

sudomknodrootfs/dev/tty4c44

制作根文件系统镜像

1.生成32M大小的镜像

ddif=/dev/zeroof=a9rootfs.ext3bs=1Mcount=32

2.格式化成ext3文件系统

mkfs.ext3a9rootfs.ext3

3.将文件拷贝到镜像中

sudomkdirtmpfs

sudomount-text3a9rootfs.ext3tmpfs/-oloop

cp-rrootfs/*tmpfs/

sudoumounttmpfs

系统启动运行

完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/qemu/linux/arch/arm/boot/zImage-nographic-append"root=/dev/mmcblk0console=ttyAMA0"-sda9rootfs.ext3

从内核启动打印,到命令行提示符出现,激动人心的时刻出现了……

写在后面的话

通过上面的步骤,搭建出来一个最小的qemu+arm开发环境,你可以上面的基础上修改内核,或者增加一些测试程序在单板上运行,甚至使用单板的flash设备。

在此,你可以做纯arm架构的内核开发,或者与架构无关的内核开发,也可以做单板相关的驱动开发。

❽ 谁看过《Linux 内核完全剖析——基于0.12内核》这本书

Linux-0.12这个目录把里面的全部下载就好啊,

❾ qemu能模拟全部x86指令吗

qemu能模拟全部x86指令。也可以模拟各种ARM板子还可以模拟各种外设,百问网对QEMU做了很多改进支持更多硬件支持更多GUI现实,让用户可以更有真实感地使用QEMU来模拟IMX6ULL板子。

qemu模拟全部x86指令的原理

首先Qemu本身并不是KVM的一部分,而是一整套完整的虚拟化解决方案,它是纯软件实现的,包括处理器虚拟化内存虚拟化以及各种虚拟设备的模拟,但因为是纯软件模拟,所以性能相对比较低,而广义的KVM实际上包含两部分。

一部分是基于LINUX内核支持的KVM内核模块,另一部分就是经过简化和修改Qemu,KVM内核模块模拟处理器和内存以支持虚拟机的运行,Qemu主要处理I或O以及为用户提供一个用户空间工具来进行虚拟机的管理,两者相互结合相辅相成,构成了一个完整的虚拟化平台。

❿ 如何使用qemu调试linux内核最早版本

gdb是用来调试二进制程序的,不能调试python脚本。 python自带pdb模块,可以用来调试自己的脚本。 使用python -m pdb ,交互方式,命令与gdb类似。

热点内容
溯源码刷胶 发布:2024-09-27 09:13:51 浏览:203
文件夹归类软件 发布:2024-09-27 09:05:41 浏览:380
ccache缓存 发布:2024-09-27 09:00:51 浏览:191
网络摄像头的原始密码是多少 发布:2024-09-27 08:44:41 浏览:790
c语言设t 发布:2024-09-27 08:42:18 浏览:236
游戏编程培训学校 发布:2024-09-27 08:29:44 浏览:980
量子算法包括 发布:2024-09-27 08:20:33 浏览:671
linux堡垒机 发布:2024-09-27 08:11:30 浏览:762
广东广电在哪里看wifi密码 发布:2024-09-27 07:54:55 浏览:120
垃圾压缩设备采购 发布:2024-09-27 07:46:14 浏览:958