zd1211 在Ubuntu 10.04 LTS上的 master mode 的实现

手上有一个 tiscali 的USB网卡,即大名鼎鼎的”神卡”,这个卡除了能作为一般的b/g无线网卡之外,还能设置成软AP。

zd1211rw:

Ubuntu 10.04 LTS内含了zd1211的驱动,称为 zd1211rw。这个驱动并不是由厂家提供的,而是一个rewrite的驱动。

rw的驱动在linux 2.1.18-rc1之后就内置了,一般的用户可以无须自己去找驱动,就能用上 zd1211或 zd1211b的无线网卡。但是,rw版本的驱动程序不再提供对AP功能的支持,当使用 sudo iwconfig wlan0 mode master 指令时,报错 :

Error for wireless request “Set Mode” (8B06) :SET failed on device wlan0 ; Invalid argument.

查阅 ubuntu的文档 (https://help.ubuntu.com/community/WifiDocs/MasterMode) ,里面有提及如何实现 zd1211的master mode 的建议: 使用VendorBasedDriver。

VendorBasedDriver:

要使用VendorBasedDriver,需要找到一个合适版本的驱动源码,重新编译加载。按图索骥,从ubuntu document上,首先就找到

实际上这个版本并不能解决问题,甚至连编译都不能完成。有兴趣的朋友可以试试。

因为这个版本不能成功编译,我只能继续在网上寻找,找到一个更新的zd1211源代码。

上提供了很新的zd1211源码,据称其代码能完成在 2.6.33上的编译。但是随代码并没有提供完整的说明,我这样的新人仍然没法成功编译从open1211上获得的源码,又一次失败。

编译失败的原因,估计是因为linux内核版本的提高,使源码对内核的声明、引用等不再适用而引起,为了解决这个问题,我改变了在google上的搜索方式,尝试在Linux论坛上寻找解决方法。

@lists.sourceforge.net/msg01760.html

在这上面有关于 zd1211 在linux 2.6.31上编译失败的讨论。从这里算是找到了问题的基本的解决方法。顺便一提的是,这个地址被墙了,要翻一下才能看到的。

因为讨论还是挺长篇的,我就不复制上来了,找关键的地方说。

Hin-Tak Leung(看名字好像是一位香港人)对 zd1211的源码做了patch。要实现zd1211在高版本的Linux内核上编译,就需要对旧版本的源码进行 Patch。 Hin-Tak Leung一共做了2个版本的Patch: ar2524-3.0.0.56 和 zd1211-2.22.0 。ar2524是zd1211的一个衍生版本,同样是使用 ZyDAS zd1211芯片,因此驱动程序是可以互通的。

我们可以在 上下载对应版本的patchset。在 上能下载ar2524-3.0.0.56的驱动源码。可惜我找不到 ZD1211LnxDrv_2_22_0_0的驱动。

编译:

首先要确定自己的linux的版本:uname -r ,然后

apt-cache search linux-source:

jx@jx-laptop:~$ apt-cache search linux-sourcelinux-source – Linux kernel source with Ubuntu patcheslinux-source-2.6.32 – Linux kernel source for version 2.6.32 with Ubuntu patches

下载安装内核源代码

sudo apt-get install linux-source-2.6.32 用apt-get 这个下载不了,后来在ubunto官网下载了 linux-source-2.6.32_2.6.32-22.36_all.debsudo ipkg -i linux-source-2.6.32_2.6.32-22.36_all.debcd /usr/srcsudo tar jxvf linux-source-2.6.32.tar.bz2生成文件夹 linux-source-2.6.32把下载获得的 ar2524-3.0.0.56 和对应的patch解压缩,并用 pacth 命令进行源码patch,如patch < 0001-xxxx 这样。记得要在 src文件夹里面进行patch操作,不然会出错。Patch一共有11个,从0001到0012,其中 0004是坏的。据说是0004原本太大了,被分拆了。有兴趣的朋友可以自己搜索一下。Patch之后,准备工作基本上就完成了,为了确认网卡是不是在ar2524的支持范围里面,我要检查一下。插入网卡,然后lsusb,看看网卡的ID:Bus 001 Device 008: ID 0ace:1211 ZyDAS 802.11bg记下 Id后面信息: 0ace 1211 (每个人的网卡可能都会不一样的)。然后进入 srv文件夹, vi zdusb.c ,找到 看看你的网卡的ID是不是在里面,如果没有,加进去。加进去的时候要区分: zd1211b和zd1211是不同的,要看清楚再加。修改完,保存,退出。编译前还有一个工作要做(其实也可以在编译后做),就把原本的zd1211rw给blacklist了: sudo vi /etc/modprobe.d/blacklist.conf ,在最后加入 blacklist zd1211rw 。接着sudo rm /lib/firmware/zd1211/zd* ,把 zd1211rw的firmware也删掉。当然,最好先备份一下,以免以后后悔了。blacklist之后,reboot一下。OK,可以编译了:在 ar2524drv 文件夹下运行:sudo make期间有大量 warning,直接忽略吧。。。眼不见为干净。记住要用sudo make,不要就make,不然还要手工进行安装 zd1211.ko等等。完了?完了。插卡吧。Dmesg:[ 183.789784] usb 1-1: new high speed USB device using ehci_hcd and address 2[ 183.967465] usb 1-1: configuration #1 chosen from 1 choice[ 183.998424] [ 183.998442] _________ _ ____[ 183.998453] |__ / _| _ \ / \ / ___|[ 183.998495] / / | | | | | |/ _ \ \___ \[ 183.998506] / /| |_| | |_| / ___ \ ___) |[ 183.998517] /____\__, |____/_/ \_\____/[ 183.998526]|___/[ 183.998538] zd1211 – version 3.0.0.56[ 184.000173] vendor_id = 0ace[ 184.000195] product_id = 1211[ 184.000219] USB 2.0 Host[ 184.001956] Release Ver = 4330[ 184.002434] EEPORM Ver = 4330[ 184.015447] Finsih download Firmware. Ready to reboot [ 184.301238] PA type: 0[ 184.305927] RFMD RF[ 184.781297] Overwrite CR47 = 0x1E[ 184.861737] zd1205_config: EEP(HWFeature)=0x110[ 184.868787] AllowedChannel = 000107ff[ 184.868852] Region:16[ 185.980995] usbcore: registered new interface driver zd1211由于每个人的网卡不一样,这里面可能有些信息会不相同。到现在,网卡的编译和加载就完成了。但是因为编译过程是有很多warning的,不知道驱动能不能用。用 iwconfig 看看:很好,貌似加载正常。关键的是要试试 master mode,如果不行,就白忙了:用无线网卡搜索一下,能找到一个很奇怪名字的接入点。嘿,,成功了!还有,没完呢!还没验证,还没完全把AP配好。不过,至少master mode 能实现了。BTW:还是想找一个能把warning都解决了的方法。。。

征服畏惧、建立自信的最快最确实的方法,

zd1211 在Ubuntu 10.04 LTS上的 master mode 的实现

相关文章:

你感兴趣的文章:

标签云: