VNT6656G无线网卡在mini2440 上的移植
2013-10-24 17:10
645 查看
这里是友善之臂提供的2.6.32.2内核 + VNT6656 WLAN源代码 1.20.03的编译和使用方法:
1.编译驱动模块
目前1.20.03版本的驱动源代码可以对2.6.32.2内核直接编译成功,无需修改。
1.a 从http://www.viaarena.com/Driver/VT6656_linux_src_v1.20.03_x86.rar 下载VNT6656驱动源代码并解压缩.(在Linux下你需要安装"unrar");
1.b 进入VT6656_linux_src_v1.20.03_x86/driver目录,执行
#make -C /path/to/source/of/linux-2.6.32.2 M=`pwd` modules
//上边的内核目录根据实际调整!
我的开发板对应的是 #make -C
/home/mini2440/linux-2.6.32.2 M=/home/usbwifi/VT6656_linux_src_v1.20.03_x86/driver modules
编译成功后,最终将生成驱动内核模块vntwusb.ko
2.使用驱动模块
2.a 将vntwusb.ko下载至开发板的/lib/modules下;
2.b 将VNT6656 USB无线网卡插入开发板的USB Host端口;
2.c 加载vntwusb.ko驱动模块
#insmod /path/to/vntwusb.ko //左边的驱动模块的目录根据实际调整!
2.d 可以看到无线网卡被识别:
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: New USB device found, idVendor=160a, idProduct=3184
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: VNT USB-802.11 Wireless LAN Adapter
usb 1-1: Manufacturer: VIA Networking Technologies, Inc.
usb 1-1: configuration #1 chosen from 1 choice
VIA Networking Wireless LAN USB Driver Ver. 1.20.03
VIA Networking Wireless LAN USB Driver Ver. 1.20.03
Copyright (c) 2004 VIA Networking Technologies, Inc.
usb 1-1: reset full speed USB device using s3c2410-ohci and address 3
usbcore: registered new interf
4000
ace driver vntwusb
2.e 无线网卡对于的网络设备接口通常是eth1或wlan0(eth0是开发板上的DM9000A网卡),用ifconfig命令将其设为UP状态:
#ifconfig eth1 up
可以用ifconfig和iwconfig看到其状态
[root@FriendlyARM plg]# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:12:7B:43:1C:21
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:403 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:18538 (18.1 KiB)
[root@FriendlyARM plg]# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 802.11-a/b/g ESSID:""
Mode:Managed Frequency=2.437 GHz Access Point: Not-Associated
Bit Rate:1 Mb/s Sensitivity=0/255
Retry min limit:8 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
vntwpa no wireless extensions.
======================
3.配置无线网卡
要正常使用无线网卡,还要正确配置。linux下的配置工具是wireless-tools。有个很好用的配置工具(wireless tool),可以方便配置无线网卡。
3.a 下载wire-tool工具
下载地址是:http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html (在下方找)。
3.a 编译工具
下载后,将源代码解压。再修改其中的Makefile文件,将其中的CC、AR和RANLIB进行修改:
#vi Makefile
CC = gcc
AR = ar
RANLIB = ranlib
改为
CC = arm-linux-gcc
AR = arm-linux-ar
RANLIB = arm-linux-ranlib
再执行
#make
3.b 下载wire-tool到开发板
编译完成后,将生成的iwconfig,iwlist文件拷贝到mini2440的根文件系统中的/bin目录下,将libiw.so.29拷贝到mini2440根文件系统下的/lib目录下。
3.c 启动无线网卡
启动mini2440开发板,进入linux命令行后,执行:
#ifconfig eth1 up //也可能是wlan0
3.d 搜索无线网路
启动无线网卡。再执行
#iwlist scanning
此命令可以搜索到可用的无线网络接入点。我搜索到的如下:
eth1 Scan completed :
Cell 01 - Address: 00:0A:EB:D4:D4:B6
ESSID:"TP-LINK" //无线连接名称
Mode:Managed
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=20/100 Signal level=-82 dBm Noise level=0 dBm
Encryption key:off //是否需要密码,如是on就需要密码
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
12 Mb/s; 24 Mb/s; 36 Mb/s; 9 Mb/s; 18 Mb/s
48 Mb/s; 54 Mb/s //速度支持
Extra:bcn_int=100
我的无线路由器ESSID是"TP-LINK",执行此命令后就会下列输出:
3.e设置联网密码:
#iwconfig eth1 key 123456 //如果没密码就无需执行
3.f 设置ESSID
用如下命令设置要连接的ESSID
#iwconfig eth1 essid "TP-LINK" //根据需要修改ESSID
3.g 加入无线网络
#iwconfig eth1 ap auto
3.h 查看连接状态
# iwconfig eth1
我的输出如下结果
eth1 802.11-a/b/g ESSID:"TP-LINK"
Mode:Managed Frequency=2.437 GHz Access Point: 00:0A:EB:D4:D4:B6
Bit Rate=5.5 Mb/s Sensitivity=-78 dBm
Retry min limit:8 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/100 Signal level:-78 dBm Noise level:0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:95 Invalid misc:0 Missed beacon:0
3.i 为无线网卡设置IP地址
#ifconfig eth1 192.168.1.130 netmask 255.255.255.0
3.j 测试网络是否连通
#ping 192.168.1.1
我的返回如下结果,可见无线网已经连通,而且很稳定。但我发现无线网卡很热,也许是网卡不好吧。
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=21.447 ms
64 bytes from 192.168.1.1: seq=1 ttl=64 time=3.166 ms
64 bytes from 192.168.1.1: seq=2 ttl=64 time=3.180 ms
64 bytes from 192.168.1.1: seq=3 ttl=64 time=3.300 ms
^C
--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 3.166/7.773/21.447 ms
3.k 无线联网的自动化
为了确保开发板系统启动无线网络就联通,可以建立一个脚本文件/etc/wireless.sh,内容如下:
#!/bin/sh
echo "Install wireless model ….."
insmod /lib/modules/vntwusb.ko #要提前将无线网模块文件复制好
ifconfig eth1 up
echo "wireless up ….."
#iwconfig eth1 key 123456 #根据需要设置
iwconfig eth1 essid "TP-LINK" #根据需要
iwconfig eth1 ap auto
ifconfig eth1 192.168.1.130 netmask 255.255.255.0
route add default gw 192.168.1.100
echo "wireless Linked ….."
route
注意修改其权限使之可以执行。
4. 配置网络
如果想让开发板通过无线网卡连入外网,一般配置默认网关和dns客户端即可。配置命令如下:
#vi /etc/resolv.conf //在其中添加dns客户端
#route add default gw IP //IP是无线路由上设定好的无线网卡上网的网关。一般默认都是192.168.1.1
#ping www.baidu.com //测试外网是否连通。
[B] 基于Linux2.6.37内核的移植
首先,需要修正内核代码:
================2.6.37========内核移植================================
1. 在drivers/main_usb.c中加入头文件(139行附近)
//============syd168===================
#include <linux/netdevice.h>
//=====================================
2. 替换如下代码,注释掉的被替换为黄色背景的(2067行附近):
static void device_set_multi(struct net_device *dev) {
PSDevice pDevice = (PSDevice)VNT_NETDEV_GET_PRIV(dev);
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
u32 mc_filter[2];
int ii;
//==================syd168===========
// struct dev_mc_list *mclist;
struct netdev_hw_addr *ha;
//=================================
3. 替换如下代码,注释掉的被替换为黄色背景的(2088行附近):
if (dev->flags & IFF_PROMISC) { // Set promiscuous.
DBG_PRT(MSG_LEVEL_ERR,KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name);
// Unconditionally log net taps.
pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST);
}
//==================syd168======================
// else if ((dev->mc_count > pDevice->multicast_limit) || (dev->flags & IFF_ALLMULTI)) {
else if ((netdev_mc_count(dev) > pDevice->multicast_limit) || (dev->flags & IFF_ALLMULTI)) {
//===============================
4. 注释掉如下代码(灰色背景部分),替换为黄色背景部分(2121行附近):
CONTROLnsRequestOut(pDevice,
MESSAGE_TYPE_WRITE,
MAC_REG_MAR0,
MESSAGE_REQUEST_MACREG,
8,
pbyData
);
pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST);
}
else {
memset(mc_filter, 0, sizeof(mc_filter));
//===============syd168==============================
netdev_for_each_mc_addr(ha, dev) {
int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
mc_filter[bit_nr >> 5] |= cpu_to_le32(1 << (bit_nr & 31));
}
//===================================================
接着,编译驱动模块。操作过程和2.6.32.2一样。
1.a 从http://www.viaarena.com/Driver/VT6656_linux_src_v1.20.03_x86.rar 下载VNT6656驱动源代码并解压缩.(在Linux下你需要安装"unrar");
1.b 进入VT6656_linux_src_v1.20.03_x86/driver目录,执行
#make -C /path/to/source/of/linux-2.6.37 M=`pwd` modules
//上边的内核目录根据实际调整!
编译成功后,最终将生成驱动内核模块vntwusb.ko
其余过程和2.6.32内核的移植过程一样。
2. ZD1211b USB无线网卡移植
[A] 内核配置项:
[*] Networking support --->
-*- Wireless --->
<*> cfg80211 - wireless configuration API
<*> Generic IEEE 802.11 Networking Stack (mac80211)
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<M> ZyDAS ZD1211/ZD1211B USB-wireless support (模块方式)
[B] 重新编译内核
#make
[C] 下载到板子中
编译完成后,将内核目录下drivers/net/wireless/zd1211rw/zd1211rw.ko下载到开发板d的/lib/modules/下。如果上面的选项选择非模块方式,就不需要下载。
重启开发板。插入无线网卡后,出现:
usb 1-1: USB disconnect, address 2
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice
usb 1-1: reset full speed USB device using s3c2410-ohci and address 3
zd1211rw 1-1:1.0: phy1
上面的信息表示:无线网卡已被识别。
然后,使用cat /proc/net/wireless 命令,显示:
wlan0: 0000 0 0 0 0 0 0 0 0 0
可以查看到系统中多了个wlan0网卡。此时,网卡还没工作。使用命令:
#ifconfig wlan0 up
出现firmware:requesting zd1211,然后没反应了。等半天最后显示:
Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 1-1.4:1.0: couldn't load firmware. Error number -2
ifconfig: SIOCSIFFLAGS: No such file or directory
这是因为没有firmware的原因。要使的系统在插入无线网卡的情况下能够正常启动,必须首先设置好固件才可!
[D] 下载固件(firmware)
从下载到zd1211 firmware 1.4后,根据firmware的说明,将其中的zd1211_*文件拷贝到开发板根文件系统/lib/firmware/zd1211目录中。(下面假设将下载的固件压缩包已经下载到开发板)
#tar -jxvf zd1211-firmware-1.4.tar.bz2
#cd zd1211-firmware
#mkdir -p /lib/firmware/zd1211
#cp zd1211_* /lib/firmware/zd1211
[E] 启用无限网卡
这里再执行如下命令
#ifconfig wlan0 up
则出现
zd1211rw 1-1.4:1.0: firmware version 4725
zd1211rw 1-1.4:1.0: zd1211b chip 0ace:1215 v4810 full 00-02-72 AL2230_RF pa0 g--NS
cfg80211: Calling CRDA for country: DE
表示网卡硬件开始正常工作了。其中,0ace:1215是网卡的ID,可以用主机linux系统命令lsusb查看到。
#lsusb
Bus 001 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 058f:9254
Bus 001 Device 003: ID 15d9:0a4c
Bus 001 Device 004: ID 0ace:1215
[F] 搜索无线网络
接下来的操作,需要用到无线网配置工具wire-tools。这里,假设wire-toos已经移植完成。具体移植方法请参考上面的例子!
#iwconfig 查看可用无线网卡,可以看到有wlan0
wlan0 IEEE 802.11bg ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
#iwlist scanning 搜索无线路由器信号
Cell 01 - Address: 00:0A:EB:D4:D4:B6
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=35/100 Signal level=35/100
Encryption key:off 无需密码
ESSID:"TP-LINK" 连接名
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
12 Mb/s; 24 Mb/s; 36 Mb/s
Bit Rates:9 Mb/s; 18 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=000000cd4a849700
Extra: Last beacon: 945ms ago
[G] 连接无线网络
如果无线连接需要密码,假设密码是123456。则首先使用如下的命令设置密码。如果没密码跳过即可。
#iwconfig wlan0 key 123456
为了能接无线网,还要使用下面的命令设置ESSID
#iwconfig wlan0 essid "TP-LINK"
其它的参数可以都采用默认的,不用再设了。可以使用下面的命令加入无线网了。
#iwconfig wlan0 ap auto
为无线网卡设置IP地址(笔者发现无法自动获取!)
#ifconfig wlan0 192.168.1.140 netmask 255.255.255.0
设置缺省路由(根据无线路由上的配置设置!)
#route add default gw 192.168.1.100
#route 确认网关配置是否正确
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.22.0 * 255.255.255.0 U 0 0 0
eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
default 192.168.1.100 0.0.0.0 UG 0 0 0 wlan0
在/etc/resolv.conf中添加dns服务器IP地址(可用的!),格式如下:
nameserver 10.8.10.244
测试网络是否连通:
#ping www.baidu.com
[root@syd168]#ping www.baidu.com
PING www.baidu.com (61.135.169.125): 56 data bytes
64 bytes from 61.135.169.125: seq=0 ttl=49 time=29.655 ms
64 bytes from 61.135.169.125: seq=1 ttl=49 time=106.592 ms
表示已经连通!
[H] 配置过程自动化
如果需要在启动的时候自动加入无线网络,可以将前面的配置过程写成脚本(如/etc/wlan0.sh),以后,只要执行此脚本,即可完成上述步骤的配置。脚本文件内容如下。
#!/bin/sh
insmod /lib/modules/zd1211rw.ko
ifconfig wlan0 up
#iwconfig wlan0 key 123456
iwconfig wlan0 essid "TP-Link"
iwconfig wlan0 ap auto
ifconfig wlan0 192.168.1.140 netmask 255.255.255.0
route
1.编译驱动模块
目前1.20.03版本的驱动源代码可以对2.6.32.2内核直接编译成功,无需修改。
1.a 从http://www.viaarena.com/Driver/VT6656_linux_src_v1.20.03_x86.rar 下载VNT6656驱动源代码并解压缩.(在Linux下你需要安装"unrar");
1.b 进入VT6656_linux_src_v1.20.03_x86/driver目录,执行
#make -C /path/to/source/of/linux-2.6.32.2 M=`pwd` modules
//上边的内核目录根据实际调整!
我的开发板对应的是 #make -C
/home/mini2440/linux-2.6.32.2 M=/home/usbwifi/VT6656_linux_src_v1.20.03_x86/driver modules
编译成功后,最终将生成驱动内核模块vntwusb.ko
2.使用驱动模块
2.a 将vntwusb.ko下载至开发板的/lib/modules下;
2.b 将VNT6656 USB无线网卡插入开发板的USB Host端口;
2.c 加载vntwusb.ko驱动模块
#insmod /path/to/vntwusb.ko //左边的驱动模块的目录根据实际调整!
2.d 可以看到无线网卡被识别:
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: New USB device found, idVendor=160a, idProduct=3184
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: VNT USB-802.11 Wireless LAN Adapter
usb 1-1: Manufacturer: VIA Networking Technologies, Inc.
usb 1-1: configuration #1 chosen from 1 choice
VIA Networking Wireless LAN USB Driver Ver. 1.20.03
VIA Networking Wireless LAN USB Driver Ver. 1.20.03
Copyright (c) 2004 VIA Networking Technologies, Inc.
usb 1-1: reset full speed USB device using s3c2410-ohci and address 3
usbcore: registered new interf
4000
ace driver vntwusb
2.e 无线网卡对于的网络设备接口通常是eth1或wlan0(eth0是开发板上的DM9000A网卡),用ifconfig命令将其设为UP状态:
#ifconfig eth1 up
可以用ifconfig和iwconfig看到其状态
[root@FriendlyARM plg]# ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:12:7B:43:1C:21
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:403 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:18538 (18.1 KiB)
[root@FriendlyARM plg]# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 802.11-a/b/g ESSID:""
Mode:Managed Frequency=2.437 GHz Access Point: Not-Associated
Bit Rate:1 Mb/s Sensitivity=0/255
Retry min limit:8 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
vntwpa no wireless extensions.
======================
3.配置无线网卡
要正常使用无线网卡,还要正确配置。linux下的配置工具是wireless-tools。有个很好用的配置工具(wireless tool),可以方便配置无线网卡。
3.a 下载wire-tool工具
下载地址是:http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html (在下方找)。
3.a 编译工具
下载后,将源代码解压。再修改其中的Makefile文件,将其中的CC、AR和RANLIB进行修改:
#vi Makefile
CC = gcc
AR = ar
RANLIB = ranlib
改为
CC = arm-linux-gcc
AR = arm-linux-ar
RANLIB = arm-linux-ranlib
再执行
#make
3.b 下载wire-tool到开发板
编译完成后,将生成的iwconfig,iwlist文件拷贝到mini2440的根文件系统中的/bin目录下,将libiw.so.29拷贝到mini2440根文件系统下的/lib目录下。
3.c 启动无线网卡
启动mini2440开发板,进入linux命令行后,执行:
#ifconfig eth1 up //也可能是wlan0
3.d 搜索无线网路
启动无线网卡。再执行
#iwlist scanning
此命令可以搜索到可用的无线网络接入点。我搜索到的如下:
eth1 Scan completed :
Cell 01 - Address: 00:0A:EB:D4:D4:B6
ESSID:"TP-LINK" //无线连接名称
Mode:Managed
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=20/100 Signal level=-82 dBm Noise level=0 dBm
Encryption key:off //是否需要密码,如是on就需要密码
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
12 Mb/s; 24 Mb/s; 36 Mb/s; 9 Mb/s; 18 Mb/s
48 Mb/s; 54 Mb/s //速度支持
Extra:bcn_int=100
我的无线路由器ESSID是"TP-LINK",执行此命令后就会下列输出:
3.e设置联网密码:
#iwconfig eth1 key 123456 //如果没密码就无需执行
3.f 设置ESSID
用如下命令设置要连接的ESSID
#iwconfig eth1 essid "TP-LINK" //根据需要修改ESSID
3.g 加入无线网络
#iwconfig eth1 ap auto
3.h 查看连接状态
# iwconfig eth1
我的输出如下结果
eth1 802.11-a/b/g ESSID:"TP-LINK"
Mode:Managed Frequency=2.437 GHz Access Point: 00:0A:EB:D4:D4:B6
Bit Rate=5.5 Mb/s Sensitivity=-78 dBm
Retry min limit:8 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/100 Signal level:-78 dBm Noise level:0 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:95 Invalid misc:0 Missed beacon:0
3.i 为无线网卡设置IP地址
#ifconfig eth1 192.168.1.130 netmask 255.255.255.0
3.j 测试网络是否连通
#ping 192.168.1.1
我的返回如下结果,可见无线网已经连通,而且很稳定。但我发现无线网卡很热,也许是网卡不好吧。
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=21.447 ms
64 bytes from 192.168.1.1: seq=1 ttl=64 time=3.166 ms
64 bytes from 192.168.1.1: seq=2 ttl=64 time=3.180 ms
64 bytes from 192.168.1.1: seq=3 ttl=64 time=3.300 ms
^C
--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 3.166/7.773/21.447 ms
3.k 无线联网的自动化
为了确保开发板系统启动无线网络就联通,可以建立一个脚本文件/etc/wireless.sh,内容如下:
#!/bin/sh
echo "Install wireless model ….."
insmod /lib/modules/vntwusb.ko #要提前将无线网模块文件复制好
ifconfig eth1 up
echo "wireless up ….."
#iwconfig eth1 key 123456 #根据需要设置
iwconfig eth1 essid "TP-LINK" #根据需要
iwconfig eth1 ap auto
ifconfig eth1 192.168.1.130 netmask 255.255.255.0
route add default gw 192.168.1.100
echo "wireless Linked ….."
route
注意修改其权限使之可以执行。
4. 配置网络
如果想让开发板通过无线网卡连入外网,一般配置默认网关和dns客户端即可。配置命令如下:
#vi /etc/resolv.conf //在其中添加dns客户端
#route add default gw IP //IP是无线路由上设定好的无线网卡上网的网关。一般默认都是192.168.1.1
#ping www.baidu.com //测试外网是否连通。
[B] 基于Linux2.6.37内核的移植
首先,需要修正内核代码:
================2.6.37========内核移植================================
1. 在drivers/main_usb.c中加入头文件(139行附近)
//============syd168===================
#include <linux/netdevice.h>
//=====================================
2. 替换如下代码,注释掉的被替换为黄色背景的(2067行附近):
static void device_set_multi(struct net_device *dev) {
PSDevice pDevice = (PSDevice)VNT_NETDEV_GET_PRIV(dev);
PSMgmtObject pMgmt = &(pDevice->sMgmtObj);
u32 mc_filter[2];
int ii;
//==================syd168===========
// struct dev_mc_list *mclist;
struct netdev_hw_addr *ha;
//=================================
3. 替换如下代码,注释掉的被替换为黄色背景的(2088行附近):
if (dev->flags & IFF_PROMISC) { // Set promiscuous.
DBG_PRT(MSG_LEVEL_ERR,KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name);
// Unconditionally log net taps.
pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST);
}
//==================syd168======================
// else if ((dev->mc_count > pDevice->multicast_limit) || (dev->flags & IFF_ALLMULTI)) {
else if ((netdev_mc_count(dev) > pDevice->multicast_limit) || (dev->flags & IFF_ALLMULTI)) {
//===============================
4. 注释掉如下代码(灰色背景部分),替换为黄色背景部分(2121行附近):
CONTROLnsRequestOut(pDevice,
MESSAGE_TYPE_WRITE,
MAC_REG_MAR0,
MESSAGE_REQUEST_MACREG,
8,
pbyData
);
pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST);
}
else {
memset(mc_filter, 0, sizeof(mc_filter));
//===============syd168==============================
netdev_for_each_mc_addr(ha, dev) {
int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
mc_filter[bit_nr >> 5] |= cpu_to_le32(1 << (bit_nr & 31));
}
//===================================================
接着,编译驱动模块。操作过程和2.6.32.2一样。
1.a 从http://www.viaarena.com/Driver/VT6656_linux_src_v1.20.03_x86.rar 下载VNT6656驱动源代码并解压缩.(在Linux下你需要安装"unrar");
1.b 进入VT6656_linux_src_v1.20.03_x86/driver目录,执行
#make -C /path/to/source/of/linux-2.6.37 M=`pwd` modules
//上边的内核目录根据实际调整!
编译成功后,最终将生成驱动内核模块vntwusb.ko
其余过程和2.6.32内核的移植过程一样。
2. ZD1211b USB无线网卡移植
[A] 内核配置项:
[*] Networking support --->
-*- Wireless --->
<*> cfg80211 - wireless configuration API
<*> Generic IEEE 802.11 Networking Stack (mac80211)
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<M> ZyDAS ZD1211/ZD1211B USB-wireless support (模块方式)
[B] 重新编译内核
#make
[C] 下载到板子中
编译完成后,将内核目录下drivers/net/wireless/zd1211rw/zd1211rw.ko下载到开发板d的/lib/modules/下。如果上面的选项选择非模块方式,就不需要下载。
重启开发板。插入无线网卡后,出现:
usb 1-1: USB disconnect, address 2
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice
usb 1-1: reset full speed USB device using s3c2410-ohci and address 3
zd1211rw 1-1:1.0: phy1
上面的信息表示:无线网卡已被识别。
然后,使用cat /proc/net/wireless 命令,显示:
wlan0: 0000 0 0 0 0 0 0 0 0 0
可以查看到系统中多了个wlan0网卡。此时,网卡还没工作。使用命令:
#ifconfig wlan0 up
出现firmware:requesting zd1211,然后没反应了。等半天最后显示:
Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 1-1.4:1.0: couldn't load firmware. Error number -2
ifconfig: SIOCSIFFLAGS: No such file or directory
这是因为没有firmware的原因。要使的系统在插入无线网卡的情况下能够正常启动,必须首先设置好固件才可!
[D] 下载固件(firmware)
从下载到zd1211 firmware 1.4后,根据firmware的说明,将其中的zd1211_*文件拷贝到开发板根文件系统/lib/firmware/zd1211目录中。(下面假设将下载的固件压缩包已经下载到开发板)
#tar -jxvf zd1211-firmware-1.4.tar.bz2
#cd zd1211-firmware
#mkdir -p /lib/firmware/zd1211
#cp zd1211_* /lib/firmware/zd1211
[E] 启用无限网卡
这里再执行如下命令
#ifconfig wlan0 up
则出现
zd1211rw 1-1.4:1.0: firmware version 4725
zd1211rw 1-1.4:1.0: zd1211b chip 0ace:1215 v4810 full 00-02-72 AL2230_RF pa0 g--NS
cfg80211: Calling CRDA for country: DE
表示网卡硬件开始正常工作了。其中,0ace:1215是网卡的ID,可以用主机linux系统命令lsusb查看到。
#lsusb
Bus 001 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 058f:9254
Bus 001 Device 003: ID 15d9:0a4c
Bus 001 Device 004: ID 0ace:1215
[F] 搜索无线网络
接下来的操作,需要用到无线网配置工具wire-tools。这里,假设wire-toos已经移植完成。具体移植方法请参考上面的例子!
#iwconfig 查看可用无线网卡,可以看到有wlan0
wlan0 IEEE 802.11bg ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
#iwlist scanning 搜索无线路由器信号
Cell 01 - Address: 00:0A:EB:D4:D4:B6
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=35/100 Signal level=35/100
Encryption key:off 无需密码
ESSID:"TP-LINK" 连接名
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
12 Mb/s; 24 Mb/s; 36 Mb/s
Bit Rates:9 Mb/s; 18 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=000000cd4a849700
Extra: Last beacon: 945ms ago
[G] 连接无线网络
如果无线连接需要密码,假设密码是123456。则首先使用如下的命令设置密码。如果没密码跳过即可。
#iwconfig wlan0 key 123456
为了能接无线网,还要使用下面的命令设置ESSID
#iwconfig wlan0 essid "TP-LINK"
其它的参数可以都采用默认的,不用再设了。可以使用下面的命令加入无线网了。
#iwconfig wlan0 ap auto
为无线网卡设置IP地址(笔者发现无法自动获取!)
#ifconfig wlan0 192.168.1.140 netmask 255.255.255.0
设置缺省路由(根据无线路由上的配置设置!)
#route add default gw 192.168.1.100
#route 确认网关配置是否正确
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.22.0 * 255.255.255.0 U 0 0 0
eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
default 192.168.1.100 0.0.0.0 UG 0 0 0 wlan0
在/etc/resolv.conf中添加dns服务器IP地址(可用的!),格式如下:
nameserver 10.8.10.244
测试网络是否连通:
#ping www.baidu.com
[root@syd168]#ping www.baidu.com
PING www.baidu.com (61.135.169.125): 56 data bytes
64 bytes from 61.135.169.125: seq=0 ttl=49 time=29.655 ms
64 bytes from 61.135.169.125: seq=1 ttl=49 time=106.592 ms
表示已经连通!
[H] 配置过程自动化
如果需要在启动的时候自动加入无线网络,可以将前面的配置过程写成脚本(如/etc/wlan0.sh),以后,只要执行此脚本,即可完成上述步骤的配置。脚本文件内容如下。
#!/bin/sh
insmod /lib/modules/zd1211rw.ko
ifconfig wlan0 up
#iwconfig wlan0 key 123456
iwconfig wlan0 essid "TP-Link"
iwconfig wlan0 ap auto
ifconfig wlan0 192.168.1.140 netmask 255.255.255.0
route
相关文章推荐
- 信息系统项目管理师之一关键路径分析
- 关于inittab的解读(以RedHat版本为例
- shell 换行问题
- Android平台开发-Android keypad map-Android按键事件
- 博奥教育职业技能实训平台2.0 免激活教程 破解
- 第六章:数据结构基础。第一部分
- [转载]为什么开发人员工作10多年了还会迷茫?没有安全感?@http://bbs.csdn.net/topics/390458270
- 为什么卧式砂磨机使用寿命长
- 黑马程序员:String 的常用方法
- Ubuntu下用命令行快速打开各类型文件
- poj Layout 差分约束+SPFA
- 【伪】我现在好辉煌....
- 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
- 求最大公约数
- Android移植libcurl和libsqlite3
- Sql Server 2005 实现Oracle 10g 的hash表分区功能
- JAVA解析数学公式的API
- unity3d 游戏对象消失三种方法的区别(enabled/Destroy/active)
- java.util.Properties读取中文内容的配置文件,发生中文乱码的现象有解决方案
- C#事件、委托简单示例