likes
comments
collection
share

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

作者站长头像
站长
· 阅读数 29

在Ubuntu下使用QEMU连网

目的

ubuntu下运行QEMU,并进行连网。

准备工作

首先要在ubuntu下下载rtt源码,并使用 qemu-vexpress-a9 BSP。根据官方文档 www.rt-thread.org/document/si…  将QEMU运行起来。如下所示。

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

但是此时的qume不能上网。在qemu中 ping 不通

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

ifconfig(获取到的 IP 地址时 10.0.x.x 说明没有添加启动参数,详见下面的 修改qemu.sh 添加参数) 

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

我们通过添加一个虚拟网卡,并将网卡桥接到 PC 上进行上网。以下是详细的步骤。

ifconfig查看信息

显示或配置网络设备(网络接口卡)。(ens33,172.16.85.128)

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

添加tap虚拟网卡

添加虚拟网卡有好几种方法【详见 blog.csdn.net/White_Idiot…】,这里我们添加tap虚拟网卡。

添加虚拟网卡TAP,首先请先加载 tun 模块:modprobe tun

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

安装 uml-utilities:

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

 使用 tunctl 添加虚拟网卡: sudo tunctl -b,该命令会生成一个TAP,后缀会从0开始递增(如tap0、tap1):

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

激活创建的TAP:sudo ip link set tap0 up ,之后就可以使用 ifconfig 命令查看 tap网卡的信息了。使用ifconfig后,会发现比之前多了一个tap0网卡。

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

修改qemu.sh

在qemu.sh文件中追加参数 -net nic -net tap,ifname=tap0 ,后保存qemu.sh文件。

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

  • net nic 这个是必须的参数,表明这是一个网卡的配置
  • -net tap 使用tap模式
  • ifname=tap0 tap网卡名tap0

桥接

新建网桥 br0,将tap0网卡桥接到PC的网卡(ens33,172.16.85.128)上:

  1. 获取桥接工具:sudo apt install bridge-utils
  2. 生成网桥 br0 :sudo brctl addbr br0
  3. 将 ens33 加入网桥【brctl addif     add interface to bridge】:sudo brctl addif br0 ens33
  4. 将 ens33 的 ip 信息配置到br0中:sudo ifconfig br0 172.16.85.128
  5. 如果是dhcp则使用:sudo dhclient br0
  6. 将tap0加入到br0中【brctl addif     add interface to bridge】:sudo brctl addif br0 tap0

运行qemu

执行 sudo ./qemu.sh 运行 QEMU

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

可以ping通,ifconfig也有ip信息了。

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

创建共享文件夹(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. 宿主机上操作

  1. 使用dd创建一个4G大小的文件,作为虚拟机和宿主机之间传输桥梁

dd if=/dev/zero of=/opt/share.img bs=4M count=1k

  1. 格式化share.img文件:

mkfs.ext4 /opt/share.img

  1. 创建一个共享文件夹并挂载:

   mkdir /tmp/share

   mount -o loop /opt/share.img /tmp/share

  1. 把需要传输给虚拟机的文件放到/tmp/share 下即可:

   cp  stress.xxx.rpm  tmp/share

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

3. 虚拟机操作

  1. 启动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

  1. 在虚拟机中lsblk查看本地磁盘是否挂载上宿主机的/opt/share.img,可以看到虚机多了一个sdb,且大小正好是之前创建/opt/share.img的4G

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

 3. 创建/root/share文件夹,作为虚拟机的挂载点

mkdir /root/share

  1. 以同样的文件格式ext4挂载刚刚添加的/dev/sdb硬盘:

mount -t ext4 /dev/sdb /root/share

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

  1. 通过访问/root/share文件夹即可以获得宿主机上放在/tmp/share文件夹下的文件

  2. 若宿主机重新往共享文件夹下添加文件,就在虚拟机中先卸载/dev/sdb然后再挂载以实时共享(直接用mount -o remount /dev/sdb重新挂载/dev/sdb测试不成功)

umount /dev/sdb

mount -t ext4 /dev/sdb /root/share

在Ubuntu下使用QEMU连网(不能ssh,但可以共享文件夹)

转载自:https://juejin.cn/post/7268539503908257792
评论
请登录