1、运行多个qemu模拟开发板,每个开发板就对应需要一个tap设备作为网络设备,使用同一个tap设备会冲突,导致qemu模拟启动失败。
修改qemu启动命令,不使用ifname=tap0参数指定固定的网络设备为tap0,同时需要指定srcipt和downscript的脚本路径,分别为qemu-ifup脚本和qemu-ifdown脚本的路径。
qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot -nographic -net nic -net tap,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
2、qemu-ifup脚本
#!/bin/sh
br0_exist_flag=`ifconfig|grep -ci "br0"`
if [ $br0_exist_flag -eq 0 ];then
sudo brctl addbr br0
sudo ifconfig br0 192.168.1.100 netmask 255.255.255.0 up
sudo route add -net 192.168.1.0 netmask 255.255.255.0 br0
sudo route add default gw 192.168.1.1 br0
fi
sudo tunctl -t $1 -u root
sudo ifconfig $1 up
sudo brctl addif br0 $1
因为可以多个tap设备接入到同一个虚拟网桥br0上,只需要一个br0即可,所以脚本中会检测系统中是否已经存在br0,若存在就不再创建。
3、qemu-ifdown脚本
#!/bin/sh
sudo ifconfig $1 down
sudo brctl delif br0 $1