参考文档
用TAP方式让QEMU虚拟机与host联网
在tun.ko安装好后,要修改/etc/qemu-ifup, 我发现这个文件已经存在了,且都有执行权限,不知道是不是装qemu的时候安装好的。
把他的内容修改为
#!/bin/sh
/sbin/ifconfig $1 192.168.1.90
因为我的网络环境是网关是192.168.1.1,tap网口的ip设为192.168.1.90. 在随后的u-boot中,把他的ip设为同一网段内的ip即可,我的主机ip是192.168.1.101,qemu虚拟的versatilepb开发板的smsc91c111在u-boot中的ip设为192.168.1.91.
现在要打开tftp server
sudo /etc/ini.d/xinetd restart
确认我的/tftpboot目录下有bootrom.bin文件。
这时就可以启动qemu了。增加-net nic -net tap 命令
===
ldm@ldm-TOP2:/etc$ sudo qemu-system-arm -M versatilepb -nographic -net nic -net tap -kernel ~/binary/versatilepb-u-boot-201003.bin
U-Boot 2010.03 ( 8月 11 2011 - 17:06:03)
DRAM: 0 kB
## Unknown FLASH on Bank 1 - Size = 0x00000000 = 0 MB
Flash: 0 kB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: SMC91111-0
VersatilePB # set serverip 192.168.1.101
VersatilePB # set ipaddr 192.168.1.91
VersatilePB # tftp bootrom.bin
SMC91111: PHY auto-negotiate timed out
SMC91111: MAC 52:54:00:12:34:56
Using SMC91111-0 device
TFTP from server 192.168.1.101; our IP address is 192.168.1.91
Filename 'bootrom.bin'.
Load address: 0x7fc0
Loading: #####################
done
Bytes transferred = 299880 (49368 hex)
VersatilePB #
===
现在还有两个问题。
一个是执行qemu后,firefox就上不料网了。
先执行
sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.90/24 -j MASQUERADE
再执行qemu,就可以上网了。
据
http://hi.baidu.com/liu_bin0101/blog/item/b13cb0d97161772b10df9bcc.html
说,是router没有设置。
另一个是在主机ping 192.168.1.90能够ping通。但是ping虚拟板的192.168.1.91就ping不通。
小窍门1:
sudo qemu-system-arm -M versatilepb -nographic -net nic,vlan=0,macaddr=00:4c:4c:00:00:01 -net tap,vlan=0 -kernel ~/binary/versatilepb-u-boot-201003.bin
这条命令可以修改91c111的mac地址
小窍门2:
由于每次都要输入set ipaddr xxx; set serverip xxx,太麻烦了。
可以修改u-boot_maindir/include/configs/versatile.h
在源码中增加环境变量
#define CONFIG_IPADDR 192.168.1.91
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_SERVERIP 192.168.1.101
再 make distclean
make versatilepb_config
make
生成的新u-boot.bin就有ip的设定了。
小窍门3:
再在相同的文件里增加
#define CONFIG_BOOTCOMMAND "tftp 7C00000 bootrom.bin; go 7C00000"
然后
make versatile
生成的image就支持bootcmd了。
小窍门4:
tftp的时候,总会报“SMC91111: PHY auto-negotiate timed out”,修改相同文件,
#define CONFIG_SMC91111_EXT_PHY
重新编译u-boot能fix这个问题。
阅读(2506) | 评论(0) | 转发(0) |