1. 程式人生 > >Tcar:智慧車之基於rtl8188eu驅動的wifi模組

Tcar:智慧車之基於rtl8188eu驅動的wifi模組

2、WIFI模組
2.1 WIFI模組的驅動程式
     http://www.realtek.com.tw
     https://github.com/lwfinger/rtl8188eu
     // wifi_hostapd_dnsmasq.rar/rtl8188eu.tar.bz2
     
     git 分散式的版本控制軟體,linus開發的
         很多開源的程式 廠家的驅動都在'github'上託管
         免費。

2.1.1 配置核心開啟80211相關協議
          802.11 協議簇是國際電工電子工程學會(IEEE)為'無線區域網絡制定的標準
          // kernel目錄下

          $:' make menuconfig
Networking supports --->
    Wireless --->
        [*] cfg80211 wireless extensions compatibility --->
            [*] Wireless extensions sysfs files  
   
            // 網路協議配置開啟80211相關協議 802.11協議簇是國際電工電子工程學會(IEEE)為無線區域網絡制定的標準
Device Drivers ---> 開啟WIRELESS LAN
    Network device supports --->
        [*] 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
    [*]   USB support --->
        <*>   USB Wireless Device Management support


2.1.2 rtl8188eu驅動模組的編譯
$:' mkdir project/wifi
$:' cd project/wifi
$:' cp /mnt/hgfs/project/env/wifi_hostapd_dnsmasq/rtl8188eu.tar.bz2 ./
    // 拷貝驅動程式rtl8188eu的tar包
$:' tar xf rtl8188eu.tar.bz2
$:' cd rtl8188eu/
    // 從README檢視編譯方法,留意 line35
$:' vi Makefile +101
    // 核對以下引數配置
ARCH = arm 
CROSS_COMPILE = arm-cortex_a9-linux-gnueabi-
KVER  := 3.4.39
KSRC =
/home/tarena/project/kernel
// 核心原始碼目錄【路徑修改】
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless
INSTALL_PREFIX :=
$:' make
$:' cp 8188eu.ko /home/tarena/project/rootfs/home/drivers

2.1.3 驗證方式
1) 讓開發板載入新編譯出的核心
$:' cp arch/arm/boot/uImage /tftpboot/

#:' tftp 48000000 uImage
#:' mmc write 48000000 0x800 0x3000
/* 此時使用nfs網路掛載根檔案系統,進行操作驗證,環境變數修改如下: */
#:' setenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/home/tarena/project/rootfs ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0 lcd=vs070cxn tp=gslx680-linux console=ttySAC0,115200 maxcpus=1
#:' saveenv
#:' re
    // 臨時在pc上登出掉rootfs/etc/init.d/rcS中的 exec
2) 將韌體檔案拷貝到根檔案系統中
$:' mkdir rootfs/lib/firmware/rtlwifi/ -p
$:' cp ../wifi/rtl8188eu/rtl8188eufw.bin rootfs/lib/firmware/rtlwifi/

3) 安裝驅動模組
#:' insmod /home/drivers/8188eu.ko

4) 插入wifi模組【手動插入wifi硬體】
#:' cat /proc/net/wireless
// 多出一行 wlan0: ...
或者
#:' ifconfig -a
// 有線網絡卡 eth0:...
// 無線網絡卡 wlan0:...


2.2 WIFI 相關的應用程式
2.2.1 hostapd
AP(access point),熱點
'hostapd',將wifi模組模擬成路由器
// hostapd開源程式模擬路由器功能來生成熱點(AP)
可以使用手機或者筆記本上的無線網絡卡連線該熱點
$:' cd ~/project/wifi/rtl8188eu/hostapd-0.8/hostapd
    // ---> README  line95
$:' vi Makefile
  5 CC=arm-cortex_a9-linux-gnueabi-gcc
    // 【新增】此編譯行,arm平臺
$:' make
    // You can run "cp defconfig .config" to create an example configuration.
$:' cp defconfig .config
$:' make
$:' file hostapd
    // 確認arm版本的可執行程式
