在Ubuntu 10.04中配置qemu虚拟网络
内核支持需要对TUN/TAP设备和虚拟网桥提供支持:
(1)Device Drivers
--> Network device support
--> Universal TUN/TAP device driver support
(2)Networking support
--> Networking options
--> 802.1d Ethernet Bridging
安装两个配置网络所需软件包:
apt-get install bridge-utils # 虚拟网桥工具
apt-get install uml-utilities # UML(User-mode linux)工具
配置虚拟网桥的操作(假设系统启动后eth0已经启动,并且从DHCP获得IP地址)。
ifconfig eth0 down # 先关闭eth0接口
brctl addbr br0 # 增加一个虚拟网桥br0
brctl addif br0 eth0 # 在br0中添加一个接口eth0
brctl stp br0 off # 只有一个网桥,所以关闭生成树协议
brctl setfd br0 1 # 设置br0的转发延迟
brctl sethello br0 1 # 设置br0的hello时间
ifconfig br0 0.0.0.0 promisc up # 打开br0接口
ifconfig eth0 0.0.0.0 promisc up # 打开eth0接口
dhclient br0 # 从dhcp服务器获得br0的IP地址
brctl show br0 # 查看虚拟网桥列表
brctl showstp br0 # 查看br0的各接口信息
在没有dhcp服务器的网络中也可以用ifconfig命令为br0接口配置一个静态IP地址:
ifconfig br0 192.168.0.22 netmask 255.255.255.0
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.0.254
配置TAP设备的操作:
tunctl -t tap0 -u root # 创建一个tap0接口,只允许root用户访问
brctl addif br0 tap0 # 在虚拟网桥中增加一个tap0接口
ifconfig tap0 0.0.0.0 promisc up # 打开tap0接口
brctl showstp br0 # 显示br0的各个接口
假设内核的顶层目录在/usr/src/linux,且内核已经编译完毕。启动qemu的操作:
cd /usr/src/linux
qemu -kernel arch/x86/boot/bzImage -net nic -net tap,ifname=tap0,script=no,downscript=no
如果省略script和downscript参数,qemu在启动时会以第一个不存在的tap接口名(通常是tap0)为参数去调用/etc/qemu-ifup脚本,而在退出时调用/etc/qemu-ifdown脚本。这两个脚本需要用户自行编写,其主要作用通常是:在启动时创建和打开指定的TAP接口,并将该接口添加到虚拟网桥中;退出时将该接口从虚拟网桥中移除,然后关闭该接口。由于配置TAP设备的操作前面已经做过了,所以启动qemu时显式地告诉qemu不要执行这两个脚本。这里需要严重注意:-net tap的各参数之间不要有空格!为了这个问题花了半个小时 :-(。
为了在系统启动时能够自动配置虚拟网桥和TAP设备,编写/etc/network/interfaces文件的内容如下:
auto lo
iface lo inet loopback
# The eth0 network interface(s)
# auto eth0
# iface eth0 inet dhcp
# The bridge network interface(s)
auto br0
iface br0 inet dhcp
# iface br0 inet static
# address 192.168.0.1
# netmask 255.255.255.0
# gateway 192.168.0.254
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
# The tap0 network interface(s)
auto tap0
iface tap0 inet manual
# iface tap0 inet static
# address 192.168.0.2
# netmask 255.255.255.0
# gateway 192.168.0.254
pre-up tunctl -t tap0 -u root
pre-up ifconfig tap0 0.0.0.0 promisc up
post-up brctl addif br0 tap0
注意:此时应该将配置文件中的eth0关闭(相应的文本行注释掉)。
制作arm64虚拟机
下载QEMU_EFI.fd
http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/
生成虚拟机镜像
qemu-img create ubuntu18.04-arm64.img 20G
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu-18.04.3-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=ubuntu18.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0
启动虚拟机
sudo qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 4 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu18.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0 -net nic -net tap,ifname=tap1,mac=52:54:00:12:34:57,script=no,downscript=no