wpa_supplicant 移植

前面雖然將 VNT6656 的網卡移植ok,但如果無線路由設了密碼,就連不上了,所以還需要移植一個 wpa_supplicant 的工具。
so , what is  "wpa_supplicant"?
:它主要是用來支持WEP,WPA/WPA2和WAPI無線協議和加密認證的,而實際上的工作內容是通過socket(不管是wpa_supplicant與上層還是wpa_supplicant與驅動都採用socket通訊)與驅動交互上報數據給用戶,而用戶可以通過socket發送命令給wpa_supplicant調動驅動來對WiFi芯片操作。 簡單的說,wpa_supplicant就是WiFi驅動和用戶的中轉站外加對協議和加密認證的支持。 

移植環境:

移植環境:
host (個人pc + 虛擬機) :
fedora 9,  內核版本: Linux localhost.localdomain 2.6.25-14.fc9.i686 
編譯工具:gcc 版本 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)
                  gcc version 4.4.3 (ctng-1.6.1)

target:
FriendlyARM mini2440  開發板;
內核:Linux FriendlyARM 2.6.32.2-FriendlyARM #2 Sat Dec 1 12:06:04 CST 2012 armv4tl unknown

網卡:VNT6656AU 

移植步驟:;
一、下載源碼
        http://hostap.epitest.fi/wpa_supplicant/
        下載wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的補丁)
                #tar xvfz wpa_supplicant-0.7.3.tar.gz

        下載www.openssl.org/source/openssl-0.9.8e.tar.gz
                #tar zxvf openssl-0.9.8e.tar.gz
二、編譯openssl庫
將wpa_supplicant中的補丁拷貝到openssl中 
        # cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
        #cd openssl-0.9.8e
        #mkdir /usr/local/ssl
        #vim Makefile
                CC= arm-linux-gcc
                AR= arm-linux-ar $(ARFLAGS) r
               RANLIB= arm-linux-ranlib
               INSTALLTOP=/usr/local/ssl
                OPENSSLDIR=/usr/local/ssl
        #make 
        #make install
在/usr/local/ssl目錄下安裝了ssl庫
#ls /usr/local/ssl
#bin  certs  include  lib  man  misc  openssl.cnf  private
後面編譯wpa_supplicant要依賴openssl中的lib和include


三、編譯wpa_supplicant 
進入wpa_supplicant-0.7.3.tar.gz解壓生成的wpa_supplicant-0.7.3/wpa_supplicant目錄中:
        #cp defconfig        .config
        #vim .config
                CC=arm-linux-gcc  -L/usr/local/ssl/lib/
          #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
CFLAGS += -I/usr/local/ssl/include
#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
LIBS += -L/usr/local/ssl/lib
        #make


/*注:這裏可能出現很多編譯錯誤!不過不要慌張,認真看下到底是什麼錯誤!基本上都是缺少函數聲明,
不知道作者爲什麼會犯這樣的錯誤。比如在wpa_supplicant.c中對某個函數沒有定義,這時應該用grep
或者cscope等工具查找該函數名,找到在頭文件裏的定義,然後將頭文件寫入該文件中就可以了!
*/

經過編譯後的wpa_supplicant源程序可以看到兩個主要的可執行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的關係就是服務和客戶端的關係:後臺運行wpa_supplicant,使用wpa_cli來搜索、設置、和連接網絡。還有wpa_passphrase, 來加密明文密碼。將這3個文件拷貝到開發板的 /var/run 目錄下。


四、配置wpa_supplicant
在板子根目錄/etc中建立wpa_supplicant.conf文件



文件內容如下

ctrl_interface=/var/run/wpa_supplicant


network={
        ssid="TP-LINK_5C5472"    //填寫無線網絡的的用戶名
        key_mgmt=WPA-PSK
        pairwise=TKIP
        group=TKIP    
       psk="xray030907"   //填寫密碼
        
}


注意要與你的無線路由中的設置對應。


另外要注意的是,無線路由中的模式應該設爲 :  11bg mixed
否則會出現些腦殘情況!


五、測試
insmod vntwusb.ko
ifconfig eth1 up

iwconfig eth1 essid  TP-LINK_5C5472
wpa_passphrase TP-LINK_5C5472 密碼 >> /etc/wpa_supplicant.conf


之後wpa_supplicant.conf中會添加以下內容,然後把最後面的經過加密的密碼修改到上面去,再把下面的內容刪掉!

network={
      ssid="TP-LINK_5C5472 "
      #psk="1234567890"
      psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
}
如:
network={
        ssid="TP-LINK_5C5472"
        key_mgmt=WPA-PSK
        pairwise=TKIP
        group=TKIP
        psk=1afb28b0c256957de410fa84239a95fe03fb9991c4e5eb581bb1c7ee4132563d
        #psk="xray030907"
}


鏈接AP
wpa_supplicant -i eth1 -c /etc/wpa_supplicant.conf -B 
再執行udhcpc -i eth1 可以順利獲取ip 

目前許多WIFI都採用 AES的加密方法,所以 pairwise  group  兩個選項中要加 CCMP 選項,來支持 AES加密,所以最終的樣子應該如下:

network={
        ssid="TP-LINK_5C5472"
        key_mgmt=WPA-PSK
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk=1afb28b0c256957de410fa84239a95fe03fb9991c4e5eb581bb1c7ee4132563d
        #psk="xxxxxxxx"
}

移植過程主要參考了:http://blog.csdn.net/ti_tantbx/article/details/7037741的方法,多謝ti_tantbx 的熱心分享!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章