打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
RTL8192SU_WIFI驱动模块的交叉编译以及arm+linux环境下的应用

http://blog.sina.com.cn/s/blog_4c796ed20100hpwq.html

模块的交叉编译

为实现rtl8192su驱动模块,在arm+linux(2.6.18内核montavista)环境下的应用,需要对模块进行交叉编译,编译器为arm_v5t_le-gcc.

原驱动信息如下:

RTL8192SU Linux driver

   --This driversupports RealTek rtl8192SU USB Wireless LAN NIC

    for

    2.6 kernel:

    Fedora Core 2/3/4/5, Debian 3.1, Mandrake 10.2/Mandriva 2006,

    SUSE 9.3/10.1/10.2, Gentoo 3.1, Ubuntu 7.10/8.04, etc.

    2.4 kernel:

    Redhat 9.0/9.1

驱动目录下主要有以下文件:

 

各个文件的内容和功能可参考目录下的readme.txt文件,实现交叉编译主要更改两个Makefile文件,主要修改开始部分的宏变量。

1.  修改当前驱动目录下的Makefile文件:



原文件开始部分的宏变量为:

 

 

LINUX_KSRC_MODULE = /lib/modules/$(shell uname-r)/kernel/drivers/net/wireless/

RTL819x_DIR = $(shell pwd)

KVER  = $(shell uname -r)

KSRC = /lib/modules/$(KVER)/build

RTL819x_FIRM_DIR = $(RTL819x_DIR)/firmware

HAL_SUB_DIR = rtl8192u

MODULE_FILE = $(RTL819x_DIR)/ieee80211/Module.symvers

更改为:

LINUX_KSRC_MODULE=/opt/mv_pro_5.0/montavista/pro/devkit/lsp/ti-davinci/linux-2.6.18_pro500/drivers/net/wireless/

RTL819x_DIR = $(shell pwd)

KVER  = linux-2.6.18_pro500

KSRC =/opt/mv_pro_5.0/montavista/pro/devkit/lsp/ti-davinci/linux-2.6.18_pro500

RTL819x_FIRM_DIR = $(RTL819x_DIR)/firmware

HAL_SUB_DIR = rtl8192u

MODULE_FILE = $(RTL819x_DIR)/ieee80211/Module.symvers

红色字体为需要修改的宏变量,KSRC需更改为target系统内核源码目录,LINUX_KSRC_MODULE更改为内核源码驱动目录下的wireless目录。

2.  修改/HAL/rtl8192u目录下的Makfile

原文件开始部分如下:

NIC_SELECT = RTL8192SU

CC = gcc

KVER  := $(shell uname -r)

MODDESTDIR :=/lib/modules/$(KVER)/kernel/drivers/net/wireless/

 

ifneq ($(shell uname -r|cut -d. -f1,2), 2.4)

EXTRA_CFLAGS +=-I$(TOPDIR)/drivers/net/wireless

EXTRA_CFLAGS += -std=gnu89

EXTRA_CFLAGS += -O2

EXTRA_CFLAGS += -mhard-float -DCONFIG_FORCE_HARD_FLOAT=y

修改为:

NIC_SELECT = RTL8192SU

CC = arm_v5t_le-gcc

KVER  := linux-2.6.18_pro500

 

MODDESTDIR :=/opt/mv_pro_5.0/montavista/pro/devkit/lsp/ti-davinci/linux-2.6.18_pro500/drivers/net/wireless/

 

ifneq ($(shell uname -r|cut -d. -f1,2), 2.4)

EXTRA_CFLAGS +=-I$(TOPDIR)/drivers/net/wireless

EXTRA_CFLAGS += -std=gnu89

EXTRA_CFLAGS += -O2

#EXTRA_CFLAGS += -mhard-float-DCONFIG_FORCE_HARD_FLOAT=y

EXTRA_CFLAGS += -DCONFIG_FORCE_HARD_FLOAT=y

