文章目录
从0开始使用QEMU模拟ARM开发环境系列一览表:
QEMU网络功能配置
为了 让 QEMU 能够与主机 建立网络连接,采用桥接的网络连接与Host通信(需要主机内核tun/tap模块支持)
QEMU中的网络,包含两部分的内容
- 客户机使用的虚拟网络设备
- 和上述虚拟设备通信的网络后端,这些后端负责把虚拟设备的数据包发到宿主机的网络中
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后端还具有以下优势:
- 非常好的性能
- 可以配置以支持各种网络拓扑
但是,你需要在宿主机上进行网络拓扑的配置,而且各种系统的配置不同。
主机安装工具包:
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启动参数修改
启动参数添加
-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 成功
希望我的文章对于大家有帮助,由于个人能力的局限性,文中可能存在一些问题,欢迎指正、补充!