Chinaunix
标题:
ARM s3c2410上zd1211b无线网卡驱动
[打印本页]
作者:
piaoyizu
时间:
2009-12-30 21:35
标题:
ARM s3c2410上zd1211b无线网卡驱动
由于项目需要,要在ARM S3c2410上使用无线网卡,我使用的芯片是zd1211b。而要使用它,首先就得驱动,针对arm s3c2410开发板,针对linux内核进行驱动。
先是准备驱动的源代码。在
http://zd1211.wiki.sourceforge.net/VendorBasedDriver
下载源代码。
一直以前都是在使用博创公司开发板自带的linux 2.4内核及其根文件系统。已经用习惯了这个内核,而且主要问题是2.6内核需要很繁琐的重新编译。所以第一想法就是在Linux 2.4内核下能够驱动多好。但是上网查挺多资料,挺多人都说2.4内核不支持。我先是编译成功了2.6内核下的zd1211b无线网卡的驱动。
1.2.6内核下驱动编译步骤如下。
驱动的交叉编译修改非常简单,在其Makefile中修改交叉编译器,然后把相应的KERNEL_SOURCE,MODPATH,KDIR,均改成你目标板的内核目录,例如,我们的Makefile做的相关改动为:
CC=arm-linux-gcc
CPP=arm-linux-g++
LD=arm-linux-ld
MODPATH :=/weili/linux-2.6.14/
KERNEL_SOURCE=/weili/linux-2.6.14/
ZD1211REV_B=1
KDIR :=/weili/linux-2.6.14/
然后make,将生成的zd1211b.ko复制到开发板上insmod后就可以正确识别出我们的无线网卡了。
insmod时如果出现 Unknown symbol wireless_send_event错误,是因为内核中缺少对无线网络的支持,请在内核配置时加上 'CONFIG_NET_RADIO=y' and CONFIG_NET_WIRELESS=y'.或者,
进入内核目录,运行make menuconfig
,选择【device driver】→【Networking support】→【Wireless LAN】→【Wireless LAN drivers & Wireless Extensions】,重新编译内核即可。
【但是我make后会有一个错误,说src/zd1205.c中7799行param在wrp中未定义。wrp是struct iwreq 的定义。经过查找,struct iwreq 是在/内核/include/linux/wireless.h中定义的。找到struct iwreq 定义部分,看其中真没有对param的定义,于是加上了对它的定义:struct iw_param param;之后make成功生成zd1211b.ko。注:我使用的交叉编译器是arm-linux-gcc 3.4.1】
接下来是无线网络的配置。因为我们的项目要求两个目标板进行无线网络通讯,所以要把两个无线网卡配置成点对点访问模式。首先在两个开发板上配置两个无线网卡的模式,iwconfig wlan0 mode master和iwconfig wlan0 mode manager,master模式,它将建立一个无线访问点,用iwconfig查看时,会显示其access point为自己的MAC,然后配置ip和essid.(ip要在一个网段上,essid配置成相同)
ifconfig wlan0 192.168.0.7 ,iwconfig wlan0 essid weili此时它们将自动建立连接,并且可查看到已连接到无线访问点access point上的无线网卡mac。
2.
带着怀疑的态度又尝试着
针对2.4内核的编译。
MODPATH :=/weili/kernel-2410s/
KERNEL_SOURCE=/weili/kernel-2410s/
ZD1211REV_B=1
KDIR :=/weili/kernel-2410s/
但是,make之后出现非常非常多的错误。不过仔细观察这些错误就发现,都是在
src/zd1205.c中,说是
IWEVCUSTOM 、 IW_MODE_MONITOR 等之类的未定义。经查找发现IWEVCUSTOM 、 IW_MODE_MONITOR之类的宏定义是在 /内
核/include/linux/wireless.h
中进行的定义,而2.6内核下有IWEVCUSTOM 、 IW_MODE_MONITOR对其的定义,2.4内核下的wireless.h中却没有。于是对比着2.6内核的头定义,对2.4内核下的wireless.h进行修改。(我就是把没定义的从2.6内核下给粘过去的)#define IWEVCUSTOM 0x8C02 #define IW_MODE_MONITOR 6 ,等等,根据编译错误还有其它的一些未定义的也进行修改。并且也有2.6内核下编译出现的param错误,也做前边所说的修改。然后make,成功生成zd1211b.o。移植到2.4内核下的开发板上insmod出现错误:Unknown symbol wireless_send_event,跟2.6内核一样,应该是内核中应该加入无线网卡支持,修改内核的menuconfig,重新烧写内核,结果错误变成:
Using zd1211b.o
insmod: error reading ELF section data: No such file or directory
insmod: Could not load the module: No such file or directory。也一直没找到解决的方法。
有可能是2.4内核根本就不支持zd1211b这款无线网卡吧。
/******************************若要转载,请注明出处***********************************/
本文来自ChinaUnix博客,如果查看原文请点:
http://blog.chinaunix.net/u/25572/showart_2135921.html
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2