XMU->九天揽月->五湖抓鳖->DSP->driver->kernel/OpenWRT->ISP/RTOS
分类: LINUX
2014-09-18 12:00:42
接上:http://blog.chinaunix.net/uid-27057175-id-4479852.html
编译好的wvr300_factory.bin下载到路由器上,网络不能使用。
查看Rootfs根目录/etc/config/network当前使用的网络配置。
root@OpenWrt:/etc/config# cat /etc/config/network
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config interface 'lan'
option ifname 'eth0'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
config interface 'wan'
option ifname 'eth1'
option proto 'dhcp'
所以wvr300现在的网络配置:eth0被当作lan,eth1被当作wan了,br-lan桥接eth0。这样测试wan口有4个而lan口只有1个,恰好就把面板的顺序反过来了,实际上就是lan wan与eth 0 1的对应关系颠倒了。正确的配置应该是eth0为wan,eth1为lan,br-lan桥接eth1。
所以得看lan wan和eth的配置是如何来的,/etc/config/network是如何生成的?
在openwrt工程下搜索 grep –Rn –exclude-dir=.svn “etc/config/network” ./
得到target/linux/ar71xx/base-files/etc /uci-defaults/network这个脚本创建network配置
[ -e /etc/config/network ]&& exit 0
touch /etc/config/network #### 有则ret,无则创建
. /lib/functions/uci-defaults.sh
. /lib/ar71xx.sh #### 引用脚本,定义了函数和变量
ucidef_set_interface_loopback ###### loopback interface
board=$(ar71xx_board_name)
case "$board" in /// 下面是枚举board,按board 配置 lan wan switch
…
tl-wr841n-v8)
ucidef_set_interfaces_lan_wan "eth1" "eth0"
ucidef_add_switch "switch0" "1" "1"
ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
;;
…
所以根据board来分别配置lan wan,
board 取自ar71xx_board_name(),搜索ar71xx_board_name()定义来自 target/linux/ar71xx/base-files/lib/ar71xx.sh,并且依赖于/tmp/sysinfo/board_name,再依赖于ar71xx_board_detect()。
ar71xx_board_detect()函数中从/proc/cpuinfo中取出machine名称,再进行匹配即可得board_name,并把name存储到/tmp/sysinfo/board_name,根源到此,原生openwrt里面没有WVR300机型,故这里就只能用默认配置。
解决办法:
target/linux/ar71xx/base-files/lib/ar71xx.sh
ar71xx_board_detect()新增
*"TP-LINK TL-WVR300")
name="tl-wvr300"
;;
target/linux/ar71xx/base-files/etc/uci-defaults/network 新增
tl-wvr300)
ucidef_set_interfaces_lan_wan "eth1" "eth0"
ucidef_add_switch "switch0" "1" "1"
ucidef_add_switch_vlan "switch0" "1" "0 1 2 3 4"
;;
重新编译得到wvr300镜像,验证网络配置正确了。