第七十章Linux WIFI驅動實驗
WIFI的使用已經很常見了,手機、平板、汽車等等,雖然可以使用有線網絡,但是有時候很多設備存在布線困難的情況,此時WIFI就是一個不錯的選擇。正點原子I.MX6U-ALPHA開發板支持USB和SDIO這兩種接口的WIFI,本章我們就來學習一下如何在I.MX6U-ALPHA開發板上使用USB和SDIO這兩種WIFI。
70.1 WIFI驅動添加與編譯
正點原子的I.MX6U-ALPHA開發板目前支持兩種接口的WIFI:USB和SDIO,其中USB WIFI使用使用的晶片為RTL8188EUS,SDIO接口的WIFI使用晶片為RTL8189FS,也叫做RTL8189FTV。這兩個都是realtek公司出品的WIFI晶片。WIFI驅動不需要我們編寫,因為realtek公司提供了WIFI驅動源碼,因此我們只需要將WIFI驅動源碼添加到Linux內核中,然後通過圖形化界面配置,選擇將其編譯成模塊即可。
正點原子I.MX6U-ALPHA開發板默認會贈送一個RTL8188 USB WIFI,RTL8188 USB WIFI如圖70.1.1所示:
圖70.1.1 RTL8188 USB WIFI
另外,正點原子還有一款採用RTL8189FTV晶片的SDIO WIFI,如圖70.1.2所示:
圖70.1.2 RTL8188 SDIO WIFI
70.1.1 向Linux內核添加WIFI驅動
1、rtl81xx驅動文件瀏覽
WIFI驅動源碼已經放到了開發板光碟中,路徑為:1、例程源碼->5、模塊驅動源碼->1、RTL8XXX WIFI驅動源碼-> realtek。realtek目錄下就存放著RTL8188EUS和RTL8189FS這兩個晶片的驅動源碼,如圖70.1.1.1所示:
圖70.1.1.1 rtl8xxx WIFI驅動
其中rtl8188EUS下存放著RTL8188EUS驅動,RTL8189FS存放著RTL8189FS/FTV的驅動文件。Kconfig文件是WIFI驅動的配置界面文檔,這樣可以通過Linux內核圖形化配置界面來選擇是否編譯WIFI驅動,Kconfig文件內容如下所示:
示例代碼70.1.1.1 Kconfig文件內容
1 menuconfig REALTEK_WIFI
2 tristate "Realtek wifi"
3
4if REALTEK_WIFI
5
6 choice
7 prompt "select wifi type"
8 default RTL9189FS
9
10 config RTL9189FS
11 depends on REALTEK_WIFI
12 tristate "rtl8189fs/ftv sdio wifi"
13
14 config RTL8188EUS
15 depends on REALTEK_WIFI
16 tristate "rtl8188eus usb wifi"
17
18 endchoice
19 endif
Makefile文件內容如下所示
示例代碼70.1.1.2 Makefile文件內容
1 obj-$(CONFIG_RTL8188EUS)+= rtl8188EUS/
2 obj-$(CONFIG_RTL8189FS)+= rtl8189FS/
2、將rtl81xx驅動添加到Linux內核中
將realtek整個目錄拷貝到ubuntu下Linux內核源碼中的drivers/net/wireless目錄下,此目錄下存放著所有WIFI驅動文件。拷貝完成以後此目錄如圖70.1.1.1所示:
圖70.1.1.1 拷貝完成的wireless目錄
圖70.1.1.1中框選出來的就是我們剛剛拷貝進來的realtek目錄。
3、修改drivers/net/wireless/Kconfig
打開drivers/net/wireless/Kconfig,在裡面加入下面這一行內容:
source "drivers/net/wireless/realtek/Kconfig"
添加完以後的Kconfig文件內容如下所示:
示例代碼70.1.1.3 drivers/net/wireless/Kconfig文件內容
1 #
2 # Wireless LAN device configuration
3 #
4
5 menuconfig WLAN
......
286 source "drivers/net/wireless/rsi/Kconfig"
287 source "drivers/net/wireless/realtek/Kconfig"
286
289 endif # WLAN
第287行就是添加到drivers/net/wireless/Kconfig中的內容,這樣WIFI驅動的配置界面才會出現在Linux內核配置界面上。
3、修改drivers/net/wireless/Makefile
打開drivers/net/wireless/Makefile,在裡面加入下面一行內容:
obj-y += realtek/
修改完以後的Makefile文件內容如下所示:
示例代碼70.1.1.4 drivers/net/wireless/Makefile文件內容
1 #
2 # Makefile for the Linux Wireless network device drivers.
3 #
4
5 obj-$(CONFIG_IPW2100)+= ipw2x00/
......
62 obj-$(CONFIG_CW1200)+= cw1200/
63 obj-$(CONFIG_RSI_91X)+= rsi/
64
65 obj-y += realtek/
第65行,編譯realtek中的內容,至此,Linux內核要修改的內容就全部完成了。
70.1.2 配置Linux內核
在編譯RTL8188和RTL8189驅動之前需要先配置Linux內核。
1、配置USB支持設備
配置路徑如下:
-> Device Drivers
-><*>USB support
-><*>Support for Host-side USB
-><*> EHCI HCD (USB 2.0) support
-><*> OHCI HCD (USB 1.1) support
-><*> ChipIdea Highspeed Dual Role Controller
-> [*] ChipIdea device controller
-> [*] ChipIdea host controller
2、配置支持WIFI設備
配置路徑如下:
-> Device Drivers
->[*] Network device support
->[*] Wireless LAN
-><*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
-> [*] Support downloading firmware images with Host AP driver
-> [*] Support for non-volatile firmware download
配置完如圖70.1.2.1所示:
圖70.1.2.1 配置支持WIFI設備
3、配置支持IEEE 802.11
配置路徑如下:
-> Networking support
-> -*- Wireless
->[*] cfg80211 wireless extensions compatibility
-><*> Generic IEEE 802.11 Networking Stack (mac80211)
配置完如圖70.1.2.2所示:
圖70.1.2.2 IEE 802.11配置項
配置好以後重新編譯一下Linux內核,得到新的zImage,後面使用新編譯出來的zImage啟動系統。
70.1.3 編譯WIFI驅動
執行「makemenuconfig」命令,打開Linux內核配置界面,然後按照如下路徑選擇將rtl81xx驅動編譯為模塊:
-> Device Drivers
-> Network device support (NETDEVICES [=y])
-> Wireless LAN (WLAN [=y])
-> Realtek wifi (REALTEK_WIFI [=m])
-> rtl8189ftv sdio wifi
-> rtl8188eus usb wifi
配置結果如圖70.1.3.1所示:
圖70.1.3.1 WIFI配置界面
圖70.1.3.1中的配置界面就是我們添加進去的WIFI配置界面,選中「rtl8189fs/ftv sdio wifi」和「rtl8188eus usb wifi」,將其編譯為模塊。執行如下命令編譯模塊:
makemodules -j12 //編譯驅動模塊
編譯完成以後就會在rtl8188EUS和rtl8189FS文件夾下分別生成8188eu.ko和8189fs.ko這兩個.ko文件,結果如圖70.1.3.2所示:
圖70.1.3.2 編譯結果
圖70.1.3.2中的8188eu.ko和8189fs.ko就是我們需要的RTL8188EUS和RTL8189FS的驅動模塊文件,將這兩個文件拷貝到rootfs/lib/modules/4.1.15目錄中,命令如下:
sudo cp 8189fs.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
sudo cp 8188eu.ko /home/zuozhongkai/linux/nfs/rootfs/lib/modules/4.1.15/ -rf
因為我們重新配置過Linux內核,因此也需要使用新的zImage啟動,將新編譯出來的zImage鏡像文件拷貝到Ubuntu中的tftpboot目錄下,命令如下:
cp arch/arm/boot/zImage /home/zuozhongkai/linux/tftpboot/ -f
然後重啟開發板!!!
70.1.4 驅動加載測試
1、RTL8188 USB WIFI驅動測試
重啟以後我們試著加載一下8188eu.ko和8189fs.ko這兩個驅動文件,首先測試一下RTL8188的驅動文件,將RTL8188 WIFI模塊插到開發板的USB HOST接口上。進入到目錄lib/modules/4.1.15中,輸入如下命令加載8188eu.ko這個驅動模塊:
depmod //第一次加載驅動的時候需要運行此命令
modprobe 8188eu.ko //加載驅動模塊
如果驅動加載成功的話如圖70.1.4.1所示:
圖70.1.4.1 RTL8188驅動加載成功
輸入「ifconfig-a」命令,查看wlanX(X=0….n)網卡是否存在,一般都是wlan0,除非板子上有多個WIFI模塊在工作,結果如圖70.1.4.2所示:
圖70.1.4.2 當前開發板所有網卡
從圖70.1.4.2中可以看出,當前開發板有一個叫做「wlan0」的網卡,這個就是RTL8188對應的網卡。
2、RTL8189 SDIO WIFI驅動測試
測試完RTL8188以後,再來測試一下RTL8189這個SDIO WIFI,因為I.MX6U-ALPHA開發板的SDIO WIFI接口與SD卡公用一個SDIO接口。因此SD卡和SDIO WIFI只能二選其一,一次只能一個工作,所以測試RTL8189 SDIO WIFI的時候需要拔插SD卡。SDIO WIFI接口原理圖如圖70.1.4.3所示:
圖70.1.4.3 SDIO WIFI接口
測試開始之前要先將SD卡拔出,然後將RTL8189 SDIO WIFI模塊插入到SDIO WIFI座子上,如圖70.1.4.4所示:
圖70.1.4.4 SDIO WIFI連接圖
SDIO WIFI與開發板連接好以後就可以測試了,輸入如下命令加載8189fs.ko這個驅動模塊:
depmod //第一次加載驅動的時候需要運行此命令
modprobe 8189eu.ko //加載驅動模塊
如果驅動加載成功的話如圖70.1.4.5所示:
圖70.1.4.5 RTL8189驅動加載成功
從70.1.4.5可以看出,RTL8189 SDIO WIFI驅動加載成功,同樣使用「ifconfig -a」命令查看一下是否有wlanX(X=0…n)網卡存在,如果有的話就說明RTL8189 SDIO WIFI驅動工作正常。
不管是RTL8188 USB WIFI還是RTL8189 SDIO WIFI,驅動測試都工作正常,但是我們得能聯網啊,不能聯網的話要他有什麼用呢?WIFI要想聯網,需要移植一些其他第三方組件,否則無法連接路由器,接下來我們就移植這些第三方組件。
70.2 wireless tools工具移植與測試
70.2.1 wireless tools移植
wirelesstools是操作WIFI的工具集合,包括一下工具:
①、iwconfig:設置無線網絡相關參數。
②、iwlist:掃描當前無線網絡信息,獲取WIFI熱點。
③、iwspy:獲取每個節點連結的質量。
④、iwpriv:操作WirelessExtensions 特定驅動。
⑤、ifrename:基於各種靜態標準命名接口。
我們最常用的就是iwlist和iwconfig這兩個工具,首先獲取到相應的源碼包,這裡我們已經放到了開發板光碟中,路徑為:1、例程源碼-》7、第三方庫源碼-》iwlist_for_visteon-master.tar.bz2。將iwlist_for_visteon-master.tar.bz2拷貝到Ubuntu中前面創建的tool目錄下,拷貝完成以後將其解壓,生成iwlist_for_visteon-master文件夾。進入到iwlist_for_visteon-master文件夾裡面,打開Makefile文件,修改Makefile中的CC、AR和RANLIB這三個變量,修改後的值如圖70.2.1.1所示:
圖70.2.1.1修改後的CC、AR和RANLIB值
圖70.2.1.1中CC、AR和RANLIB這三個變量為所使用的編譯器工具,將其改為我們所使用的arm-linux-gnueabihf-xxx工具即可。修改完成以後就可以使用如下命令編譯:
makeclean //先清理一下工程
make //編譯
編譯完成以後就會在當前目錄下生成iwlist、iwconfig、iwspy、iwpriv、ifrename這5個工具,另外還有很重要的libiw.so.29這個庫文件。將這5個工具拷貝到開發板根文件系統下的/usr/bin目錄中,將libiw.so.29這個庫文件拷貝到開發板根文件系統下的/usr/lib目錄中,命令如下:
sudo cp iwlist iwconfig iwspy iwpriv ifrename /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
sudo cp libiw.so.29 /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -f
拷貝完成以後可以測試iwlist是否工作正常。
70.2.2 wirelesstools工具測試
這裡我們主要測試一下iwlist工具,要測試iwlist工具,先測試一下iwlist工具能不能工作,輸入iwlist命令,如果輸出圖70.2.2.1所示信息就表明iwlist工具工作正常。
圖70.2.2.1 iwlist工具
正式測試iwlist之前得先讓WIFI模塊工作起來。RTL8188或RTL8189都可以,以RTL8188 USB WIFI為例,先將RTL8188 WIFI模塊插到開發板的USB HOST接口上,然後加載RTL8188驅動模塊8188eu.ko,驅動加載成功以後在打開wlan0網卡,命令如下:
modprobe 8188eu.ko //加載RTL8188驅動模塊
ifconfig wlan0 up //打開wlan0網卡
wlan0網卡打開以後就可以使用iwlist命令查找當前環境下的WIFI熱點信息,也就是無線路由器,輸入如下命令:
iwlist wlan0 scan
上述命令就會搜索當前環境下的所有WIFI熱點,然後將這些熱點的信息信息答應出來,包括MAC地址、ESSID(WIFI名字)、頻率、速率,信號質量等等,如圖70.2.2.2所示:
圖70.2.2.2 掃描到的WIFI熱點信息
在掃描到的所有熱點信息中找到自己要連接的WIFI熱點,比如我要連接到「ZZK」這個熱點上,這個WIFI熱點信息如圖70.2.2.3所示:
圖70.2.2.3 ZZK熱點信息
可以看出,「ZZK」這個熱點信息已經被掃描到了,因此可以連接。要想連接到指定的WIFI熱點上就需要用到wpa_supplicant工具,所以接下來就是移植此工具。
70.3 wpa_supplicant移植
70.3.1 libopenssl移植
wpa_supplicant依賴於libopenssl,因此需要先移植libopenssl,libopenssl源碼已經放到了開發板光碟中,路徑為:1、例程源碼-》7、第三方庫源碼-》openssl-1.1.1-stable-SNAP-20190915.tar.gz。將openssl源碼壓縮包拷貝到Ubuntu中前面創建的tool目錄下,然後使用如下命令將其解壓:
tar -vxzf openssl-1.1.1-stable-SNAP-20190915.tar.gz
解壓完成以後就會生成一個名為openssl-1.1.1-stable-SNAP-20190915的目錄,然後在新建一個名為「libopenssl」的文件夾,用於存放libopenssl的編譯結果。進入到解壓出來的openssl-1.1.1-stable-SNAP-20190915目錄中,然後執行如下命令進行配置:
./config shared no-asm --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/libopenssl
配置成功以後會生成Makefile,打開Makefile,找到所有包含「-m64」的內容,一共兩處分別為變量CNF_CFLAGS和CNF_CXXFLAGS,將這兩個變量中的「-m64」刪除掉,刪除以後如圖70.3.1.1所示:
圖70.3.1.1 刪除掉「-m64」
Makefile修改好以後使用如下命令編譯並安裝libopenssl:
make CROSS_COMPILE=arm-linux-gnueabihf- -j12
makeinstall
編譯安裝完成以後的libopenssl目錄內容如圖70.3.1.2所示:
圖70.3.1.2 編譯並安裝成功的libopenssl目錄
將圖70.3.1.2中的lib目錄是我們需要的,將lib目錄下的所有文件拷貝到開發板根文件系統中的/usr/lib目錄下,命令如下:
sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -rf
70.3.2 libnl庫移植
wpa_supplicant也依賴於libnl,因此還需要移植一下libnl庫,libnl源碼已經放到了開發板光碟中,路徑為:1、例程源碼-》7、第三方庫源碼-》libnl-3.2.23.tar.gz。將libnl源碼壓縮包拷貝到Ubuntu中前面創建的tool目錄下,然後使用如下命令將其解壓:
tar -vxzf libnl-3.2.23.tar.gz
得到解壓完成以後會得到libnl-3.2.23文件夾,然後在新建一個名為「libnl」的文件夾,用於存放libnl的編譯結果。進入到libnl-3.2.23文件夾中,然後執行如下命令進行配置:
./configure --host=arm-linux-gnueabihf --prefix=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/
--host用於指定交叉編譯器的前綴,這裡設置為「arm-linux-gnueabihf」,--prefix用於指定編譯結果存放目錄,這裡肯定要設置為我們剛剛創建的libnl文件夾。配置完成以後就可以執行如下命令對libnl庫進行編譯、安裝:
make-j12 //編譯
makeinstall //安裝
編譯安裝完成以後的libnl目錄如圖70.3.2.1所示:
圖70.3.2.1 編譯安裝完成後的libnl目錄
我們需要圖70.3.2.1中lib目錄下的libnl庫文件,將lib目錄下的所有文件拷貝到開發板根文件系統的/usr/lib目錄下,命令如下所示:
sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/usr/lib/ -rf
70.3.3 wpa_supplicant移植
接下來移植wpa_supplicant,wpa_supplicant源碼我們已經放到了開發板光碟中,路徑為:1、例程源碼->7、第三方庫源碼->wpa_supplicant-2.7.tar.gz,將wpa_supplicant-2.7.tar.gz拷貝到Ubuntu中,輸入如下命令進行解壓:
tar -vxzf wpa_supplicant-2.7.tar.gz
解壓完成以後會得到wpa_supplicant-2.7文件夾,進入到此文件夾中,wpa_supplicant-2.7目錄內容如圖70.3.3.1所示:
圖70.3.3.1 wpa_supplicant-2.7目錄
進入到圖70.3.3.1中的wpa_supplicant目錄下,然後進行配置,wpa_supplicant的配置比較特殊,需要將wpa_supplicant下的defconfig文件拷貝一份並重命名為.config,命令如下:
cd wpa_supplicant/
cp defconfig .config
完成以後打開.config文件,在裡面指定交叉編譯器、openssl、libnl庫和頭文件路徑,設置如下:
示例代碼70.3.3.1 .config文件需要添加的內容
1 CC = arm-linux-gnueabihf-gcc
2
3 #openssl庫和頭文件路徑
4 CFLAGS +=-I/home/zuozhongkai/linux/IMX6ULL/tool/libopenssl/include
5LIBS+=-L/home/zuozhongkai/linux/IMX6ULL/tool/libopenssl/lib-lssl
-lcrypto
6
7#libnl庫和頭文件路徑
8 CFLAGS +=-I/home/zuozhongkai/linux/IMX6ULL/tool/libnl/include/libnl3
9 LIBS +=-L/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib
CC變量用於指定交叉編譯器,這裡就是arm-linux-gnueabihf-gcc,CFLAGS指定需要使用的庫頭文件路徑,LIBS指定需要用到的庫路徑。編譯wap_supplicant的時候需要用到openssl和libnl庫,所以示例代碼70.3.3.1中指定了這兩個的庫路徑和頭文件路徑。上述內容在.config中的位置見圖70.3.3.2:
圖70.3.3.2 添加到.config中的內容
.config文件配置好以後就可以編譯wpa_supplicant了,使用如下命令編譯:
export PKG_CONFIG_PATH=/home/zuozhongkai/linux/IMX6ULL/tool/libnl/lib/pkgconfig:
$PKG_CONFIG_PATH //指定libnl庫pkgconfig包位置
make -j12 //編譯
首先我們使用export指定了libnl庫的pkgconfig路徑,環境變量PKG_CONFIG_PATH保存著pkgconfig包路徑。在tool/libnl/lib/下有個名為「pkgconfig」的目錄,如圖70.3.3.3所示:
圖70.3.3.3 libnl的pkgconfig目錄
編譯wpa_supplicant的時候是需要指定libnl的pkgconfig路徑,否則會提示「libnl-3.0」或者「libnl-3.0.pc」找不到等錯誤。編譯完成以後就會在本目錄下生成wpa_supplicant和wpa_cli這兩個軟體,如圖70.3.3.3所示:
圖70.3.3.3 編譯出來的wpa_cli和wpa_supplicant文件
將圖70.3.3.3中的wpa_cli和wpa_supplicant這兩個文件拷貝到開發板根文件系統的/usr/bin目錄中,命令如下:
sudo cp wpa_cli wpa_supplicant /home/zuozhongkai/linux/nfs/rootfs/usr/bin/ -f
拷貝完成以後重啟開發板!輸入「wpa_supplicant -v」命令查看一下wpa_supplicant版本號,如果wpa_supplicant工作正常的話就會列印出版本號,如圖70.3.3.4所示:
圖70.3.3.4 wpa_supplicant版本號
從圖70.3.3.4可以看出, wpa_supplicant的版本號輸出正常,說明wpa_supplicant移植成功,接下來就是使用wpa_supplicant將開發板的WIFI連結到路由器上,實現WIFI上網功能。
70.4 WIFI聯網測試
不管是USB WIFI還是SDIO WIFI,聯網的操作步驟如下所示:
①、插上WIFI模塊,如果是板子集成的就不需要這一步。如果是SDIO WIFI的話確保WIFI所使用的SDIO接口沒有插其他的模塊,比如SD卡,防止其他模塊對SDIO WIFI造成影響。
②、加載RTL8188或者RTL8189驅動模塊。
③、使用ifconfig命令打開對應的無線網卡,比如wlan0或wlan1……
④、無線網卡打開以後使用iwlist命令掃描一下當前環境下的WIFI熱點,一來測試一下WIFI工作是否正常。二來檢查一下自己要連接的WIFI熱點能不能掃描到,掃描不到的話肯定就沒法連接了。
當上述步驟確認無誤以後就可以使用wpa_supplicant來將WIFI連接到指定的熱點上,實現聯網功能。
70.4.1 RTL8188 USB WIFI聯網測試
首先測試一下RTL8188 USB WIFI聯網測試,確保RTL8188能掃描出要連接的WIFI熱點,比如我要連接「ZZK」這個WIFI,iwlist掃描到的此WIFI熱點信息如圖70.4.1.1所示:
圖70.4.1.1 ZZK WIFI熱點
要連接的WIFI熱點掃描到以後就可以連接了,先在開發板根文件系統的/etc目錄下創建一個名為「wpa_supplicant.conf」的配置文件,此文件用於配置要連接的WIFI熱點以及WIFI秘密,比如我要連接到「ZZK」這個熱點上,因此wpa_supplicant.conf文件內容如下所示:
示例代碼70.4.1.1 wpa_supplicant.conf文件內容
1 ctrl_interface=/var/run/wpa_supplicant
2 ap_scan=1
3 network={
4 ssid="ZZK"
5 psk="xxxxxxxx"
6}
第4行,ssid是要連接的WIFI熱點名字,這裡我要連接的是「ZZK」這個WIFI熱點。
第5行,psk就是要連接的WIFI熱點密碼,根據自己的實際情況填寫即可。
注意,wpa_supplicant.conf文件對于格式要求比較嚴格,「=」前後一定不能有空格,也不要用TAB鍵來縮進,比如第4行和5行的縮進應該採用空格,否則的話會出現wpa_supplicant.conf文件解析錯誤!最重要的一點!wpa_supplicant.conf文件內容要自己手動輸入,不要偷懶複製粘貼!!!
wpa_supplicant.conf文件編寫好以後再在開發板根文件系統下創建一個「/var/run/wpa_supplicant」目錄,wpa_supplicant工具要用到此目錄!命令如下:
mkdir /var/run/wpa_supplicant -p
一切準備好以後就可以使用wpa_supplicant工具讓RTL8188 USB WIFI連接到熱點上,輸入如下命令:
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
當RTL8188連接上WIFI熱點以後會輸出如圖70.4.1.2所示的信息:
圖70.4.1.2 連接成功
從圖70.4.1.2可以看出,當RTL8188連接到WIFI熱點上以後會輸出「wlan0: CTRL-EVENT-CONNECTED」字樣。接下來就是最後一步了,設置wlan0的IP位址,這裡使用udhcpc命令從路由器申請IP位址,輸入如下命令:
udhcpc -i wlan0 //從路由器獲取IP位址
IP位址獲取成功以後會輸出如圖70.4.2.2所示信息:
圖70.4.2.2 wlan0網卡WIFI地址獲取成功
從圖70.4.2.2可以看出,wlan0的IP位址獲取成功,IP位址為192.168.1.126。可以輸入如下命令查看一下wlan0網卡的詳細信息:
ifconfigwlan0
結果如圖70.4.2.3所示:
圖70.4.2.3 wlan0網卡詳細信息
可以通過電腦ping一下wlan0的192.168.1.126這個IP位址,如果能ping通就說明RTL8188 USB WIFI工作正常。也可以直接在開發板上使用wlan0來ping一下百度網站,輸入如下命令:
ping -I 192.168.1.126 www.baidu.com
-I是指定執行ping操作的網卡IP位址,我們要使用wlan0去ping百度網站,因此要通過「-I」指定wlan0的IP位址。如果WIFI工作正常的話就可以ping通百度網站,如圖70.4.2.4所示:
圖70.4.2.4 百度網站ping成功
至此RTL8188 USB WIFI我們就完全驅動起來了,大家就可以使用WIFI來進行網絡通信了。
70.4.2 RTL8189 SDIO WIFI聯網測試
RLT8189 SDIO WIFI的測試和RTL8188 USB WIFI的測試方法基本一致,如果插了SD卡的話先將SD卡從I.MX6U-ALPHA開發板上拔出,因為I.MX6U-ALPHA開發板的SD卡和SDIO WIFI公用一個SDIO接口。插入RTL8189 SDIO WIFI模塊,然後加載RTL8189驅動,並且打開對應的wlan0(如果只有RTL8189一個WIFI的話)網卡,使用iwlist命令搜索要連接的WIFI熱點是否存在,如果存在的話就可以連接了。
RTL8189 SDIO WIFI同樣使用wpa_supplicant來完成熱點連接工作,因此同樣需要創建/etc/wpa_supplicant.conf文件,具體過程參考70.4.1小節。一切準備就緒以後輸入如下命令來完成WIFI熱點連接:
wpa_supplicant -Dnl80211 -c /etc/wpa_supplicant.conf -i wlan0 &
注意紅色字體,使用RTL8189的話應該使用「-Dnl80211」,這裡不要填錯了!WIFI熱點連接成功以後會輸出如圖70.4.2.1所示信息:
圖70.4.2.1 RTL8189 SDIO WIFI連接成功
使用udhcpc命令獲取IP位址,命令如下:
udhcpc -i wlan0
IP位址獲取過程如圖70.4.2.2所示:
圖70.4.2.2 udhcpc獲取IP位址過程
從圖70.4.2.2可以看出,wlan0的IP位址為192.168.1.118,大家可以使用「ifconfigwlan0」查看一下wlan0網卡的詳細信息。可以通過電腦ping一下192.168.1.118測試WIFI是否工作正常,或者在開發板上使用wlan0網卡ping一下百度網址來測試一下WIFI工作是否正常,輸入如下命令:
ping -I 192.168.1.118 www.baidu.com
如果ping成功的話結果如圖70.4.2.3所示:
圖70.4.2.3 ping百度網站測試成功
至此,如何在I.MX6U-ALPHA開發板上使用WIFI就全部講解完了,包括USB WIFI和SDIO WIFI。其實不管是在I.MX6U上,還是在其他的SOC上,USB WIFI和SDIO WIFI的驅動都是類似的,大家可以參考本章教程講RTL8188、RTL8189這兩款WIFI的驅動移植到晶片或者開發板上。