免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2637 | 回复: 0
打印 上一主题 下一主题

ARM s3c2410上zd1211b无线网卡驱动 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-30 21:35 |只看该作者 |倒序浏览

    由于项目需要,要在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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP