其他分享
首页 > 其他分享> > 从0开始使用QEMU模拟ARM开发环境之QEMU利用桥接联网

从0开始使用QEMU模拟ARM开发环境之QEMU利用桥接联网

作者:互联网

文章目录

从0开始使用QEMU模拟ARM开发环境系列一览表:

从0开始使用QEMU模拟ARM开发环境系列一览表

QEMU网络功能配置

为了 让 QEMU 能够与主机 建立网络连接,采用桥接的网络连接与Host通信(需要主机内核tun/tap模块支持)

QEMU中的网络,包含两部分的内容

  1. 客户机使用的虚拟网络设备
  2. 和上述虚拟设备通信的网络后端,这些后端负责把虚拟设备的数据包发到宿主机的网络中

QEMU 两种上网方式(不同的网络后端):

user mode network :

这种方式实现虚拟机上网很简单,类似vmware里的nat,qemu启动时加入-user-net参数,虚拟机里使用dhcp方式,即可与互联网通信,但是这种方式虚拟机与主机的通信不方便。

tap/tun network :

这种方式要比user mode复杂一些,但是设置好后 虚拟机<–>互联网 虚拟机<–> 主机 通信都很容易

这种方式设置上类似vmware的host-only,qemu使用tun/tap设备在主机上增加一块虚拟网络设备(tun0),然后就可以象真实网卡一样配置它。

TAP后端与脚本

QEMU的TAP后端利用宿主机的TAP设备,为客户机提供完整的桥接网络支持,如果外部需要使用标准端口连接到客户机, 或者多个客户机需要相互通信,可以使用该方式。 TAP后端还具有以下优势:

  1. 非常好的性能
  2. 可以配置以支持各种网络拓扑

但是,你需要在宿主机上进行网络拓扑的配置,而且各种系统的配置不同。

主机安装工具包:

sudo apt-get install uml-utilities bridge-utils -y

使用TAP后端前,需要确认你的宿主机的内核支持TAP网络接口: /dev/net/tun 文件存在则说明支持。

ls /dev/net
输出
tun

如果没有这样的文件,可以尝试手工创建:

sudo mkdir /dev/net
sudo mknod /dev/net/tun c 10 200
sudo /sbin/modprobe tun

修改网络配置文件(重启生效)

sudo vi /etc/network/interfaces
或者
sudo gedit /etc/network/interfaces

添加以下内容,注意 根据自己的实际情况 修改 bridge_ports

auto br0
iface br0 inet dhcp
bridge_ports ens33
# ens33 通过ifconfig 查看的网卡

重启网络使生效

sudo service networking restart

添加qemu有关系统脚本

在**/etc/qemu-ifup**文件中添加以下内容

#!/bin/sh

echo sudo tunctl -u $(id -un) -t $1

sudo tunctl -u $(id -un) -t $1
echo sudo ifconfig $1 0.0.0.0 promisc up
sudo ifconfig $1 0.0.0.0 promisc up
echo sudo brctl addif br0 $1
sudo brctl addif br0 $1
echo brctl show
brctl show

sudo ifconfig br0 192.168.100.101
# 根据自己的实际情况修改 IP地址,注意:uboot 中的 CONFIG_SERVERIP(serverip) 要跟这里一样 见后面

在**/etc/qemu-ifdown**文件中添加以下内容

#!/bin/sh

echo sudo brctl delif br0 $1
sudo brctl delif br0 $1
echo sudo tunctl -d $1
sudo tunctl -d $1
echo brctl show
brctl show

给上面的脚本添加执行权限

sudo chmod +x /etc/qemu*

QEMU启动关闭会自动调用 qemu-ifup 与 /etc/qemu-ifdown

在这里插入图片描述

QEMU启动参数修改

qemu参数大全

启动参数添加

-net nic -net tap

将开发板网卡和主机网卡建立桥接(Bridge)

测试验证

创建环境,参加

从0开始使用QEMU模拟ARM开发环境之uboot通过tftp加载uImage并指定nfs挂载根文件系统

从0开始使用QEMU模拟ARM开发环境之uboot通过sd卡加载uImage

从0开始使用QEMU模拟ARM开发环境之定制Ubuntu rootfs(根文件系统)

比如通过uboot通过sd卡加载uImage,创建修改其中 start_qemu 脚本为

#!/bin/bash
if [ "$1" ];then
    echo $1
else
    echo "请传入制作好的镜像"
    exit 1
fi
sudo qemu-system-arm -M vexpress-a9 -m 1024M -smp 1 -nographic -kernel u-boot -net nic -net tap -sd $1

运行 ./start_qemu rootfs.ext4启动系统。

在这里插入图片描述

ping www.baidu.com

在这里插入图片描述

模拟器中ifconfig

在这里插入图片描述

主机查看网桥信息
在这里插入图片描述

主机 ping www.baidu.com 会失败

在这里插入图片描述

退出qemu虚拟机,自动运行**/etc/qemu-ifdown**,手动下发命令重启网络

在这里插入图片描述

sudo service networking restart

主机再次 ping www.baidu.com 成功

在这里插入图片描述

希望我的文章对于大家有帮助,由于个人能力的局限性,文中可能存在一些问题,欢迎指正、补充!

标签:桥接,QEMU,sudo,echo,brctl,net,qemu,ARM
来源: https://blog.csdn.net/leacock1991/article/details/114002541