$:' cp hostapd ~/project/rootfs/home/bin/
$:' cp /mnt/hgfs/jy/project/env/wifi_hostapd_dnsmasq/rtl_hostapd_2G.conf ~project/rootfs/home/etc/
$:' vi ~/project/rootfs/home/etc/rtl_hostapd_2G.conf
3  #hostapd執行時使用的裝置檔案
4  interface=wlan0
5  #hostapd執行時需要的快取檔案,確保/var/run/有此目錄(需建立)
6  ctrl_interface=/var/run/hostapd
7  #熱點名稱,可以隨意修改
8  ssid=wifi_def_name
9  #通道
10 channel=6
11 #加密方式
12 wpa=2
13 #連線熱點時需要輸入的密碼,可自定義
14 wpa_passphrase=87654321
$:' mkdir ~/project/rootfs/var/run -p
#:' source /home/etc/profile
#:' /home/bin/hostapd /home/etc/rtl_hostapd_2G.conf -B
    // -B:以守護程序方式執行
        
通過手機 檢視是否出現了熱點“wifi_def_name”  
連線熱點,輸入密碼“87654321
卡在 “正在獲取IP地址。。。” 
DHCP:動態分配IP
// 需要使用dnsmasq開源程式實現動態分配IP功能


2.2.2 dnsmasq
中國開源社群
dnsmasq的功能:
1)dns : 域名解析 
   // 例如:www.baidu.com ---->xxxx.xxxx.xxxx.xxxx
2)dhcp:動態分配IP
$:' cp /mnt/hgfs/jy/project/env/wifi_hostapd_dnsmasq/dnsmasq-2.66.tar.gz ./
$:' tar xf dnsmasq-2.66.tar.gz
$:' cd dnsmasq-2.66/
$:' vi Makefile 
32 CC=arm-cortex_a9-linux-gnueabi-gcc
    // 【新增】32行使用arm交叉編譯工具
$:' make
    // 生成dnsmasq可執行檔案
$:' find ./ -name "dnsmasq"
    // ./src/dnsmasq
$:' file dnsmasq
$:' cp src/dnsmasq ~/project/rootfs/home/bin/

$:' vi dnsmasq.conf.example
    // 簡單瞭解,修改好的檔案在虛擬機器共享資料夾,接下來拷貝到home/etc/
$:' cp /mnt/hgfs/jy/project/env/wifi_hostapd_dnsmasq/dnsmasq.conf ~/project/rootfs/home/etc/
$:' vi ~/project/rootfs/home/etc/dnsmasq.conf
    // 檢視修改好的.conf檔案
94  interface=wlan0
99  listen-address=192.168.2.1,127.0.0.1
132 domain=tcar.com
145 dhcp-range=192.168.2.1,192.168.2.150,12h

    // 後面需要配置模擬出來的路由器的IP在同一個網段
$:' mkdir ~/project/rootfs/var/lib/misc -p
    // 執行dnsmasq程式需要此目錄,需單獨創建出來。

完整步驟:
1) #:' insmod /home/drivers/8188eu.ko
2) #:' source /home/etc/profile
3) #:' /home/bin/hostapd /home/etc/rtl_hostapd_2G.conf -B
    // 開啟熱點功能
4) #:' ifconfig wlan0 192.168.2.1
    // 配置網絡卡(模擬路由器)的IP,與DHCP的IP範圍在同一個網段
5) #:' /home/bin/dnsmasq -C /home/etc/dnsmasq.conf
   如果出現以下錯誤:
 “dnsmasq: unknown user or group: nobody
   解決方案:
    $:' vi src/dnsmasq.c
304 // if (baduser)
305 // die(_("unknown user or group: %s"), baduser, EC_BADCONF);

'註釋掉這兩行',只要不影響正常的DHCP分配IP的功能,即可無視此錯誤。
   #:' make
   #:' cp src/dnsmasq ../../rootfs/home/bin
   #:' /home/bin/dnsmasq -C /home/etc/dnsmasq.conf
    // 再次啟動即可。

6) 驗證
用筆記本連線熱點,在開發板上開啟視訊伺服器
   #:' /home/bin/mjpg_streamer -i "/home/lib/input_uvc.so -d /dev/video9 -y -r 320x240 -f 30" -o "/home/lib/output_http.so -w /home/www -p 80"
在筆記本中開啟瀏覽器
    http://192.168.2.1
    // IP模擬訪問了主機192.168.1.6的埠位置

    http://www.tcar.com
    使用域名訪問的解決方式:
$:' cp /mnt/hgfs/project/env/wifi_hostapd_dnsmasq/hosts ~/project/rootfs/etc/
$:' vi hosts
   192.168.2.1   www.tcar.com
   // 【新增】此行內容可以自動實現域名解析,tcar.com可進行訪問。