在Ubuntu下使用QEMU连网
目的
在ubuntu下运行QEMU,并进行连网。
准备工作
首先要在ubuntu下下载rtt源码,并使用 qemu-vexpress-a9 BSP。根据官方文档 www.rt-thread.org/document/si… 将QEMU运行起来。如下所示。
但是此时的qume不能上网。在qemu中 ping 不通
ifconfig(获取到的 IP 地址时 10.0.x.x
说明没有添加启动参数,详见下面的 修改qemu.sh 添加参数)
我们通过添加一个虚拟网卡,并将网卡桥接到 PC 上进行上网。以下是详细的步骤。
ifconfig查看信息
显示或配置网络设备(网络接口卡)。(ens33,172.16.85.128)
添加tap虚拟网卡
添加虚拟网卡有好几种方法【详见 blog.csdn.net/White_Idiot…】,这里我们添加tap虚拟网卡。
添加虚拟网卡TAP,首先请先加载 tun 模块:modprobe tun
安装 uml-utilities:
使用 tunctl
添加虚拟网卡: sudo tunctl -b
,该命令会生成一个TAP,后缀会从0开始递增(如tap0、tap1):
激活创建的TAP:sudo ip link set tap0 up
,之后就可以使用 ifconfig 命令查看 tap网卡的信息了。使用ifconfig后,会发现比之前多了一个tap0网卡。
修改qemu.sh
在qemu.sh文件中追加参数 -net nic -net tap,ifname=tap0
,后保存qemu.sh文件。
net nic
这个是必须的参数,表明这是一个网卡的配置-net tap
使用tap模式ifname=tap0
tap网卡名tap0
桥接
新建网桥 br0,将tap0网卡桥接到PC的网卡(ens33,172.16.85.128)上:
- 获取桥接工具:sudo apt install bridge-utils
- 生成网桥 br0 :sudo brctl addbr br0
- 将 ens33 加入网桥【brctl addif add interface to bridge】:sudo brctl addif br0 ens33
- 将 ens33 的 ip 信息配置到br0中:sudo ifconfig br0 172.16.85.128
- 如果是dhcp则使用:sudo dhclient br0
- 将tap0加入到br0中【brctl addif add interface to bridge】:sudo brctl addif br0 tap0
运行qemu
执行 sudo ./qemu.sh 运行 QEMU
可以ping通,ifconfig也有ip信息了。
创建共享文件夹(qemu虚拟机&宿主机)
1. xml和命令创建的qemu
qemu-kvm虚拟机与宿主机之间实现文件传输,主要是使用网络来进行,一般是qemu在创建虚拟机时在xml中配置好标签然后通过ssh的scp远程拷贝命令实现。
<interface type='network'>
<source network='default'/>
<model type='virtio'/>
</interface>
但在某些情况下,qemu不是以xml创建的虚拟机,而是以纯命令创建的虚机。这就只能手动配置宿主机和虚拟机之间的网络,需要先在宿主机上配置网络桥接,然后在qemu-kvm启动时配置网卡。除了这种方式外,还可以配置共享文件夹,它也可以实现简单的虚拟机和宿主机之间的文件传输,尤其适合少量的大文件,接下来介绍其配置方法。
2. 宿主机上操作
- 使用dd创建一个4G大小的文件,作为虚拟机和宿主机之间传输桥梁
dd if=/dev/zero of=/opt/share.img bs=4M count=1k
- 格式化share.img文件:
mkfs.ext4 /opt/share.img
- 创建一个共享文件夹并挂载:
mkdir /tmp/share
mount -o loop /opt/share.img /tmp/share
- 把需要传输给虚拟机的文件放到/tmp/share 下即可:
cp stress.xxx.rpm tmp/share
3. 虚拟机操作
- 启动qemu-kvm虚拟机时,额外添加上 -hdb /opt/share.img参数:
/usr/libexec/qemu-kvm -m 4G -smp 4 -name bcl-qemu --enable-kvm -boot cd -hda /root/linux.qcow2 -hdb /opt/share.img -vnc :1
- 在虚拟机中lsblk查看本地磁盘是否挂载上宿主机的/opt/share.img,可以看到虚机多了一个sdb,且大小正好是之前创建/opt/share.img的4G
3. 创建/root/share文件夹,作为虚拟机的挂载点
mkdir /root/share
- 以同样的文件格式ext4挂载刚刚添加的/dev/sdb硬盘:
mount -t ext4 /dev/sdb /root/share
-
通过访问/root/share文件夹即可以获得宿主机上放在/tmp/share文件夹下的文件
-
若宿主机重新往共享文件夹下添加文件,就在虚拟机中先卸载/dev/sdb然后再挂载以实时共享(直接用mount -o remount /dev/sdb重新挂载/dev/sdb测试不成功)
umount /dev/sdb
mount -t ext4 /dev/sdb /root/share