最近偶然发现Android Studio竟然是用QEMU开发的,而且很多大公司都用QEMU做仿真器进行前置开发,不仅仿真CPU,SOC,而且功能和性能几乎做到了1:1仿真,大呼吃惊之余,学习之后发现QEMU确实强大,可以模拟大多数硬件设备,省去不少买板子的钱,在此记录一下学习的过程。

QEMU简介:

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的模拟处理器软件(顺带提一下,ffmpeg也是这哥们写的,而且全是开源,真伟大,有兴趣可以百度一下这个人,简直是奇才 ),几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。

正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,因为 KVM 是硬件辅助的虚拟化技术,主要负责 比较繁琐的 CPU 和内存虚拟化,而 Qemu 则负责 I/O 虚拟化,两者合作各自发挥自身的优势,相得益彰。

QEMU release下载:

(因为是要快速入手学习,这里使用的韦老师二次开发后的QEMU,他给裸板仿真加了UI界面,使得操作显示更加直观)

从下面 2 个地址就可以下载到最新的 release 包,解压开后即可使用:

① ubuntu-18.04 开发环境下 qemu imx6ul 系统镜像下载地址:

http://wiki.100ask.org/Download_ubuntu-18.04_imx6ul_qemu

② ubuntu-16.04 开发环境下 qemu imx6ul 系统镜像下载地址:

http://wiki.100ask.org/Download_ubuntu-16.04_imx6ul_qemu




qemu查看cpu架构 qemu cpu flag_qemu查看cpu架构


QEMU源码下载与编译:

在ubuntu上执行如下指令即可下载qemu源码

$ git clone https://github.com/100askTeam/qemu.git
$./configure --prefix=$PWD/ --target-list="arm-softmmu arm-linux-user" --enable-debug --enable-sdl --enable-kvm --enable-tools --disable-curl
$ make
$ make install

编译完上面的过程,你会得到很多文件夹,我们只取bin,etc,share,libexec,放在release版目录的qemu下,这是你以后修改QEMU后所替换的文件。


qemu查看cpu架构 qemu cpu flag_linux_02


在release版中,创建你想模拟哪块ARM板子的文件夹,与qemu同级目录,我们取名imx6ull-system-image,然后将编译好板子的zImage,dtb,rootfs,放入imx6ull-system-image文件夹中。


qemu查看cpu架构 qemu cpu flag_Powered by 金山文档_03


最后进入release版,运行qemu-imx6ull-gui.sh,会得到如图所示的仿真板子图形。


qemu查看cpu架构 qemu cpu flag_软件构建_04


qemu查看cpu架构 qemu cpu flag_qemu查看cpu架构_05


总结:这里简单讲述了qemu环境搭建的过程,之后会详细描述一些常用设备的仿真和驱动。