轉載:http://wiki.sylixos.com/index.php/Linux%E7%8E%AF%E5%A2%83%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97
環境介紹
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 后都需要手動執行一次上一條命令。