天天看點

Linux下Wi-Fi的實作:wireless_tools和wpa_supplicant

一、移植wireless_tools

    tar zxf  wireless_tools.29.tar.gz(網上下載下傳)

    cd wireless_tools.29

    make

    成功後會在目前目錄生成iwspy,iwpriv,iwlist以及iwconfig等檔案。

2. 拷貝檔案

    insmod rtutil5572sta.ko。

    insmod rt5572sta.ko

    insmod rtnet5572sta.ko

三、指令的使用

    iwlistwifi-name scanning 

    其中wifi-name為無線網卡的名字,比如網卡eth0就是系統預設的網卡名字, wifi-name可以用ifconfig檢視,一般為ra0(無線網卡),不過,需要ifconfig ra0 up。

2.  掃描網絡資訊

    iwlistra0 scan

===>rt_ioctl_giwscan.11(11) BSS returned, data->length = 1427 

ra0       Scan completed : 

          Cell 01 - Address:C4:CA:D9:1D:9E:A0 

                    Protocol:802.11b/g/n 

                    ESSID:"" 

                    Mode:Managed 

                    Frequency:2.412 GHz(Channel 1) 

                    Quality=7/100  Signal level=-87 dBm  Noise level=-82 dBm 

                    Encryption key:off 

                    Bit Rates:54 Mb/s 

3. 設定要連接配接的網絡類型

      iwprivra0 set AuthMode=WPA2PSK 

5. 設定網絡加密方式:(CCMP即為AES)

      iwprivra0 set EncrypType=TKIP  

6. 設定連接配接時的密碼

      iwprivra0 set WPAPSK=*******  //********為加密網絡的密碼

7. 連接配接該網絡:有兩種方式:

<1> 用iwpriv指令

    iwpriv ra0 set SSID=TXJ

<2> 用iwconfig指令

    iwconfigra0 essid TXJ

    至此,如果密碼正确,就可以連接配接上網絡TXJ了。 

8. 檢視狀态

    iwpriv ra0 connStatus 

    當然,你也可以用iwconfig指令檢視狀态。

四、wpa_supplicant

    wpa_supplicant由網卡公司提供,呵呵,同樣,網上也有很多相關資料,如下:

1.生成wpa_supplicant(網上下載下傳,本人未試)

1.1下載下傳并解壓wpa_supplicant需要的源碼

    tarxvfz wpa_supplicant-0.7.2.tar.gz

    tarxvfz wpa_supplicant-0.5.8.tar.gz

    tarzxvf openssl-0.9.8e.tar.gz

1.2編譯openssl庫

将wpa_supplicant中的更新檔拷貝到openssl中:

       cp wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch  openssl-0.9.8e/

建立openssl編譯目标路徑:

      mkdir /usr/local/ssl

修改openssl-0.9.8e目錄下的makefile檔案,修改内容如下:

    CC=arm-none-linux-gnueabi-gcc

    AR=arm-none-linux-gnueabi-ar

    RANLIB=arm-none-linux-gnueabi-ranlib

    INSTALLTOP=/usr/local/ssl

    OPENSSLDIR=/usr/local/ssl

然後編譯openssl:

    make & make install

正常編譯後,在/usr/local/ssl中将會出現ssl庫。

1.3編譯wpa_supplicant

    cd  wpa_supplicant-0.5.8

    cp  defconfig .config

    CC=arm-none-linux-gnueabi-gcc-L /usr/local/ssl/lib/

    CFLAGS+= -I/usr/local/ssl/include/

    LIBS+= -L/usr/local/ssl/lib/

然後編譯:

    make

2.把RT2870STA.dat檔案複制到/etc/Wireless/RT2870STA 目錄下

    1.1 mkdir -p /etc/Wireless/RT2870STA //建立多層目錄。

    1.2 cp /mnt/rt5370/RT2870STA.dat  /etc/Wireless/RT2870STA

3.首先關閉本地網卡,再啟動wifi網卡

    #ifconfig eth0 down (如果非同一ip段,不需要關閉)

    ifconfig ra0 up

    啟動網卡後,會不斷出現錯誤:BIRIdx(1): RXDMALen not multiple of 4.[43507], BulkInBufLen = 416)

    修改./MODULE/include/iface/rtmp_usb.h問題就能夠解決掉。

    #define RXBULKAGGRE_SIZE  12 該為8 

4.設定網卡參數

    ifconfig ra0  192.168.2.188

    #ifconfig ra0  broadcast 192.168.2.255 (廣播位址,預設)

    #ifconfig ra0  netmask 255.255.255.0(子網路遮罩,預設)

    network={

             scan_ssid=1

             key_mgmt=WPA-EAP WPA-PSK IEEE8021XNONE

             pairwise=TKIP CCMP

             group=CCMP TKIP WEP104 WEP40

             psk="xxxxx" //密碼

            }

6.啟動指令

    mkdir -p /var/run/wpa_supplicant

    /mnt/rt5370/wpa_supplicant -Dwext-ira0 -c /etc/wpa_supplicant.conf

7.指令檢視狀态

  /mnt/rt5370/iwpriv ra0 connStatus   //iwpriv檔案放在/mnt/rt5370/目錄下,是以,需要這樣運作指令。

  成功 ra0  connStatus:Connected(AP:TXJ[E0:05:C5:CF:F0:56])

  然後,就可以ping通192.168.2.1,說明連接配接上路由器了。那麼,工作就完成了。

附:

    -C<ctrl_intf>:控制接口名稱

    -D<driver>:驅動類型

    -p<driver_param>:驅動參數

    -b<br_ifname>:橋接口名稱

rt5370支援WPS,rt3070不支援。

繼續閱讀