以下是在 Ubuntu 18.04 上编译 QEMU 并添加 SPI 外设支持的步骤:
- 安装必要的依赖库:
sudo apt-get install build-essential git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev libcap-dev
- 下载 QEMU 源代码:
git clone https://github.com/qemu/qemu.git
cd qemu
- 配置编译选项,指定目标架构为 arm 并启用硬件加速支持和外设支持:
./configure --target-list=arm-softmmu --enable-kvm --enable-virtfs --enable-virtio-blk-data-plane --enable-vhost-user-net \
--enable-vhost-user --enable-modules \
--audio-drv-list=pa,alsa,sdl \
--usb-redir=all \
--with-pkgversion="My QEMU" \
--prefix=/usr/local/
这里只需要添加 --enable-modules
选项来启用 Linux 内核模块支持。
- 编译并安装 QEMU:
make -j$(nproc)
sudo make install
- 验证 QEMU 是否正确安装,同时查看是否支持外设:
qemu-system-arm --version
准备 Linux 内核镜像和根文件系统镜像(可以使用已有的镜像或自行制作)。
运行带有 SPI 外设支持的 ARM 虚拟机:
以 Raspberry Pi 3 为例,运行以下命令启动一个带有 SPI 外设支持的虚拟机:
qemu-system-arm -M raspi3 -kernel kernel.img -append 'root=/dev/vda2 panic=1' \
-drive file=raspbian.img,if=none,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \
-chardev socket,id=char1,path=/tmp/vhost-user-net \
-device virtio-net-device,netdev=mynet1 \
-device spidev-bus,spi-id=0,bus=id_of_spibus_on_target_device
这里使用了 -device spidev-bus
选项来添加 SPI 设备。其中 id_of_spibus_on_target_device
是目标设备上 SPI 总线的 ID,具体值根据实际情况进行设置。
参考文献:https://wiki.qemu.org/Documentation/Platforms/ARM#Compilation