资讯详情

基于arm\Linux平台USB无线网卡的wifi驱动移植

arm三星2440平台,Linux内核是2.6.24,威盛VNT6656的USB无线网卡;开发平台是Fedora10,内核是2.6.27.遇到问题如下:

1、驱动程序的版本是错误的

开始在网上找一个VNT6656的Linux直接在本地机器上编译驱动程序。结果错误太多,改了一批,主要问题是很多结构不是 是的,你必须开始CFLAGS全部换成EXTRA_CFLAGS。最后,驱动程序版本可能存在问题。到http://www.viaarena.com/下载最新驱动:http://www.viaarena.com/Driver/VT6656_Linux_src_v1.19_12_x86.zip 。以前的驱动是1.13版本的。根本问题是驱动说明文档没有仔细阅读,初始版本根本不支持fedora10。

那两个驱动有什么区别呢?原因在于,在Linux2.6.在24后的核心中,网络部分发生了变化,网络部分的重要结构发生了变化。第一个驱动必须基于2.6.24前内核。比如,struct sk_buff,这里可以看到文章中提到的具体差异《Professional Linux Kernel Architecture》你可以网上下一下,真的很好,内容包含2.6.24以后比较新的内容。

二、编译驱动模块

驱动程序是直接编译成模块的make本地机器上的驱动器编译顺利,生成vntwusb.ko本地机器可成功加载,使用正常,窃喜。接 下来把Makefie里面的CC、LD交叉编译工具的变量设置为arm-linux-gcc、arm-linux-ld。继续make,又出错了,具体错了 忘了。正确的方法是,make -C $(KERNEL_DIR) M=$(MODULE_DIR) ,-C指名内核所在文件夹,不写就默认。本地机器上的内核是默认的,本人机器的默认内核是/usr/src/kernels /2.6.27.5-117.fc10.i686,肯定不行。M对模块所在路径进行编译。实际命令是

make -C /media/Study/temp/utu-Linux2.6.24_for_utu2440_2009-03-15 M=/media/Study/temp/VT6656_Linux_src_v1.19_12_x86/driver。

继续编译仍然是错误的,因为Makefile还没改好。把Makefile里的KSRC变量直接赋值KSRC=/media/Study/temp /utu-Linux2.6.24_for_utu2440_2009-03-15,Makefile里面还有KSP直接删除所有捣乱变量。 make 添加选项时,

KSRC=/media/Study/temp/utu-Linux2.6.24_for_utu2440_2009-03-15

,不加好像不行,郁闷。。。继续编译,会在那里。ioctl.c line:298 出现段错误segmentation fault,注释此行

// pList->sBSSIDList[ii].wBeaconInterval = pBSS->wBeaconInterval;

这样,我们就可以得到我们需要的vntwusb.ko。不解的是,按照本地机器的内核编译没有问题。

三、还要编译内核

在板上加载驱动模块时,Unknown symbol in module”的错误。原板预装的核心没有wifi也即802.11模块的。回想起来,编译结束时也打印了警告信息,说是wireless send event 没有注册等等。。重新编译内核时,可以直接找到板默认配置文件wireless部分更改,更改文件名称.config作为默认配置.make menuconfig当然也可以。改动如下:

#

# Wireless

#

CONFIG_CFG80211=y

CONFIG_NL80211=y

CONFIG_WIRELESS_EXT=y

CONFIG_IEEE80211=y

# CONFIG_IEEE80211_DEBUG is not set

CONFIG_IEEE80211_CRYPT_WEP=y

# CONFIG_IEEE80211_CRYPT_CCMP is not set

# CONFIG_IEEE80211_CRYPT_TKIP is not set

# CONFIG_RFKILL is not set

编译内核,下载到板子里。

四、板上如何使用无线网卡?

前提,USB Host需要安装驱动器。加载vntw6656.ko模块成功后,驱动程序包中需要使用无线网卡wetctl编译工具,修改 Makefile直接make就行,编译好了考到板子的/sbin/里。此外,程序包中还有一个脚本文件,可以根据需要更改。 DESIRED_SSID=“TestAP新建的无线连接名称,BSSTYPE=adhoc,建立点对点adhoc其他网络可以找到网络。加 入附件的网络,把

/sbin/wetctl $DEVICE join \

infra\ #BSSTYPE类型

“ChianNet” \ ##想要连接的无线网络名称

11 \ #channel

$PSMODE \

$AUTHTYPE

改掉几个选项就行了。也可以直接使用wetctl几个命令

wetctl eth1 [scan、link 、list、 join等]

ifconfig 两个个命令

ifconfig eth1 192.168.1.110

ifconfig eth1 up0b1331709591d260c1c78e86d0c51c18.png

标签: pbss4140t晶体管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台