zz-rtl8188eu的linux-usb-wifi調試及驅動編譯150210

//zz//#######################################################################

zz-rtl8188eu的linux-usb-wifi調試及驅動編譯150210

zz-Write:
    @2015-2-4 22:11:14
    @2015-2-11 00:32:07
    @

REF:
    嵌入式linux usb wifi移植參考文檔.pdf
        嵌入式linux usb wifi移植.pdf
        http://blog.chinaunix.net/uid-8048969-id-3251135.html
    
    RTL8188EUS_linux_v4.3.0.7_12758.20141114.zip
        ftp3.realtek.com.tw (RTL8188E,M6b3Er)

KeyWord:
    
    以 ti-am335x 爲例,使用 ti-sdk 6.0 平臺內核及交叉編譯器工具鏈

//zz//#######################################################################
0.
USB 硬件調試

1)
內核代碼中, am335x 須要將接rtl8188eu的 USB0 口設置爲 HOST 模式;
設爲 OTG 主從可切換模式會沒法檢測到USB外設
緣由是
    am335x 外接到 rtl8188eu 模塊的USB口使用的4根線,沒有引出 id 線到USB端口
    雖然am335x 的id線下拉爲低電平,是爲 OTG 之主機模式
    *可是 OTG 還須要用到 VBUS 線(即USB的VCC5V腳),這根線 OTG 檢測主從要用到
        若 VBUS 檢測到無電壓,表示對方是B端設備,再經過使能腳給VBUS上電VCC5V
        若 VBUS 檢測到5V,表示對方是A端(USB主機),本機爲B端設備
    此板子是 USB0_VBUS 直接接 VCC5V ,因此不管插電腦仍是U盤或rtl8188e,AM335X的OTG偵測結果都是本身爲設備.

2)
USB0 口開機就接上 rtl8188 模塊
提示枚舉錯誤,各類 -74 錯誤號
參看內核得知是協議錯誤 => 時序錯誤 => D+ D- 數據線的走線,串接電阻,電容不對
解決辦法:
    USB 差分高速信號,抵消反射處理,阻抗匹配可能不對
    去掉兩個串接的 33ohm ,去掉兩個100pf左右的電容

3)
USB0 口rtl8188e 模塊出現斷電後再上電(重啓),主機沒法檢測到設備的問題
    USB協議提到,USB設備的 D+ D- 下拉了15K電阻,D+ 上拉1.5K電阻表示此設備爲全速/高速
        USB2.0 全速 12Mbps,高速最高 480Mbps
    而 D- 上拉接1.5K電阻表示此設備只支持USB低速模式(USB1.0設備)

問題分析:
    由於是高速設備,用萬用表測量 D+ 對地電平
    rtl8188e 模塊在 am335x 整個開機過程當中,先爲3.0V左右高電平,枚舉後因設備內部斷開上拉電阻以做全速/高速通訊,測得電平變爲0.3左右
    此時再將rtl8188e 模塊斷電,再上電,發現整個過程當中 D+ 腳對地電平都爲 0.3V左右的低電平
    
結果:
    後面發現此狀況爲偶爾發生,正常狀況下,USB設備斷電再上電,我用萬用表都能測到D+腳有個高電平,
    主機識別設備的速度的時間很短,只看到電壓爲1.6V左右..後續分析使用示波器吧
    
    *飛凌 OK335xD 說的須要開機後再插入 USB設備和觀測到的現象不符
    實際是偶爾發生開機後供電rtl8188e沒法識別到,而開機就供電反而必定能是被到,U盤開機就插好也能偵測到

4)
rtl8188e usb 模塊使用 IO 口沒法控制其VBUS接上電源
緣由:
    NMOS 管使用錯誤
    其實 MOS 管內部有四個級,源級S 漏極D 柵極G 襯底級B
    經常使用 NMOS 管只有3個引腳,是由於源級S 與 襯底級B 連在一塊兒的
    要使NMOS管D S 導通,須要在柵極G加高電平,並且是G 相對於S(B) 爲高電平
    此處 D 接VCC S接VBUS 柵極G就算爲高電平,也沒法將 D S 連通,由於 G 與 B之間電壓不夠使 MOS 管中 P區的少子將兩個N溝道導通
解決方法:
    將 S 接到 GND ,模塊的GND腳與 NMOS 管的 D 級相連


