admin管理员组

文章数量:1532201

2023年12月25日发(作者:)

USB无线网卡的Linux驱动移植* 赵秋亮,李良儿,刘玉良 (浙江海洋学院机电工程学院,舟山316000) 引 言 C0MFAST CF一150NS USB无线网卡使用 成。具体配置:PC操作系统为VMware Workstation5.5 &RedHat 9.0(Linux 2.4.20);硬件为优龙YLE2440开 发板;操作系统为Linux 2.6.12.7,安装位置为/test/ yle2440—IEEE802.11n无线技术,无线传输速率最高达150 Mbps。 相比传统的54 Mbps IEEE802.11g产品,拥有更高的无 线带宽,让局域网内的数据传输更加高效,能有效地减少 网络延迟,使语音视频、网络游戏、在线点播更流畅。 CF一150NS还使用了CCA(Clear Channel Assessment)空 2.6.12;交叉编译器为gcc3.4.1,安装位置为/ usr/local/arm/3.4.1/bin/;Busybox安装位置为/test/ busybox;文件系统为/test/rootfs/;文件系统生成工具为 mkcramfs;USB无线网卡驱动源码为/test/8188su/driv— 频道检测技术,在检测到周边有无线信号干扰时,可自动 调整频宽模式,避开信道干扰,使无线信号更加稳定。当 干扰消失时,又可自动捆绑空闲信道,充分利用信道捆绑 优势,提升无线性能。CF一150NS主要技术参数:主芯片 er/8188su;无线管理工具wireless-tools为/test/wireless tools.29.tar.gz。另外,还需要准备Linux 2.6.24内核 。 2.2 Linux内核配置 。] 进入内核安装目录/test/yle24402.6.12,运行内核 Realtek 8188SU,接口USB2.0,频率范围为2.4~2.48 GHz,支持IEEE802.11n/g/b无线标准;无线速率最高可 配置: root@localhost test]#make menuconfig 达15O Mbps(IEEE802.11n);工作模式Ad—Hoc和 Infrastructre可选;加密特性为64/128位WEP、WPA/ wPA2、WPA—PSK/wPA2一PSK(TKIP/AES);支持的 (1)增加WLAN支持 选择[Device Driver]一[Networking support]一 [Wireless LAN(non-hamradio)]-+[Wireless LAN drivers (non-hamradio)8L Wireless Extensions]。 (2)增加DHOP支持 操作系统为Windows/Linux/Mac_】]。 1 移植要求 移植目标是在原有ARM监测系统的基础上实现 选择[Device Driver]-+[-Networking support]-- ̄[Net— working options]。务必选中“Packet socket”和“IP:DH— CP support”、“Network packet filtering framework(Netfil— USB无线网卡功能扩展,为系统提供数据远程无线采集 方案。原ARM监测系统是在优龙YLE2440开发板上开 发的,其Linux内核版本为2.6.12.7。USB无线网卡是 外部无线网络系统提供的指定产品COMFAST CF一 15ONS,其主芯片Realtek 8188SU的Linux内核版本要求 是2.6.18~2.6.33。也就是说,整个移植过程要求USB 无线网卡驱动必须是Realtek 8188SU,且工作环境是 Linux2.6.12.7。Realtek公司对8188SU主芯片驱动提供 的建议是PC机Fedora Linux 2.6.24测试通过。经测试, ter)”选项。 另外,还需要udhepc的配置文件。拷贝Busybox目 录/examples/udhcp下的simple.script到文件系统/usr/ share/udhcpc/下,并重命名为default.script。将default. script中的 RESOLVCONF=”/etc/resolv.con{” 修改为 RESOLVCONF=”/tmp/resotv.conf” 若直接将驱动使用Linux 2.6.12.7内核编译,将出现大 量错误。如何将驱动移植到Linux 2.6.12.7还需要进一 步研究。 运行“mkcramfs rootfs rootfs.cramfs”生成根文件系 统rootfs.eramfs,并重新下载到目标板。 2 移植过程 2.1移植环境搭建 移植过程采用VM虚拟机下安装RedHat9.0来完 *浙江省教育厅科研项目(Y200908088);浙江省科技厅公益技术研究项 2.3 Linux内核文件修改 首先将Linux2.6.24内核中的netdevice.h、wireless. h、iw handler.h拷贝至Linux2.6.12内核相应目录下。 然后以Linux2.6.24内核为蓝本进行文件建立、修改和替 换。需要替换的文本清单为: ①/include/linux/目录,wireless.h、skbuff.h、text— search.h、netdevice.h、slab.h、ip.h、icmp.h、socket.h; 目(2010C32096);浙江省重中之重“海洋渔业科学与技术”学科开放课 题(20100108)。 6 6 Microcontrollers&Embedded Systems 20 12年第7期 WWw.mesnet.com.cn 

