「正點原子Linux連載」第七十章Linux WIFI驅動實驗

2020-12-15 正點原子

第七十章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的驅動移植到晶片或者開發板上。

相關焦點

  • 「正點原子FPGA連載」第二十八章Linux蜂鳴器驅動實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第三十一章Linux按鍵輸入實驗
    1)摘自【正點原子】領航者 ZYNQ 之Linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第三十章Linux並發與競爭實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第二十二章Linux LED驅動開發
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第二十五章設備樹下的LED驅動實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子Linux連載」第六十三章Linux RS232/485/GPS驅動實驗
    第六十三章Linux RS232/485/GPS驅動實驗串口是很常用的一個外設,在Linux下通常通過串口和其他設備或傳感器進行通信,根據電平的不同,串口分為TTL和RS232。不管是什麼樣的接口電平,其驅動程序都是一樣的,通過外接RS485這樣的晶片就可以將串口轉換為RS485信號,正點原子的I.MX6U-ALPHA開發板就是這麼做的。對於正點原子的I.MX6U-ALPHA開發板而言, RS232、RS485以及GPS模塊接口通通連接到了I.MX6U的UART3接口上,因此這些外設最終都歸結為UART3的串口驅動。
  • 「正點原子FPGA連載」第十八章Linux內核移植
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第九章Linux顯示設備的使用
    1)摘自【正點原子】領航者 ZYNQ 之Linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第二十七章gpio子系統下的驅動實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第三十二章Linux內核定時器實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第二十三章新字符設備驅動實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第七章使用XSDK開發Linux應用
    1)摘自【正點原子】領航者 ZYNQ 之Linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第二十七章子系統下的LED驅動實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子FPGA連載」第八章Linux基礎外設的使用
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子Linux連載」第六十一章Linux I2C驅動實驗
    第六十一章Linux I2C驅動實驗I2C是很常用的一個串行通信接口,用於連接各種外設、傳感器等器件,在裸機篇已經對I.MX6U的I2C接口做了詳細的講解。本章我們來學習一下如何在Linux下開發I2C接口器件驅動,重點是學習Linux下的I2C驅動框架,按照指定的框架去編寫I2C設備驅動。
  • 「正點原子FPGA連載」第十六章Linux內核頂層詳解
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?&id=6061601087614)全套實驗源碼+手冊+視頻下載:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html5)對正點原子FPGA感興趣的同學可以加群討論:8767449006)關注正點原子公眾號,獲取最新資料
  • 「正點原子Linux連載」第五十九章Linux LCD驅動實驗
    第五十九章Linux LCD驅動實驗LCD是很常用的一個外設,在裸機篇中我們講解了如何編寫LCD裸機驅動,在Linux下LCD的使用更加廣泛,在搭配QT這樣的GUI庫下可以製作出非常精美的UI界面。本章我們就來學習一下如何在Linux下驅動LCD屏幕。
  • 「正點原子Linux連載」第七十一章Linux 4G通信實驗
    第七十一章Linux 4G通信實驗前面我們學習了如何在Linux中使用有線網絡或者WIFI,但是使用有線網絡或者WIFI有很多限制,因為要布線,即使是WIFI你也得先布線,然後在接個路由器。有很多場合是不方便布線的,這個時候就是4G大顯身手的時候,產品可以直接通過4G連接到網絡,實現無人值守。
  • 「正點原子Linux連載」第三十七章Linux內核移植
    第三十七章Linux內核移植前兩章我們簡單了解了一下Linux內核頂層Makefile和Linux內核的啟動流程,本章我們就來學習一下如何將NXP官方提供的Linux內核移植到正點原子的I.MX6U-ALPHA開發板上。通過本章的學習,我們將掌握如何將半導體廠商提供的Linux BSP包移植到我們自己的平臺上。
  • 「正點原子Linux連載」第六十二章Linux SPI驅動實驗
    第六十二章Linux SPI驅動實驗上一章我們講解了如何編寫Linux下的I2C設備驅動,SPI也是很常用的一個串行通信協議,本章我們就來學習一下如何在Linux下編寫SPI設備驅動。本章實驗的最終目的就是驅動I.MX6U-ALPHA開發板上的ICM-20608這個SPI接口的六軸傳感器,可以在應用程式中讀取ICM-20608的原始傳感器數據。62.1 Linux下SPI驅動框架簡介SPI驅動框架和I2C很類似,都分為主機控制器驅動和設備驅動,主機控制器也就是發SOC的SPI控制器接口。