WN322G+ 使用ZD1211b芯片,BT3内核已包含该芯片的驱动,可还是有不少人反映用lsusb能够看到网卡的信息,但Ifconfig -a 却没有该网卡,既然有驱动为什么用不了?

在网上搜寻多时,终于发现一点信息,但无条件测试,欢迎有条件的XD能测试一下给个答复。

一、原因:
       WN322G+无法在BT3下使用,应该是因为BT3中所带的ZD1211b驱动中没有内置WN322G+的USB ID所致,造成无法识别。

二、解决办法:
      重新下载ZD1211b芯片的Linux驱动源码,修改并将WN322G+的ID加入到源码中,然后编译并加载。

三、所需条件:
      完整安装的Linux,内核为2.6.21.5(这是我的BT3光盘的内核版本)。作为ZD1211b驱动的编译环境,应该包含有Linux的内核源码,而且核心版本与BT3的完全一样,我在光盘版BT3下编译时无法找到所需文件;

四、具体步骤(8月27日更正:新的驱动里已经包含WN322G+的ID,所以跳过c、d步骤即可)
      a)从网上下载ZD1211b的Linux驱动源码(http://www.reactivated.net/software/zd1211-vendor/releases/ZD1211LnxDrv_2_22_0_0.tar.gz),并在2.6内核环境下用tar解开;
      b)进入解开的源码目录,修改makefile文件:
        找到下面这句,
         # set to 1 for zd1211b
         ZD1211REV_B=0
        修改为:
        # set to 1 for zd1211b
        ZD1211REV_B=1
      c)再修改src/下面的zdusb.c文件,在相应位置添加WN322G+的ID:
         加入如下行:
         { USB_DEVICE(0x0ACE, 0x1215) } 

 

 

之前在2.4的kernel上编译了zd1211b的驱动和配套的wpa_supplicant。现在早已改用2.6.15,同样的事情需要再做一次。现在在PC的linux里使用无线设备,compat-wireless驱动包(包含了相当多的无线设备)+wpa_supplicant工具包是一个很好的选择,所以移植这两个包看上去不错。但不幸的是这个方案对kernel的版本是有要求的,>=26.22。在比较古老的2.6.15上要使用这个方案的话,估计得干不少活,不是一日之功。所以还是得针对具体的芯片一个一个来移植驱动和工具,先搞zd1211b,再搞rt73usb。

    zd1211b这个芯片在我的smp8634系统里是最先被支持,在2.4 kernel上驱动的移植我记录过,在2.6.15下也并不复杂,而且编译好的驱动使用稳定性也有很大的提高。先去这里下载最新的驱动:http://zd1211.wiki.sourceforge.net/VendorDriver,最新的是ZD1211LnxDrv_2_22_0_0.tar.gz,解包编译。先修改Makefile:
...
HOST=mipsel-linux-
CC=$(HOST)gcc
LD=$(HOST)ld
#KERN_VER=$(shell uname -r | cut -b1-3;)
#KDIR := /lib/modules/$(shell uname -r)/build
KERN_VER=2.6
KDIR := $(UCLINUX_KERNEL)
PWD := $(shell pwd)

SUBDIRS=.
include .config
include $(SUBDIRS)/.config

#ifeq ($(KERN_VER), 2.6)
    KERN_26=y
    KERNEL_SOURCE=$(UCLINUX_KERNEL)
#else
#    KERN_24=y
#    KERNEL_SOURCE=/usr/src/linux-2.4
#endif

SRC_DIR=src
DEFINES=-D__KERNEL__ -DMODULE=1

#KERNRELEASE := $(shell uname -r;)
#MODPATH := /lib/modules/$(KERNRELEASE)
KERNRELEASE := 2.6.15
MODPATH := /bak/sigma172/wifi/ZD1211LnxDrv_2_22_0_0/modules

...

    然后make,应该会很顺利的看到zd1211b.ko。

    如果系统中已经包含了wireless_tools,那么使用WEP认证的网络就已经没问题了。有时候wireless_tools如果版本有点低的话经常会有警告信息,移除这个只需要去下载个最新的wireless_tools.29.tar.gz自己编译下就好。

# tar xzvf wireless_tools.29.tar.gz
# cd wireless_tools.29
# vi Makefile


    修改Makefile:
