ok6410如何驱动NW336无线网卡.更新zd1211b到kernel 2.6.15上.成功在Linux下安装TP-LINK TL-WN322G+ 54M无线USB网卡驱动
WN322G+ 使用ZD1211b芯片,BT3内核已包含该芯片的驱动,可还是有不少人反映用lsusb能够看到网卡的信息,但Ifconfig -a 却没有该网卡,既然有驱动为什么用不了?在网上搜寻多时,终于发现一点信息,但无条件测试,欢迎有条件的XD能测试一下给个答复。一、原因: WN322G+无法在BT3下使用,应该是因为BT3中所带的ZD1211b驱动中没有内置W
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就可以了。
更多推荐
所有评论(0)