基于arm\\Linux平台USB无线网卡的wifi驱动移植-usa9002-ChinaUnix博客
时间:2022-11-17 02:30:00
arm三星2440平台,Linux内核是2.6.24,威盛VNT6656的USB无线网卡;开发平台是Fedora10,
内核是2.6.27.遇到问题如下:
1、驱动程序的版本是错误的
开始在网上找一个VNT6656的Linux驱动程序,直接在本地机器上编译。结果错误太多,一批又一批。主要问题是结构
体”不 是的,你必须开始CFLAGS全部换成EXTRA_CFLAGS。最后,驱动程序版本可能存在问题。
到 下载最新的
驱动: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 up