<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

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

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    //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 end

    #zz###############################################

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全