前言

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 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 \
    -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
    启动QEMU,内核镜像用的是uImage,设备树文件是devicetree.dtb
  • 到这里你应该能看见 :
    zc706-zynq7 login:
    用户名root,没有密码,登陆后应该能看见:
    root@zc706-zynq:~#
    也就是,在Linux终端里出现了另一个Linux终端。。。这就是基于ARM架构的,ZYNQ特有的Cortex-A9内核上,跑着的嵌入式Linux操作系统。安装成功。
    要退出QEMU,需要 先按 Ctrl+A,然后按 X