经验交流 ②/include/net/目录,iw handler.h、sock.h.; ③/include/sound/目录,core.h; ④/net/core/目录,dev.C、skbuff.C、wireless.C、neigh— bour.h; 2.5 安装wireless—tools[。] 无线网卡配置需要使用一些无线网络管理工具,如 wpa—supplicant、wireless—tools等。本项目使用wireless— tools来实现。首先下载wireless—tools.29.tar.gz,然后解 压、编译、安装。下面介绍具体步骤。 ①解压。 tar zxvf wirelesstools.29.tar.gz ⑤/net/ipv4/目录,ip—output.C、devinet.c、socket.C; ⑥/net/netlink目录,af_netlink.C; ⑦/ram/目录,slab.C。 文件替换完毕进行内核编译: make zlmage ②修改Makefile。 修改第8行,设置可执行文件安装路径: PREFIX一/usr/local/wireless 生成内核zImage后下载到目标板。在内核编译的过 程中,还会出现许多错误,主要是C9O语法错误、所调用 函数数据类型不匹配、段符号未定义等问题。主要的修改 内容: 修改第12行,设置gcc交叉编译器: CC=/usr/local/arm/3.4.1/bin/arm—linux-gcc 修改第15行,设置ar交叉编译器: AR一/usr/local/arm/3.4.1/bin/arm-linux-ar ①内核编译时若出现C9o语法和C99语法错误,只 需按照本编译系统所采用的编译标准进行语法修改。例 如,/net/core/dev.C中函数“net—rx—action”的第1713~ 1729行提示有语法错误。其中,第1713行的错误按照 修改第16行,设置ranlib交叉编译器: RANLIB=/usr/local/arm/3.4.1/bin/arm-linux-ranlib ③运行make命令。 ④运行make install命令。可执行文件安装于usr/ local/wireless目录下。 C9O语法修改即可消除,其他错误为所调用函数数据类型 不匹配所致,修改所调用函数的数据类型即可。 ②出现提示“.data一8Lnocong—thresh”未定义之类 —⑤拷贝两个库libiw.SO和libiw.SO.29到文件系统/ 的错误时,在相应源码中将其注释即可。 ③Wireless—seq show函数错误直接采用2.6.24版 本替换2.6.12版本即可。 ④net—sysctl—strdup类错误和警告一定要消除,消除 方法是替换neighbour.h文件及相关文件。 test/r00tfs/lib目录下,运行chmod 777命令后重新生成 压缩根文件rootfs.cram{s,并下载到ARM板。 ⑥将安装目录下的iweonfig、iwlist等下载到目标板。 主要使用的命令及功能: ◆iwconfig,回车,查看所有无线网卡; ◆iwconfig wlan0,查看wlanO; ◆iwconfig wlan0 essid”xx”,配置网卡SSID为xx; 2.4 USB无线网卡驱动编译 首先,下载主芯片Realtek 8188SU的最新驱动 nuxRTL8188SUusbli———v2.6.6.0.20101111.zip,然后解 ◆iwlist wlan0 scarll grep ESSID,搜索周边所有无线 网卡的ESSID。 压进人相应目录修改config、Makefile文件。 (1)修改config [-root@localhost 8188su]#gvim config 2.6无线网卡测试 (1)插入无线网卡,自动安装USB host驱动 [root@(none)tmp]#uname—a Linux(none)2.6.12~h194o#59 Tue May 3 13:12:53 CST 2011 armv4tl unknown 修改第16行,关闭PC模式: 16 CONFIGPLATFORMI386PC=n —.—.修改第18行,打开ARM模式 18 CONFIGPLATFORMARMS3C—Y —[root@(none)tmp]#usb 1-1:new full speed USB device using s3c2410一ohci and address 4 usb 1-1:Product:RTLS188S WLAN Adapter usb 1-1:Manufacturer:Manufacturer Realtek usb 1-1:SerialNumber:OOe04cO00001 (2)修改Makefile 修改交叉编译器和ARM内核安装目录:  ̄root@localhost 8188su]#gvim Makefile 修改第94行为gcc交叉编译器所在路径: CROSS—(2)加载模块8712u.ko insmod 8712u.ko COMPILE:一/usr/local/arm/3.4.1/bin/arm-linux- 修改第95行,直接注释掉以下语句: #KVER:一2.6.24一一(3)唤醒USB无线网卡驱动 ifconfig wlan0 up ¥(ARCH) 修改第96行,指定2.6.12内核路径: KSRC:一/test/yle2440—2.6.12 (4)搜索周边无线网络 [root@(none)tmp]#iwlist wlan0 scan l grep ESSID fwdbg:get survey cmd 修改完毕后,直接make即可在目录下生成8712u. ko。下载8712u.ko驱动到目标板。 fwdbg:survey done(00000005,00000000) paper@mesnet.com.cn(投稿专用) 2012#-g 7期 平疗机 嵌入式条碗应同 67 

ESSID:” I、P—LINKWSW” 255.255 Mask:255.255.255.0 UP BR0ADCAST RUNNING MUI TICAST MTU:1 500 Metric:1 ESSID:”TP—LINK717E24” ESSID:”dlink” ESSID:”newnav.” ESSID:”dgdz” RX packets:618 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 (5)配置wlanO的SSID iwconfig wlan essid TP—LINK717E24 RX bytes:0(O.0 B)TX bytes:0(O.0 B) 配置成功后利用iwconfig回显: [root@(none)tmp]#uname—a Linux(none)2.6.12-hl940#59 Tue May 3 13:12:53 CST 2O1 1 armv4tl unknown (7)ping测试 ping测试时需要加一e参数控制ping次数,否则会一 直不停测试,并且无法kill。 root@(none)tmp]#ping—c 2 172.16.51.9 PING 172.16.51.9(172.16.51.9):56 data bytes 64 bytes from 172.16.51.9:icmpseq=0 ttl一64 time一1.4 ms [root@(none)tmp]#iweonfig wlan0 wlan0 IEEE 802.1lbg ESSID:”TP—LINK717E24” Mode:Managed Frequency:2.437 GHz Access Point: 00:25:86:71:7E:24 ime=0.7 ms 64 bytes from 172.16.51.9:icmpseq一1 ttl=64 t172.16.51.9 ping statistics… Bit Rate:54 Mb/s Encryption key:off Power Management:off 2 packets transmitted,2 packets received,0 packet loss round—trip min/avg/max=0.7/1.0/1.4 ms 3 讨 论 在USB无线网卡驱动移植过程中,将主要的文件 netdevice.h、wireless.h、iw—Link Quality一52/100 Signal level一52/100 Noise level 一0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 handler.h、dev.c等进行替换 后,内核已经能编译成功。将内核下载并重启开发板后, 加载驱动成功,并能利用iwlist搜索到周边的WLAN网 络。在利用iwconfig给驱动指定SSID时iwconfig引起内 核崩溃。初判原因不应为wireless-tools程序。加入ip.h、 icmp.h socket.h等文件后iwconfig指定SSID成功。最 后进行ping测试时,出现ping 127.1和本机IP均失败的 (6)IP动态分配 自动申请动态IP: udhcpc—i wlan0 显示如下信息: [root@(none)tmp]#uname—a Linux(none)2.6.12-hl940#59 Tue May 3 13:12:53 CST 2O 1 1 armv4tl unknown 情况。使用strace跟踪ping执行过程,发现recvfrom()函 数参数传递错误,替换neighbour.c af—netlink.c等文件后 ping 127.1成功。 [root@(none)tmp]#udhcpc—i wlan0 udhcpc(v0.9.9-pre)started 若系统内核升级到Linux 2.6.30,驱动能编译通过, 但只要一发出ifconfig命令,内核即崩溃。即使高版本内 核在移植时也有问题,这些问题需要进一步研究。 udhcpc[490]:udhcpc(v0.9.9-pre)started Sending discover... udhcpc[490]:Sending discover… Sending select for 172.16.51.9... 结 语 通过将高版本USB无线网卡驱动向低版本内核移植 的过程可以看出,移植过程较繁琐,需要更改的内容较多, 有些部分还需要手动修改源码。雎 参考文献 r1]COMFAST.CF一150NS产品说明书,2009. udhcpc[490]:Sending select for 172.16.51.9… Lease of 172.16.51.9 obtained。lease time 691200 udhcpc[490]:Lease of 172.16.51.9 obtained,lease time 691200 deleting routers route:SIOC[ADDl DEL]RT:No such process adding dns 61.153.216.99 adding dns 61.153.216.104 [2]徐英慧.ARM9嵌入式系统设计——基于¥3C2410与Linux [M].北京航空航天大学出版社,2008. r3]Wireless Tools for Linux[OL].[2011—07].http://www. hp1.hp.com/personal/Jean—T0urri1hes/Linux/T0ols.htm1. 运行ifconfig命令后,显示最终配置: root@(none)tmp]#uname—a Linux(none)2.6.12一h1940#59 Tue May 3 13:12:53 CST 2O11 armv4tl unknown [root@(none)tmp]#ifconfig wlan0 wlan0 Line encap:Ethernet HWaddr 00:OF:10:54:0E:1B inet addr:172.16.51.9 Bcast:172.16.255.255 Mask: 辫 WWW.mesnet.corn.C几 6 8 Microcontrollers&Embedded Systems 20 12年第7期 

本文标签: 无线内核网卡驱动