Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155575
  • 博文数量: 38
  • 博客积分: 687
  • 博客等级: 上士
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 10:48
文章分类

全部博文(38)

文章存档

2019年(1)

2016年(1)

2014年(5)

2013年(1)

2012年(8)

2011年(17)

2010年(2)

2009年(3)

我的朋友

分类: 嵌入式

2011-08-15 22:00:33

参考文档
用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) |
给主人留下些什么吧!~~