用Qemu模拟vexpress-a9 --- 配置 qemu 的网络功能_Qemu


 ​

 

环境介绍

Win7 64 + Vmware 11 + ubuntu14.04 32

u-boot 版本:u-boot-2015-04

Linux kernel版本:linux-3.16.y

busybox版本:1_24_stable

交叉编译工具链:arm-linux-gnueabi-

 

qemu 支持多种网络链接方式,其中最常用的就是桥接(bridge)。 这需要依赖内核的 tun/tap 模块的支持。

  • 输入如下命令安装必要的工具包:



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


  • 输入如下命令查看 /dev/net/tun 文件:



ls -l /dev/net/tun 
crw-rw-rwT 1 root root 10, 200 Apr 15 02:23 /dev/net/tun

如果该文件存在,这表明内核已经支持开启了 tun 支持,在 ubuntu-12.04 中,这个功能默认已经开启。 如果该文件不存在,则需要加载 tun 模块,并创建 /dev/net/tun 文件。

  • 修改 /etc/network/interfaces 文件,笔者的文件内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):



# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#NetworkManager#iface eth0 inet dhcp
# 经过试验发现,由于我用的是虚拟机,添加了三块虚拟网卡eth0对应的是NAT连接方式,eth2对应的是桥接方式,如果
# 将虚拟机的VMnet8和VMnet1禁止掉的话,eth2就不能工作,此时下面如果是bridge_ports eth2的话,qemu就无法联网了
# 但是发现eth0让然可用,所以这里设置了bridge_ports eth0.

auto br0
iface br0 inet dhcp
bridge_ports eth0


  • 添加 /etc/qemu-ifup 和 /etc/qemu-ifdown 脚本。

默认情况下,当 qemu 使用 tap 设备时,会执行 /etc/qemu-ifup 和 /etc/qemu-ifdown 这两个脚本。 我们需要创建这两个脚本,然后为它们加上可执行权限(使用chmod +x)。 创建 /etc/qemu-ifup 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):


#!/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.11.20

这里需要说明一下,由于我的虚拟机上eth0对应的是NAT连接方式,在VMware的配置中:

可以看到eth0的地址是在192.168.11.0网段,所以将br0也设置在192.168.11.0网段。 创建 /etc/qemu-ifdown 脚本,内容如下所示(示例文件位于 /home/user/sylixos_workspace/qemu-mini2440/ubuntu-12.04 目录):


#!/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

输入如下命令为 /etc/qemu-ifup 和 /etc/qemu-ifdown 脚本加上可执行权限:


chmod +x /etc/qemu-ifup
chmod +x /etc/qemu-ifdown


  • 最后需要重启计算机,使新的 /etc/network/interfaces 配置文件生效。

 

  运行测试:



./qemu-system-arm ......  -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

如果出现如下信息:


warning: could not configure /dev/net/tun: no virtual network emulation
Could not initialize device 'tap'

那么先手动执行如下命令:


/etc/qemu-ifup tap0

注意:不可使用 sudo 执行上一条命令,每次启动 ubuntu 后都需要手动执行一次上一条命令。