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

转载:http://wiki.sylixos.com/index.php/Linux%E7%8E%AF%E5%A2%83%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97php

 

环境介绍

Win7 64 + Vmware 11 + ubuntu14.04 32linux

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

Linux kernel版本:linux-3.16.y网络

busybox版本:1_24_stable工具

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

 

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 后都须要手动执行一次上一条命令。
相关文章
相关标签/搜索