qemu使用踩坑
Table of Contents
编译qemu
./configure --target-list=aarch64-softmmu --enable-virtfs make -j8
Mac OS 不支持9Pfs
运行
qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -smp 4 -m 2048 --append "console=ttyAMA0" --kernel ~/work/src/linux.git/arch/arm64/boot/Image --initrd ~/work/buildroot-2018.05/output/images/rootfs.cpio.bz2 qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -smp 4 -m 2048 --append "console=ttyAMA0" --kernel aarch64-linux-3.16-buildroot-gdb.img -fsdev local,id=r,path=/home/schspa/work/src/signal-test,security_model=none -device virtio-9p-device,fsdev=r,mount_tag=r -s -S
文件共享
9P over virtiofs
9pfs是基于网络的文件共享协议,qemu中的软件可以通过此种方法来访问宿主机中的文件。详见Plan 9 9p remote filesystem protocol
qemu在Mac OS上不支持virtio,故无法使用以下的方法
参数设置:
针对宿主机
-fsdev local,id=shareid,path=/home/schspa/work/src/share,security_model=none
上述参数告诉QEMU要设置一个文件系统设备,使用本地的文件系统,id设置为shareid
针对客户机
-device virtio-9p-device,fsdev=shareid,mount_tag=share
上面的参数告诉向客户机添加一个设备,设备类型是virtio-9p-device,连接到设备shareid, 挂载时的tag为share
挂载共享文件夹
在客户系统启动时需要挂载共享的文件夹,上面已经显示出来mount_tag是share
挂载命令
mount -t 9p -o trans=virtio share /mnt/share
mount tag也可以通过sysfs来查看
/sys/bus/virtio/drivers/9pnet_virtio/virtio<n>/mount_tag
网络设置
linux Host
设置网络设备
#!/usr/bin/env bash sudo ip link add br0 type bridge sudo ip link set br0 up sudo ip addr add 192.168.123.1/24 broadcast 192.168.123.255 dev br0 sudo dnsmasq --strict-order --except-interface=lo --interface=br0 --listen-addr=192.168.123.1 --bind-interfaces --dhcp-range=192.168.123.101,192.168.123.254 --pid-file=/var/run/qemu-dhcp-br0.pid sudo ip tuntap add tap0 mod tap user $UID sudo ip link set dev tap0 up sudo ip link set dev tap0 master br0
卸载网络设备
#!/usr/bin/env bash sudo ip link set dev tap0 nomaster sudo ip link set tap0 down sudo ip tuntap del tap0 mod tap sudo ip link set br0 down sudo ip link delete br0 type bridge sudo kill $(cat /var/run/qemu-dhcp-br0.pid)
上述脚本添加了一个tap设备1,并使用dnsmasq网桥桥开启了dhcp,客户端启动之后即可自动获取ip地址。由于没有将实体网卡加入到br0的网桥之中,目前客户机系统还无法联网。
TODO Macos Host
qemu command line
-netdev tap,ifname=tap0,id=net0,script=no,downscript=no -device virtio-net-device,netdev=net0,mac=52:55:00:fa:ee:10