//zz//#######################################################################
1.
驅動包中各目錄說明,有driver,還有 wpa_supplicant hostapd 等應用層工具代碼的
解壓驅動包
rtl8188eus_linux_v4.3_141114
    driver/rtl8188eus_linux_v4.3.0.7drv
        驅動程序,編譯獲得 8188eu.ko

    wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8
        鏈接wifi用的客戶端程序 wpa_supplicant wpa_cli等;AP熱點程序 hostapd


    wireless_tools/wireless_tools.30.rtl
        查看wifi信號強度,速度,頻段等信息用的 iwconfig iwlist 程序
        基於 /proc/net/wireless


//zz//#######################################################################
2.
驅動程序/內核模塊 8188eu.ko 交叉編譯移植
driver/rtl8188eus_linux_v4.3.0.7drv
    驅動程序,編譯獲得 8188eu.ko

肯定芯片選中的是 8188E
    CONFIG_RTL8192C = n
    CONFIG_RTL8188E = y


修改 Makefile
1)
仿照 CONFIG_PLATFORM_ARM_S3C2K4 添加一個 ti am335x 的選項
註釋掉 I386 電腦用的選項
添加 ARM_AM335X 選項

#zz# @dell @2015-0204 begin
#zz# CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_ARM_AM335X = y
#zz# @dell @2015-0204 end

2)
仿照 CONFIG_PLATFORM_ARM_S3C2K4 添加以下這段
設置小端格式,設置內核代碼路徑等等

# @home @2015-0204 begin
ifeq ($(CONFIG_PLATFORM_ARM_AM335X), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := arm-linux-
KVER  := 3.2.0
KSRC := /home/am335x-tisdk6.0/linux-3.2.0-psp04.06ti-zz
endif

# @home @2015-0204 end

################################################
3)
去掉內核模塊,驅動8188eu.ko中的調試輸出信息
大部分調試信息是經過以下宏定義函數數出來的,使他們輸出爲空就行
    DBG_8192C
    MSG_8192C
    DBG_817X
    DBG_871X_LEVEL

在 include/autoconf.h 文件中
註釋掉 CONFIG_DEBUG 宏定義,以減小沒必要要的調試信息輸出


//zz// Too much debug info, Reduce something 
//  @dell @2015-02-04
//zz// #define DBG  1
#define DBG 0

/* DBG_871X, etc... */
//zz// #define CONFIG_DEBUG


在 rtw_debug.h 中
將 _dbgdump _seqdump 兩個宏定義設置爲空的(直接去掉會出錯的,函數未定義)
這樣調試信息就大部分不會有了,8188eu.ko也變小了
#elif defined PLATFORM_LINUX
    #define _dbgdump    //
    #define _seqdump    //

4)
執行 make 命令,便可編譯獲得 am335x 平臺的 8188eu.ko 驅動模塊

//zz//#######################################################################
3.
交叉編譯 wpa_supplicant wpa_cli 程序,交叉編譯 hostapd hostapd_cli 等程序
wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8
    鏈接wifi用的客戶端程序 wpa_supplicant wpa_cli等
    AP熱點程序 hostapd

#################
1)
wpa_supplicant/Makefile


設置編譯器爲交叉編譯器

#zz############################
# zz @dell @2015-0204 begin
CC = arm-linux-gcc
# zz @dell @2015-0204 end


ifndef CC
CC=gcc
endif


在 src/lib.rules 中,最好也將編譯器 CC 設置爲交叉編譯器
#zz############################
# zz @dell @2015-0204 begin
CC = arm-linux-gcc
# zz @dell @2015-0204 end

ifndef CC
CC=gcc
endif

#################
2)
hostapd/Makefile 中也是這樣添加 CC 爲交叉編譯器

#zz############################
# zz @dell @2015-0204 begin
CC = arm-linux-gcc
# zz @dell @2015-0204 end

ifndef CC
CC=gcc
endif

//zz//#######################################################################
4.
交叉編譯 iwlist iwconfig 等程序
wireless_tools/wireless_tools.30.rtl
    查看wifi信號強度,速度,頻段等信息用的 iwconfig iwlist 程序
    基於 /proc/net/wireless


這裏須要修改 Makefile 中 CC AR RANLIB 爲交叉編譯工具
同時 PREFIX 若是要安裝的話,修改下路徑,以下改成 _install 目錄


#zz###############################################
# zz @dell @2015-0204 begin

PREFIX = _install

ifndef PREFIX
  PREFIX = /usr/local
endif

## Compiler to use (modify this for cross compile).

#zz# CC = gcc
CC = arm-linux-gcc

## Other tools you need to modify for cross compile (static lib only).

#zz# AR = ar
#zz# RANLIB = ranlib

AR = arm-linux-ar
RANLIB = arm-linux-ranlib

# zz @dell @2015-0204 endhtml

#zz###############################################linux

相關文章
相關標籤/搜索