1. 程式人生 > >OK6410+RTL8192 USB WiFi移植

OK6410+RTL8192 USB WiFi移植

手上有一塊OK6410的板子,有一個水星的usb WiFi mw300,查了一下是RTL8192的驅動,OK6410接線到路由器掛載NFS有點麻煩,想把這個驅動移植的OK6410上,通過WiFi實現NFS掛載。

1、驅動移植

 

 

下載完成後再linux主機上解壓

 

驅動在driver資料夾下

修改makefile

CONFIG_PLATFORM_I386_PC = n 預設是支援386平臺,改為s3c6410平臺

CONFIG_PLATFORM_ARM_S3C6K4 = y

ifeq ($(CONFIG_PLATFORM_ARM_S3C6K4), y)

EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN

ARCH := arm

CROSS_COMPILE := arm-linux-

KVER  := 3.0.1

KSRC ?= /home/dcj/test/linux-3.0.1

Endif

根據實際的平臺及核心做修改。

執行Make

生產8192cu.ko 檔案。

OK6410提供的linux核心本身是沒有把8192驅動編譯進去的,需要重新編譯。

在核心下make menuconfig

 

 

然後make zImage

其實 linux3.0.1版本本身是支援RTL8192版本驅動的,但我編譯出來的核心確不能識別無線網絡卡,這個目前還搞不清楚是什麼原因。

把核心燒到開發板,8192cu.ko放到開發板上

insmod 8192cu.ko Lsmod 可以發現無線網絡卡已經識別到,ifconfig wlan up 後,ifconfig可以看到已經存在wlan0這個網絡卡了。

 

2、移植無線網絡卡配置應用

但如何通過這個網絡卡來連線路由器,使開發板可以通過無線網絡卡上網

首先需要移植wireless_tools 和wpa_supplicant_hostapd(這兩個的用處請百度)

解壓RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911檔案下的Wirless_tools ,修改makefile

## Compiler to use (modify this for cross compile).

#CC = gcc

CC = arm-linux-gcc

## Other tools you need to modify for cross compile (static lib only).

AR = ar

RANLIB = ranlib

然後make,在usr\local\sbin下生產 ifrename iwconfig iwenent iwgetid iwlist iwpriv iwspy這幾個檔案

 

把這幾個檔案拷貝到開發板的根檔案/sbin

網路上有些資料說可以通過iwconfig wlan0 essid “xxx” key”xxx”連線路由器,我試過是不行的。還有說通過iwpriv ra0 set NetworkType=Infra 

iwpriv ra0 set AuthMode=WPA2PSK

iwpriv ra0 set EncrypType=TKIP 

iwpriv ra0 set WPAPSK=*******

iwpriv ra0 set SSID=jxj_rd 

來實現網路連線,

 

Set命令不可用,不知道是不是wireless_tools版本的問題。

移植編譯wpa_supplicant_hostapd

這個移植困擾了我很久,在改makefile的時候

 

我改成

 

導致編譯出來的可執行檔案還是PC上的編譯工具,在板上無法執行,使用的編譯工具還是GCC。

又改了defconfig始終是編譯出錯,編譯了opensll也沒辦法解決,後面通過仔細閱讀document資料夾下的Wireless_tools_porting_guide.pdf檔案發現makefile是要新增一行CC=arm-linux-gcc

 

而不是修改CC=gcc

Make後把wpa_suplicantwpa_cli wpa_passphrase拷貝到開發板上。

etc資料夾下新建wpa_supplicant.conf

檔案內容如下:

# WPA-PSK/TKIP 

ctrl_interface=/var/run/wpa_supplicant 

network={ 

 ssid="xxx" 

scan_ssid=1 

 key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE  

pairwise=TKIP CCMP 

 group=CCMP TKIP WEP104 WEP40  

psk="xxx" 

Cd /etc

執行#wpa_passphrase xxx xxxx >> wpa_supplicant.conf (xxxessid xxxx為登陸密碼)生成暗文密碼,

此時將在wpa_supplicant.conf檔案中生成:
network={
    ssid="xxx"
      #psk="xxxx"
      psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
}

然後修改wpa_supplicant.conf配置檔案,把 psk="1234567890" 這一行明文密碼改成生成的暗文密碼,即:
        psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
其它生成的多餘資訊刪除,

ctrl_interface=/var/run/wpa_supplicant 

network={ 

 ssid="xxx" 

scan_ssid=1 

 key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE  

pairwise=TKIP CCMP 

 group=CCMP TKIP WEP104 WEP40  

psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6bab 

執行# wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &就使無線網絡卡連線上網路。

Ping路由器可以ping通,設定閘道器,DHCP就可以通過開發板上網。

其實這些軟體的編譯方法在documnet 資料夾下的Quick_Start_Guide_for_Driver_Compilation_and_InstallationWireless_tools_porting_guide.pdf檔案下都有介紹。

 

附上可以shell命令,執行./NFS.sh使可以自動載入8192cu驅動,配置IP,掛載NFS目錄。

NFS.sh檔案內容如下:

#!/bin/sh

insmod /test/8192cu.ko
ifconfig wlan0 up
ifconfig eth0 down
wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant.conf -dd &
ifconfig wlan0 192.168.1.115
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.106:/nfs/root /mnt