您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: