资讯详情

全志平台Android系统wifi模组rtl8188eu移植调试记录

1. 前言

A3x android4.4.2平台;

rtl8188eu是一款USB接口的wifi模组,支持802.11b/g/n协议,具有station、softAP和wifi direct功能。

2. 内核配置

rtl8188eu模块使用的驱动器是8188eu,代码位于lichee/linux-3.3/drivers/net/wireless/rtl8188eu将驱动程序编译成模块译成模块,

在linux-3.3目录下执行make ARCh=arm menuconfig做以下选择:

Device Drivers --->        Network device support--->                Wireless LAN--->                        <M> Realtek 8188E USB WiFi

配置后编译内核。

3. 引脚配置

rtl8188eu引脚配置在lichee/tools/pack_brandy/chips/sun6i/configs/android/fiber-evb/sys_config.fex有两个地方需要修改。wifi配置:

;wifi configuration ;wifi_sdc_id    ---  0- SDC0, 1- SDC1, 2- SDC2, 3- SDC3 ;wifi_usbc_id  ---  0- USB0, 1- USB1, 2- USB2 ;wifi_usbc_type --  1- EHCI(speed 2.0), 2- OHCI(speed 1.0) ;wifi_mod_sel   ---  0- none, 1- ap6181, 2- ap6210(wifi bt), ;                    3 - rtl8723as(wifi bt), 4- rtl8189es(SM89E00), ;                    5 - rtl8192cu, 6 - rtl8188eu, 7 - mt6620, ;                    8 - rtl8723au, 9 - ap6330(wifi bt fm) ;                    10 - ap6476,   11 - rtl8723bs ;-------------------------------------------------------------------------------- [wifi_para] wifi_used          = 1 wifi_sdc_id        = 1 wifi_usbc_id       = 1 wifi_usbc_type     = 1 wifi_mod_sel       = 6 wifi_power         = port:PH27<1><0><default><0>

需要注意的是wifi_power从原理图中可以知道这个参数,wifi电源开关由三极管控制,

原来的wifi电源由axp但在调试中发现了控制,axp控制wifi电源的aldo一路输出低电平,不能输出高电平,所以这里使用了一个IO控制管脚。

然后,8188eu模组是接在USB1接口上的,所以需要对USB1进行配置:

;usb_used:USB使能标志。一、表示系统中USB如果模块可用,则表示系统USB禁用。 ;usb_port_type:USB使用端口。 0:device only;1:host only;2:OTG ;usb_detect_type:USB检查端口的方法。0:不做测试;1:vbus/id检查;2:id/dpdm检查 ;usb_id_gpio:USB ID pin脚配置。具体请参考gpio配置说明。 ;usb_det_vbus_gpio:USB DET_VBUS pin脚配置。具体请参考gpio配置说明。 ;usb_drv_vbus_gpio:USB DRY_VBUS pin脚配置。具体请参考gpio配置说明。 ;usb_det_vbus_gpio: "axp_ctrl",表示axp 提供 ;usb_restrict_gpio  usb限流控制pin ;usb_restric_flag:  usb限流标置 ;usb_not_suspend:   usb远程唤醒标置,0:不支持,1:支持 ;-------------------------------- ;---       USB1控制标志 ;-------------------------------- [usbc1] usb_used            = 1 usb_port_type       = 1 usb_detect_type     = 0 usb_id_gpio         = usb_det_vbus_gpio   = usb_drv_vbus_gpio   = usb_restrict_gpio   =  usb_host_init_state = 0 usb_restric_flag    = 0 usb_not_suspend     = 0

4. 修改电源管理部分

由于使用了IO管脚代替axp控制wifi因此,需要修改电源管理部分的代码。rtl8188eu模块的电源管理部分代码位于lichee/linux-3.3/arch/arm/mach-sun6i/rf只需修改目录wifi_pm_rtl8188eu.c首先是文件rtl8188eu_gpio_init()函数修改:

void rtl8188eu_gpio_init(void) {     script_item_u val;     script_item_value_type_e type;     struct wifi_pm_ops *ops = &wifi_select_pm_ops;     int ret = 1;      rtl8188eu_msg("exec rtl8188eu_wifi_gpio_init\n");      /* get drv_vbus gpio */     type = script_get_item(wifi_para, "wifi_power", &drv_vbus_gpio_set);     if(type == SCIRPT_ITEM_VALUE_TYPE_PIO){      }else{         rtl8188eu_msg("ERR: %s(drv vbus) is invalid\n", "rtl8188eu");         return;     }      ret = gpio_request(drv_vbus_gpio_set.gpio.gpio, NULL);     if(ret != 0){         rtl8188eu_msg("ERR: gpio_request failed\n");         return;     } else {         /* set config, ouput */             gpio_direction_output(drv_vbus_gpio_set.gpio.gpio, 0);               }      rtl8188eu_powerup = 0;     rtk8188eu_suspend = 0;     ops->power     = rtl8188eu_power;     ops->standby   = rtl8188eu_standby;      // force to disable wifi power in system booting,     // make sure wifi power is down when system start up     rtl8188eu_module_power(0); }

接着是rtl8188eu_module_power()函数修改:

static int rtl8188eu_module_power(int onoff) {     int ret = 0;      rtl8188eu_msg("function: rtl8188eu_module_power\n");      if (onoff) {         __gpio_set_value(drv_vbus_gpio_set.gpio.gpio, 1);     } else {         __gpio_set_value(drv_vbus_gpio_set.gpio.gpio, 0);     }      return ret; }

5. Android平台配置

在Android源码下device/softwinner/fiber-evb/BoardConfig.mk该文件指定加载该文件wifi修改如下:模块:

# 1.1 realtek wifi configuration BOARD_WIFI_VENDOR := realtek ifeq ($(BOARD_WIFI_VENDOR), realtek)     WPA_SUPPLICANT_VERSION := VER_0_8_X     BOARD_WPA_SUPPLICANT_DRIVER := NL80211     BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl     BOARD_HOSTAPD_DRIVER        := NL80211     BOARD_HOSTAPD_PRIVATE_LIB   := lib_driver_cmd_rtl      SW_BOARD_USR_WIFI := rtl8188eu     BOARD_WLAN_DEVICE := rtl8188eu endif

说明: BOARD_WIFI_VENDOR:指定使用realtek厂商的wifi模组;

SW_BOARD_USR_WIFI和BOARD_WLAN_DEVICE指定使用rtl8188eu模组。

在device/softwinner/fiber-evb/init.sun6i.rc指定文件中需要打开的文件wifi添加以下代码:

# 1. realtek wifi service # 1.1 realek wifi sta service
service wpa_supplicant /system/bin/wpa_supplicant \
    -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
    -O/data/misc/wifi/sockets \
    -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0
    #   we will start as root and wpa_supplicant will switch to user wifi
    #   after setting up the capabilities required for WEXT
    #   user wifi
    #   group wifi inet keystore
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
    oneshot

# 1.2 realtek wifi sta p2p concurrent service
service p2p_supplicant /system/bin/wpa_supplicant \
    -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \
    -e/data/misc/wifi/entropy.bin -N \
    -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \
    -O/data/misc/wifi/sockets \
    -g@android:wpa_wlan0
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
    oneshot

指定开启wpa_supplicant和p2p_supplicant这两个服务,并设置它们的启动参数。

为了使Settings界面显示wifi和wifi direct界面,需要在device/softwinner/fiber-evb/fiber_evb.mk文件中添加如下代码:

# wifi & bt config file
PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.wifi.xml:system/etc/permissions/android.hardware.wifi.xml \
    frameworks/native/data/etc/android.hardware.wifi.direct.xml:system/etc/permissions/android.hardware.wifi.direct.xml

rtl8188eu模组支持aoftAP功能,为了在Settings界面显示便携式wifi热点功能,需要在device/softwinner/fiber-evb/overlay/frameworks/base/core/res/res/values/config.xml文件中作如下配置:

<!-- List of regexpressions describing the interface (if any) that represent tetherable
         Wifi interfaces.  If the device doesn't want to support tethering over Wifi this
         should be empty.  An example would be "softap.*" -->
    <string-array translatable="false" name="config_tether_wifi_regexs">
    <item>"wlan0"</item>
    </string-array>

rtl8188eu模组支持miracast功能,为了Settings界面显示miracast功能,需要在device/softwinner/fiber-evb/overlay/frameworks/base/core/res/res/values/config.xml文件中作如下配置:

<!-- Whether WiFi display is supported by this device.
         There are many prerequisites for this feature to work correctly.
         Here are a few of them:
         * The WiFi radio must support WiFi P2P.
         * The WiFi radio must support concurrent connections to the WiFi display and
           to an access point.
         * The Audio Flinger audio_policy.conf file must specify a rule for the "r_submix"
           remote submix module.  This module is used to record and stream system
           audio output to the WiFi display encoder in the media server.
         * The remote submix module "audio.r_submix.default" must be installed on the device.
         * The device must be provisioned with HDCP keys (for protected content).
    -->
    <bool name="config_enableWifiDisplay">true</bool>

标签: usb三极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台