## Compiler to use (modify this for cross compile).
CC = mipsel-linux-gcc
## Other tools you need to modify for cross compile (static lib only).
AR = mipsel-linux-ar
RANLIB = mipsel-linux-ranlib


    然后make即可。

    如果要加入WPA的认证支持,那么还需要移植wpa_supplicant。zd1211b并没有包含在官方的wpa_supplicant包里(估计以后也不会了,因为已经有更好的办法了支持这些个了)。仍然需要下载个专用的wpa_supplicant_0.4.7_zydas.tar.gz,除了我以前提到的修改Makefile,更靠谱的办法是创建和修改.config。

# cp defconfig .config
# vi .config


    主要是要有这两行:
CC=mipsel-linux-gcc
CONFIG_DRIVER_ZYDAS=y


    其他的配置项看情况选择,有的是需要openssl库支持的,不过openssl库编译也很简单。下面是我使用的配置文件,去除注释版的:
CC=mipsel-linux-gcc 
CONFIG_DRIVER_HOSTAP=y 
CONFIG_DRIVER_ZYDAS=y 
CONFIG_DRIVER_WIRED=y 
CONFIG_IEEE8021X_EAPOL=y 
CONFIG_EAP_MD5=y 
CONFIG_EAP_MSCHAPV2=y 
CONFIG_EAP_TLS=y 
CONFIG_EAP_PEAP=y 
CONFIG_EAP_TTLS=y 
CONFIG_EAP_GTC=y 
CONFIG_EAP_OTP=y 
CONFIG_EAP_LEAP=y 
CONFIG_PKCS12=y 
CONFIG_SMARTCARD=y 
CONFIG_CTRL_IFACE=y


    不少配置项我也不知道是啥意思,大部分应该是加密方式,应该还可以精简,具体可以看看defconfig里的注释。如果你的openssl已经包含在你的交叉编译器中,那么接下来应该很容易就可以make成功,把wpa_supplicant和wpa_cli拷贝到目标机上就可以开始测试了。为了防止同之后其他芯片的专用wpa_supplicant混淆,可以改名为wpa_supplicant.zydas、wpa_cli.zydas。还可以写个脚本自动来使用wpa_supplicant.zydas来配置网络,分享我简陋的脚本:

#! /bin/sh
if [ -z $1 ];
then
    exit -1
fi
CONFIG_FILE=/mnt/usr/etc/wpa.conf
echo "ctrl_interface=/var/run/wpa_supplicant">$CONFIG_FILE
echo "ctrl_interface_group=0">>$CONFIG_FILE
echo "eapol_version=1">>$CONFIG_FILE
echo "ap_scan=1">>$CONFIG_FILE
echo "network={">>$CONFIG_FILE
echo " ssid=\"$2\"">>$CONFIG_FILE
echo " psk=\"$3\"">>$CONFIG_FILE
echo "}">>$CONFIG_FILE

ifconfig $1 up
wpa_supplicant.zydas -B -Dzydas -i$1 -c$CONFIG_FILE


        
         注:我的WN322G+的USB Vendor为0ACE,USB Product为1215,这是在BT3下看到的,(Linksys WUSBF54G 为:13b1、0024)
      
      d)修改src/下面的zdusb.h文件,在相应位置添加下面两行:
        #define VENDOR_TPLink 0x0ACE
        #define PRODUCT_TPLink 0x1215
        
      e)make
      
      f)将编译后生成的zd1211b.ko(好像是这个)复制出来,加入到BT3的系统中(用U盘?或者加入到BT3d的ISO中),启动BT3加载编译好的驱动并测试(也许会需要网上提到的firware加载,)。      
      
此法不保证能够一定成功,但成功的机会还是很大,可能有什么地方没注意到,大家一起讨论吧。当然,如果您成功了,不妨将编译好的驱动发上来共享^_^


8月27日更正:
作为ZD1211b驱动的编译环境,应该包含有Linux的内核源码,而且核心版本与BT3的完全一样,我的BT3内核版本为2.6.21.5。

http://www.reactivated.net/software/zd1211-vendor/releases/ZD1211LnxDrv_2_22_0_0.tar.gz 的驱动较新(我开始下载的不是这个),发现里面已经有了WN322G+ ID,这样就省了很多事,不用修改文件,直接make ZD1211REV_B=1 或单修改makefile文件,在开头部分加入ZD1211REV_B=1就可以了。

Logo

更多推荐