环境介绍

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的配置中:

qemu img创建镜像 qemu镜像可上网版_qemu img创建镜像


可以看到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 后都需要手动执行一次上一条命令。