前言
QEMU类似于VMware和VirtualBox,也是在一个平台里虚拟另一个平台的虚拟机之类的东东。但是QEMU可以虚拟出一个架构完全不一样的平台,举个栗子,可以在x86架构的Linux下虚拟出ARM架构的嵌入式Linux,这也就是接下来要做的。
Xilinx的FPGA这些年很喜欢嵌入一两个软核或者硬核处理器,低端一点的产品可以用MicroBlaze软核,高端一点的例如ZYNQ则直接在里面加入两个Cortex-A9硬核。
所以现在的FPGA基本都能跑操作系统的。那问题来了,FPGA开发板很贵,上万块钱一个,很多人买不起(例如我),那在缺少板子的情况下,怎么验证我这个设计能不能用呢?Xilinx在Github上fork了QEMU,并且进行了修改,用于虚拟出一个ZYNQ或者MicroBlaze。
这篇博文其实基本上就是把Xilinx官方教程翻译了一遍,大家也可以直接看http://www.wiki.xilinx.com/QEMU来做。
步骤
- 首先要有一个Linux平台的主机(host),比如Ubuntu什么的。我用的是VMware虚拟机。
- 安装 git.
$ sudo apt-get install git
- 如果报错说找不到git,那就是源没有升级到最新,只需
$ sudo apt-get update
然后在安装即可。
- 如果报错说找不到git,那就是源没有升级到最新,只需
- 选一个安装路径,在该路径下
$ git clone git://github.com/Xilinx/qemu.git
$ cd qemu
注意,接下来所有操作都是在此路径下的。- 安装各种支持包
$ sudo apt install libglib2.0-dev libgcrypt20-dev autoconf automake libtool
$ sudo apt-get install gawk openssl libssl-dev libncurses5-dev
这一行官方教程没有,但是如果不装,会报错说缺这三个东西。这三个分别对应gawk,openssl,ncurses。
- 下载子模块
$ git submodule update --init pixman dtc
- 配置QEMU
$ ./configure --target-list="aarch64-softmmu,microblazeel-softmmu" --enable-fdt --disable-kvm
make
- 到这,QEMU就装好了,我们试一下将它跑起来吧。
- 我们都知道,要运行一个虚拟平台,需要一个镜像文件(image file),举个栗子,我们跑一下Zynq7000试下吧。
- http://www.wiki.xilinx.com/Zynq+2016.2+Release ,在Download处下载对应型号的板子的压缩包。举个栗子,下载 2016.2-zc706-release.tar.xz ,并放到某个路径,例如 qemu 文件夹下。
- 解压
$ tar xf 2016.2-zc706-release.tar.xz
注意这里不同板子型号需要替换掉“zc706”,反正名字就是下载下来的那个压缩包。 - 解压之后应该会产生一个叫“zc706”的文件夹。
$ ./aarch64-softmmu/qemu-system-aarch64 \
启动QEMU,内核镜像用的是uImage,设备树文件是devicetree.dtb
-M arm-generic-fdt-plnx -machine linux=on \
-serial /dev/null -serial mon:stdio -display none \
-kernel zc706/uImage -dtb zc706/devicetree.dtb --initrd zc706/uramdisk.image.gz- 到这里你应该能看见 :
zc706-zynq7 login:
用户名root,没有密码,登陆后应该能看见:
root@zc706-zynq:~#
也就是,在Linux终端里出现了另一个Linux终端。。。这就是基于ARM架构的,ZYNQ特有的Cortex-A9内核上,跑着的嵌入式Linux操作系统。安装成功。
要退出QEMU,需要 先按 Ctrl+A,然后按 X。