第一期 前言 《虚拟机就是开发板》

版权声明:本文为aggresss原创文章,未经博主允许不得转载。 作者:[email protected] https://blog.csdn.net/aggresss/article/details/54928181
        记得刚上大学时的第一年寒假,从图书馆借了10本厚厚的书带回了家,心想这个寒假一定要过得充实,把这几本书读透,结果不用想也知道,一本也没看懂。同样是大三的时候,一天室友从网上买了个51单片机的开发板,随后我把随机送的实验教程全都动手实践了一遍,这几个实验下来那叫一个通透,瞬间把《微机原理》《通信原理》这些理论课串联了起来。从此我发现了实践的重要性,一本教材,一个理论学习的正确打开方式应该是每一小步理论学习都伴随有相应的实践验证和探索。
        学习是一件高风险的事情。首先方法不对根本学不明白,那样等于浪费时间;其次有些理论学习的实践环境在学习者所处的环境中根本不具备,没有实践的理论学习也是浪费时间;最后,学习只是能够产出结果的必要非充分条件,能够产出结果的必要非充分条件还有学习者的心态、知识基础、价值取向、运气等诸多因素。
        不多废话了,来说主题,开发板可能对于电子类理工科人并不陌生,很多项目开发都需要开发板作为验证载体。对于接口类的验证确实需要物理开发板来验证,但是对于一些偏软件类的实践验证可以通过虚拟机或者叫模拟器来完成,这样可以避免物理平台的故障风险,降低实践成本,把更多的注意力放在需要关注的软件验证上面。这一次,我们来把虚拟机当做开发板,探讨通过虚拟机学习Linux相关知识的方法。
        虚拟机的运行软件是QEMU。QEMU官方( www.qemu-project.org)对自己的定义为“QEMU is a generic and open source machine emulator and virtualizer.”名称取自“Quick EMUlator”。
QEMU支持3种运行模式:
        Full-system emulation:Run operating systems for any machine, on any supported architecture
        User-mode emulation:Run programs for another Linux/BSD target, on any supported architecture
        Virtualization:Run KVM and Xen virtual machines with near native performance
        其中,用户模式仿真允许一个 CPU 构建的进程在另一个 CPU 上执行(执行主机 CPU 指令的动态翻译并相应地转换 Linux 系统调用);系统模式仿真允许对整个系统进行仿真,包括处理器和配套的外围设备;虚拟化运行模式是指通过底层的硬件支持(Intel-VT,AMD-V等虚拟化技术)和Xen或者KVM等系统级虚拟化技术相结合,高效运行虚拟化系统。
        这里要分清两个概念,模拟器(emulation)和虚拟化(virtulization),模拟器是emulator,通常是为了模拟不同指令集、不同体系架构的 CPU,所以多数情况要对微指令进行解释执行,效率相对与虚拟化慢很多;虚拟化技术 virtualization,基本都是去模拟一套相同指令集相同架构的硬件平台,因此在做好保护的前提下,很多时候可以直接利用 CPU 去执行目标指令。虽然还是模拟物理 CPU 而不借助于 Host OS 的功能,少了一层指令集转换,运行速度会提高不少。
        对于使用过Vmware Workstation 或者是 Virtual Box 的人刚接触QEMU时比较不习惯,因为它是一个命令行下纯脚本控制的软件,这就是开源社区的风格,专注于做好自己的事,UI的事情会由另一个社区来处理(可以通过额外安装 qemu-launcher 实现)。

运行QEMU最好是在Linux环境下,我的运行环境是Ubuntu16.04_amd64 版本。QEMU的安装非常简单,在ubuntu环境下输入:

         sudo apt-get install qemu 

        等待安装完成后在shell中输入 qemu 然后按两下Tab键,就可以看到QEMU支持的所有命令,如下图所示。


        命令的最后一部分代表模拟的平台,中间带system的是运行在系统模式下,不带system的是运行在用户模式下。
        在接下来几期的实践中我们会使用qemu-system-arm 模拟arm平台下的一个开发板,来进行Linux相关的一些实验。在模拟arm平台前,我们先体验一下QEMU与KVM相结合的虚拟化技术,来虚拟化运行一个Windows XP系统,体验一下QEMU可以实现Vmware Workstation 和 Virtual Box 同样的功能。
首先需要安装两个软件:
        sudo apt-get install qemu-kvm 
        sudo apt-get install virt-manager
其中,qemu-kvm提供虚拟化加速功能,virt-manager是一个轻量级应用程序套件,提供管理虚拟机的命令行或图形用户界面。
        安装完成后通过命令 virt-manager 就可以启动图形化的虚拟机管理界面,准备好一张ISO格式的系统光盘,我这里用Windows XP,当然,你也可以选择任意支持光盘安装的系统ISO文件。各种下一步之后就可以在Linux环境下虚拟化运行Windows XP 系统了,体验了一下,相当流畅,毕竟XP是15年前的操作系统了,对硬件要求还是比较低的,下面是运行的截图。

        系统运行后,使用 ps -ef |grep qemu 命令查看一下就会发现,其实virt-manager 调用了 libvirt+ 进程,然后 libvirt+ 通过调用 qemu-system-x86_64 命令来运行虚拟机,只是和模拟器不同的是它使用了 -enable-kvm 参数,就变成了虚拟化运行了。我们所看到的图形化的虚拟机最终都是通过调用命令行命令加参数实现的,这就是Linux社区软件的风格。


        通过上面这个简单的小实验,我们大体对QEMU有了一个感性的认识,从下一期开始,我们将使用QEMU模拟运行一个开发板,并在上面实验与Linux相关的内容。
        《虚拟机就是开发板》英文名称是 Linux Kernel Demo ,简写为 LKDemo 。
        文章中提到的所有 开源文档、代码都提供下载: https://github.com/aggresss/LKDemo

猜你喜欢

转载自blog.csdn.net/aggresss/article/details/54928181
今日推荐