最主要的就是红色字体部分,CC指明编译器,此项不更改会出现:

   CC1:错误无法识别的命令行选项“-m****”等错误。

  去掉-mhard-float,因为编译器默认选项里是-msoft-float,两者不能同时选。同时选会出现冲突。

然后进入驱动目录下执行以下命令进行编译:

# make ARCH=arm CROSS_COMPILE=arm_v5t_le-

进行编译或是将ARCH 和CROSS_COMPILE宏变量写入Makefile。

执行编译后会出现提示些语法错误(不同编译器版本,语法错误不同,根据提示进行更改)常见:

  /ieee80211/ieee80211.h文件的第57行flase,true,bool重定义。注释掉typedef那行即可。

  备注:其他的语法错误可能会有一些隐形声明函数类型等错误,只需更改函数声明顺序即可(此编译器未出现)。

编译成功后会在驱动目录下出现:r8192s_usb.ko和一些.O文件。

接下来可以在加载该模块,操作如下:



 

 

然后可以依据readme.txt文件做进一步的操作。

二.模块在arm+linux环境下的使用

  首先应该配置内核选项选中对WIFI或是802.11x的支持。

   WPA_supplicant 是 WPA/WPA2认证的客户端,同时也适用于WEAP,对有线、无线网络都可以使用。在驱动目录下解压wpa_supplicant-0.5.10.tar.gz

tar –zxvf wpa_supplicant-0.5.10.tar.gz

然后进入目录

cd wpa_supplicant-0.5.10

编译make

拷贝wpa_cli和wpa_supplicant到/usr/local/bin其中wpa_cli清除以前的默认配置。

接下来需要创建或是更改驱动目录下的脚本步骤如下:

1.  在驱动目录下创建ifcfg-wlan0文件内容如下:

#DHCP client

DEVICE=wlan0

BOOTPROTO=dhcp

ONBOOT=yes

2.  更改wlan0dhcp脚本内容

原文件内容:

#!/bin/bash

 

var0=`ps aux|awk '/dhclient wlan0/'|awk'$11!="awk"{print $2}'`

 

kill $var0

cp ifcfg-wlan0 /etc/sysconfig/network-scripts/

 

dhclient wlan0

 

var1=`ifconfig wlan0 |awk '/inet/{print $2}'|awk-F: '{print $2}'`

 

rm -f/etc/sysconfig/network-scripts/ifcfg-wlan0

 

echo "get ip: $var1"

更改后:

#!/bin/bash

 

var0=`ps aux|awk '/dhclient wlan0/'|awk'$11!="awk"{print $2}'`

 

kill $var0

cp ifcfg-wlan0 /etc/network/

 

dhcpcd wlan0

 

var1=`ifconfig wlan0 |awk '/inet/{print $2}'|awk-F: '{print $2}'`

 

 

rm -f /etc/network/

 

echo "get ip: $var1"

注释:红色部分为更改的部分,因为montavistalinux下文件系统里目录etc下没有sysconfig/network-scripts目录,其脚本在/etc/network目录下.原dhclient命令在pc上的redhat等linux下是支持此命令的,在montavista下是用dhcpcd来实现这一功能的,所以要用此命令替代dhclient。

3.  更改wpa1.conf

wpa1.conf是wpa_supplicant的配置文件,在执行脚本./runwpa时候将用到此配置文件。这个文件很简单,是用来描述一个个网络的,网络配置通常如下:

network={

ssid="fusion"

scan_ssid=1

key_mgmt=WPA-PSK

proto=WPA

pairwise=TKIP

group=TKIP

psk="my-wlan-passwd"

id_str="fusion"

}


注释:对每个网络都是这么一段,这里面 ssid 是无线路由器设置的 SSID,后面 key_mgment, proto, group这几个字段指定了 WPA/TKIP 方式,而 psk 指定的就是我的密钥,这几个对于不同的认证方式有所不同,scan_ssid=1是用来对付设置不广播网络SSID的路由器的,我的路由器就是这么配置的,呵呵,理由自然是增强一层安全性了。

实验室中此文件配置如下:

ctrl_interface=/var/run/wpa_supplicant

network={

                       ssid="supervideo"  #无线网路的名称

                       proto=WPA WPA2

                       key_mgmt=WPA-PSK

                       pairwise=CCMP TKIP

                       group=CCMP TKIP

                       psk="supersuper"    #密钥

                       priority=2

        }

要是想支持多个网络可一配置多段network。

设置好以上内容后可以按一下步骤调试,进行上网,本方法中将很多iwlist,ifconfig,iwconfig等操作放到了脚本里进行,也可以自己手动一步一步进行配置用这些命令来实现上网,具体请查阅相关资料。(进入终端后可以先执行routedel default命令将默认的eth0去掉,这样在执行一下步骤后,wlan0为成为默认的然后通过wlan0来连接)

1.   连接设备在终端执行命令lsusb 应能检测到设备(不是wlan0)

应检测到:

Bus *** Device ***:ID 0bda:8172 Realtek Semiconductor Corp

2.   进入到驱动目录下执行脚本wlan0up(命令格式#./wlan0up)来加载驱动模块显示信息如下:

root@192.168.0.102:/wifi/armwifi/rtl8192su_linux_2.6.0003.0825.2009#./wlan0up

cp: cannot create regular file `/etc/acpi/events': No such fileor directory

 

Linux kernel driver for RTL8192 based WLAN cards

Copyright (c) 2007-2008, Realsil Wlan

usbcore: registered new driver rtl819xSU

new high speed USB device using musb_hdrc and address 2

usb 1-1: configuration #1 chosen from 1 choice

==>ep_num:4, in_ep_num:1, out_ep_num:3

==>RtInPipes:3

==>RtOutPipes:4  13

==>txqueue_to_outpipemap for BK, BE, VI, VO,HCCA, TXCMD, MGNT, HIGH, BEACON:

2

CustomerID = 0x   0

BoardType = 0x 1

RF_Type = 0x 0

Dot11d_Init()

此时输入iwconfig命令应该能看到wlan0的信息:

iwconfig

lo       no wireless extensions.

 

eth0     no wireless extensions.

 

tunl0    no wireless extensions.

 

wlan0    802.11bg  Mode:Managed  AccessPoint: Not-Associated

         Bit Rate:0 kb/s

         Retry min limit:7   RTSthr:off   Fragment thr:off

         Encryption key:off

         Power Management:off

         Link Quality=0/100  Signal level=-256dBm  Noise level=-256 dBm

         Rx invalid nwid:0  Rx invalidcrypt:0  Rx invalid frag:0

         Tx excessive retries:0  Invalidmisc:0   Missed beacon:0

3.   后台执行runwpa脚本:输入命令./runwpa&显示信息如下:

root@192.168.0.102:/wifi/armwifi/rtl8192su_linux_2.6.0003.0825.2009#./runwpa&

[1] 1014

root@192.168.0.102:/wifi/armwifi/rtl8192su_linux_2.6.0003.0825.2009#

Using FW_SOURCE_HEADER_FILE

 

rtl8192SU_HalUsbRxAggr8192SUsb: Enable RxAggregation +++++

rtl8192SU_adapter_start-8064: RCR = 8377f00e

rtl8192SU_adapter_start-8067: RCR = 8777f00e

rtl8192_phy_QueryRFReg(): rf_pathmap=3 eRFPath=0

rtl8192_phy_QueryRFReg(): rf_pathmap=3 eRFPath=1

===>ieee80211_start_scan_rsl()

===>ieee80211_start_scan_rsl()

====================>haha:IPSEnter()

 

===>MgntActSet_RF_State(): StateToSet(2)

 

Trying to associ

ate with 00:25:8

6:23:a9:06 (SSID

='supervideo' fr===>MgntActSet_RF_State():StateToSet(0)

eq=2437 MHz)

ioctl[SIOCSIWFREQ]: Operation not

supported

 

=====>rtl8192SU_link_change 1

<=====rtl8192SU_link_change 2

Linking with supervideo,channel:6, qos:1, myHT:1, networkHT:1,mode:10 cur_net.f

lags:0x40e

============>HTIOTActIsForcedRTSCTS(), 0

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!IOTAction = 00004600

===>ieee80211_associate_procedure_wq(),chan:6

==========>HTSetConnectBwMode():pHTInfo->bCurBW40MHz:0

 

=================>ieee80211_authentication_req():auth->algorithmis 0

=====>rtl8192SU_link_change 1

Linking with supervideo,channel:6, qos:1, myHT:1, networkHT:1,mode:10 cur_net.f

lags:0x40e

============>HTIOTActIsForcedRTSCTS(), 0

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!IOTAction = 00004600

====================>rx ADDBAREQ from:00:25:86:23:a9:06

=====>to send ADDBARSP

<=====rtl8192SU_link_change 2

===>ieee80211_associate_procedure_wq(),chan:6

==========>HTSetConnectBwMode():pHTInfo->bCurBW40MHz:0

 

Association request to the driver failed

CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys

CTRL-EVENT-D=================>ieee80211_authentication_req():auth->algorithmis

0

ISCONNECTED - Disconnect event - remove keys

 

Associated successfully

====================>rx ADDBAREQ from:00:25:86:23:a9:06

=====>to send ADDBARSP

============>normal associate

Using G rates:108

Successfully associated, ht enabled

==========>HTSetConnectBwMode():pHTInfo->bCurBW40MHz:1

 

Associated with 00:25:86:23:a9:06

!!!!!!!!!!!!!!!!!!!!!!!!!!!IOTRaFunc = 00000000

=====>rtl8192SU_link_change 1

=============>ARFR0+rate_index*4:0x100ff015

<=====rtl8192SU_link_change 2

EAPOL TranslateHeader(), pTcb->DataRate = 0x2

EAPOL TranslateHeader(), pTcb->DataRate = 0x2

alg name:CCMP

 

dm_check_edca_turbo():iot peer is 0x5:atheros,bssid:00:25:86:23:a9:06

========>dm_check_edca_turbo()down link

alg name:TKIP

 

EAPOL TranslateHeader(), pTcb->DataRate = 0x2

WPA: Key negotiation completed with 00:25:86:23:a9:06 [PTK=CCMPGTK=TKIP]

CTRL-EVENT-CONNECTED - Connection to 00:25:86:23:a9:06 completed(auth) [id=0 id

_str=]

========>dm_check_edca_turbo()up link

========>dm_check_edca_turbo()down link

alg name:TKIP

 

EAPOL TranslateHeader(), pTcb->DataRate = 0x2

4.   执行命令./wlan0dhcp获得IP和网关等:

root@192.168.0.102:/wifi/armwifi/rtl8192su_linux_2.6.0003.0825.2009#./wlan0dhcp

./wlan0dhcp

kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid |job]... or kill -l

[sigspec]

===>DHCP Protocol start tx DHCP pkt src port:68,dest port:67!!

=====>to send ADDBAREQ!!!!!

====================>rx ADDBARSP from:00:25:86:23:a9:06

========>dm_check_edca_turbo()up link

========>dm_check_edca_turbo()down link

========>dm_check_edca_turbo()up link

========>dm_check_edca_turbo()down link

=====>to send ADDBAREQ!!!!!

====================>rx ADDBARSP from:00:25:86:23:a9:06

dhcpcd.exe: interface wlan0 has been configured with oldIP=192.168.0.104

rm: cannot remove `/etc/network/': Is a directory

get ip: 192.168.0.104

此时执行route命令查看路由显示如下:

root@192.168.0.102:/wifi/armwifi/rtl8192su_linux_2.6.0003.0825.2009#route

Kernel IP routing table

Destination    Gateway        Genmask        Flags MetricRef    UseIface

192.168.0.0                 255.255.255.0              0 wlan0

192.168.0.0                 255.255.255.0              0 eth0

default        192.168.0.2    0.0.0.0        UG            0 wlan0

表明已经通过wlan0连接到了网络。可以进行上网了,ping www.baidu.com等也应能ping通。

root@192.168.0.102:/wifi/armwifi/rtl8192su_linux_2.6.0003.0825.2009#ping www.ba

idu.com

PING www.a.shifen.com (119.75.213.50) 56(84) bytes of data.

64 bytes from 119.75.213.50: icmp_seq=1 ttl=54 time=31.8 ms

64 bytes from 119.75.213.50: icmp_seq=2 ttl=54 time=35.4 ms

64 bytes from 119.75.213.50: icmp_seq=3 ttl=54 time=32.6 ms

5.执行./wlan0down关掉wlan0卸载驱动模块

   /wlan0down

 

=====>rtl8192SU_link_change 1

<=====rtl8192SU_link_change 2

CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys

  目前有些问题,执行到此后,终端不能在输入其他命令了,ps显示某些进程还在进行,用killall***命令后也不能完全退出到终端可以输入命令,后台运行此脚本也一样。在pc下就可以?????

备注:

可以用bwm-ng进一步验证。后台运行ping命令,运行bwm-ng会显示wlan0口有数据发送和接收到。

另外在执行runwpa脚本前可以执行iwlistwlan0命令来查看当前环境下可用的无线网络。如想接入某个网络可以可以更改wpa1.conf文件不过前提是得知道密钥^-^.本人实验室中能够检测到无线网络如下:

# iwlist wlan0 scan

wlan0    Scan completed :

         Cell 01 - Address: 00:25:86:23:A9:06

                   ESSID:"supervideo"

                   Protocol:IEEE802.11N-24G

                   Mode:Master

                   Channel:6

                   Encryption key:on

                   Bit Rates:300 Mb/s

                   Extra: Rates (Mb/s): 1 2 5.5 11 6 9 12 18 24 36 48 54

                   Quality:30  Signal level:0  Noiselevel:171

                   IE: WPA Version 1

                       Group Cipher : WEP-40

                       Pairwise Ciphers (2) : TKIP WEP-40

                       Authentication Suites (1) : PSK

                   Extra: Last beacon: 3ms ago

         Cell 02 - Address: 00:15:E9:DF:A9:51

                   ESSID:"dlink"

                   Protocol:IEEE802.11bg

                   Mode:Master

                   Channel:6

                   Encryption key:off

                   Bit Rates:54 Mb/s

                   Extra: Rates (Mb/s): 1 2 5.5 6 9 11 12 18 24 36 48 54

                   Quality=30/100  Signal level=-95dBm  Noise level=-85 dBm

                   Extra: Last beacon: 53ms ago

         Cell 03 - Address: 00:23:89:4A:7D:70

                   ESSID:"CMCC"

                   Protocol:IEEE802.11bg

                   Mode:Master

                   Channel:11

                   Encryption key:off

                   Bit Rates:54 Mb/s

                   Extra: Rates (Mb/s): 1 2 5.5 6 9 11 12 18 24 36 48 54

                   Quality:30  Signal level:0  Noiselevel:171

                   Extra: Last beacon: 5ms ago

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android KitKat 4.4 Wifi移植之Wifi driver
嵌入式Linux系列第9篇:使用WIFI
无线渗透
Centos下无线网卡的安装实现无线上网
将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片) | 王晔的流水账
CentOS 7 Realtek 8192cu WIFI网卡驱动配置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服