硬件imx6q
系统:android M

1.参考Quick Start Guide for Driver Compilation and Installation集成驱动到内核里

1)把driver源码集成到drivers/net/wireless中
kernel_imx/drivers/net/wireless/rtl8188eus
2)编译内核生成8188eu.ko

-- a/kernel_imx/drivers/net/wireless/Kconfig
+++ b/kernel_imx/drivers/net/wireless/Kconfig
@@ -215,6 +215,7 @@ config USB_NET_RNDIS_WLANIf you choose to build a module, it'll be called rndis_wlan.source "drivers/net/wireless/rtl818x/Kconfig"
+source "drivers/net/wireless/rtl8188eus/Kconfig"
--- a/kernel_imx/drivers/net/wireless/Makefile
+++ b/kernel_imx/drivers/net/wireless/Makefile
@@ -1,7 +1,7 @@## Makefile for the Linux Wireless network device drivers.#
-
+obj-$(CONFIG_RTL8188EU) += rtl8188eus/
--- a/kernel_imx/drivers/net/wireless/rtl8188eus/Kconfig
+++ b/kernel_imx/drivers/net/wireless/rtl8188eus/Kconfig
@@ -1,5 +1,5 @@config RTL8188EU
-       tristate "Realtek 8188E USB WiFi"
+       tristate "Realtek 8188EUS USB WiFi"--- a/kernel_imx/drivers/net/wireless/rtl8188eus/Makefile
+++ b/kernel_imx/drivers/net/wireless/rtl8188eus/Makefile
@@ -14,7 +14,9 @@ EXTRA_CFLAGS += -Wno-unused-parameterEXTRA_CFLAGS += -Wno-unused-functionEXTRA_CFLAGS += -Wno-unused#EXTRA_CFLAGS += -Wno-uninitialized
-#EXTRA_CFLAGS += -Wno-error=date-time  # Fix compile error on gcc 4.9 and later
+EXTRA_CFLAGS += -Wno-error=date-time   # Fix compile error on gcc 4.9 and later
+EXTRA_CFLAGS += -Wno-error=implicit-function-declaration
+EXTRA_CFLAGS += -fno-picEXTRA_CFLAGS += -I$(src)/includeEXTRA_CFLAGS += -I$(src)/hal/phydm
@@ -75,7 +77,7 @@ CONFIG_RTW_SDIO_PM_KEEP_POWER = y###################### MP HW TX MODE FOR VHT #######################CONFIG_MP_VHT_HW_TX_MODE = n###################### Platform Related #######################
-CONFIG_PLATFORM_I386_PC = y
+CONFIG_PLATFORM_I386_PC = nCONFIG_PLATFORM_ANDROID_X86 = nCONFIG_PLATFORM_ANDROID_INTEL_X86 = nCONFIG_PLATFORM_JB_X86 = n
@@ -126,6 +128,7 @@ CONFIG_PLATFORM_MOZART = nCONFIG_PLATFORM_RTK119X = nCONFIG_PLATFORM_NOVATEK_NT72668 = nCONFIG_PLATFORM_HISILICON = n
+CONFIG_PLATFORM_ARM_IMX6QD = y###############################################################CONFIG_DRVEXT_MODULE = n
@@ -921,6 +924,17 @@ MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/INSTALL_PREFIX :=endif+ifeq ($(CONFIG_PLATFORM_ARM_IMX6QD), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_RADIO_WORK
+ARCH := arm
+CROSS_COMPILE :=/home/freescale/myandroid/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
+KSRC :=/home/freescale/myandroid/kernel_imx
+
+MODULE_NAME := 8188eu
+endif把生成的ko放在文件系统中
cp kernel_imx/drivers/net/wireless/rtl8188eus/8188eu.ko device/fsl/common/wifi/device/fsl/imx6/imx6.mk
PRODUCT_COPY_FILES +=   \
device/fsl/common/wifi/8188eu.ko:system/lib/8188eu.ko \

2.修改frescale imx6 的wpa_supplicant_8

编译后生成:system/bin/wpa_supplicant
system/bin/wpa_cli

--- a/external/wpa_supplicant_8/hostapd/Android.mk
+++ b/external/wpa_supplicant_8/hostapd/Android.mk
@@ -30,6 +30,9 @@ L_CFLAGS += -Wno-unused-parameter# Set Android extended P2P functionalityL_CFLAGS += -DANDROID_P2P+ifeq ($(BOARD_HOSTAPD_PRIVATE_LIB),)
+L_CFLAGS += -DANDROID_LIB_STUB
+endif# Use Android specific directory for control interface socketsL_CFLAGS += -DCONFIG_CTRL_IFACE_CLIENT_DIR=\"/data/misc/wifi/sockets\"
@@ -973,7 +976,9 @@ LOCAL_MODULE_TAGS := optionalifdef CONFIG_DRIVER_CUSTOMLOCAL_STATIC_LIBRARIES := libCustomWifiendif
-LOCAL_STATIC_LIBRARIES += lib_driver_cmd_bcmdhd
+ifneq ($(BOARD_HOSTAPD_PRIVATE_LIB),)
+LOCAL_STATIC_LIBRARIES += $(BOARD_HOSTAPD_PRIVATE_LIB)
+endif--- a/external/wpa_supplicant_8/wpa_supplicant/Android.mk
+++ b/external/wpa_supplicant_8/wpa_supplicant/Android.mk
@@ -1558,9 +1558,8 @@ LOCAL_MODULE := wpa_supplicantifdef CONFIG_DRIVER_CUSTOMLOCAL_STATIC_LIBRARIES := libCustomWifiendif
-LOCAL_STATIC_LIBRARIES += lib_driver_cmd_bcmdhd //这里被写死了如果不改会编译出错(坑)
-ifneq ($(BOARD_WPA_SUPPLICANT_PRIVATE_LIB_BCM),)
-LOCAL_STATIC_LIBRARIES += $(BOARD_WPA_SUPPLICANT_PRIVATE_LIB_BCM)
+ifneq ($(BOARD_WPA_SUPPLICANT_PRIVATE_LIB),)
+LOCAL_STATIC_LIBRARIES += $(BOARD_WPA_SUPPLICANT_PRIVATE_LIB)endif

3.把产家提供的realtek/wlan放在android 源码的hardware目录下

编译的条件是BOARD_WIFI_VENDOR := realtek
WPA_SUPPLICANT_VERSION := VER_0_8_X
编译后会生成lib_driver_cmd_rtl.a 静态库
lib_driver_cmd_rtl.a

4.BoardConfig.mk配置加载哪一项wifi模组

device/fsl/sabresd_6dq/BoardConfig.mk#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
BOARD_USE_WIFI := rtl8188eu
BOARD_WLAN_DEVICE := rtl8188eu
WIFI_DRIVER_FW_PATH_STA := "STA"
WIFI_DRIVER_FW_PATH_AP := "AP"
WIFI_DRIVER_FW_PATH_P2P := "P2P"
WIFI_DRIVER_FW_PATH_PARAM := "/dev/null"WIFI_DRIVER_MODULE_NAME := "8188eu"
WIFI_DRIVER_MODULE_PATH := "/system/lib/8188eu.ko"
WIFI_DRIVER_MODULE_ARG  := "ifname=wlan0 if2name=p2p0"WIFI_DRIVER_FW_PATH_STA   := "STA"
WIFI_DRIVER_FW_PATH_AP    := "AP"
WIFI_DRIVER_FW_PATH_P2P   := "P2P"
WIFI_DRIVER_FW_PATH_PARAM := "/dev/null"
endif

5.init.rc

service p2p_supplicant /system/bin/wpa_supplicant \-ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf \-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \-I/system/etc/wifi/wpa_supplicant_overlay.conf \-O/data/misc/wifi/sockets -puse_p2p_group_interface=1 \-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0class mainsocket wpa_wlan0 dgram 660 wifi wifidisabledoneshotservice wpa_supplicant /system/bin/wpa_supplicant \-iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf \-I/system/etc/wifi/wpa_supplicant_overlay.conf \-puse_p2p_group_interface=1p2p_device=1 \-g/data/misc/wifi/sockets/p2p0 \-O/data/misc/wifi/sockets -dd \-e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0class mainsocket wpa_wlan0 dgram 660 wifi wifidisabledoneshot

6.wifi.c

Android M可以不用修改,Android O修改insmod增加权限

--- a/hardware/libhardware_legacy/wifi/wifi.c
+++ b/hardware/libhardware_legacy/wifi/wifi.c
@@ -23,7 +23,7 @@#include <sys/stat.h>#include <unistd.h>#include <poll.h>
-
+#include <sys/syscall.h>#include "hardware_legacy/wifi.h"#ifdef LIBWPA_CLIENT_EXISTS#include "libwpa_client/wpa_ctrl.h"
@@ -73,6 +73,9 @@ static int exit_sockets[2];static char primary_iface[PROPERTY_VALUE_MAX];// TODO: use new ANDROID_SOCKET mechanism, once support for multiple// sockets is in"ifname=wlan0 if2name=p2p0"#ifndef WIFI_DRIVER_MODULE_ARG#define WIFI_DRIVER_MODULE_ARG          ""
@@ -132,21 +135,21 @@ static char supplicant_name[PROPERTY_VALUE_MAX];/* Is either SUPP_PROP_NAME or P2P_PROP_NAME */static char supplicant_prop_name[PROPERTY_KEY_MAX];-static int insmod(const char *filename, const char *args)
+int insmod(const char *filename, const char *args){
-    void *module;
-    unsigned int size;
-    int ret;
-
-    module = load_file(filename, &size);
-    if (!module)
+     /* O_NOFOLLOW is removed as wlan.ko is symlink pointing to
+        the vendor specfic file which is in readonly location */
+     int fd = open(filename, O_RDONLY | O_CLOEXEC);
+     if (fd == -1) {
+        ALOGD("insmod: open(\"%s\") failed: %s", filename, strerror(errno));return -1;
-
-    ret = init_module(module, size, args);
-
-    free(module);
-
-    return ret;
+     }
+     int rc = syscall(__NR_finit_module, fd, args, 0);
+     if (rc == -1) {
+       ALOGD("finit_module for \"%s\" failed: %s", filename, strerror(errno));
+     }
+     close(fd);
+     return rc;}

7.权限问题

针对Android N

10-01 11:49:28.170   541   541 I WifiStateMachin: type=1400 audit(0.0:18): avc: denied { sys_module } for capability=16 scontext=u:r:system_server:s0 tcontext=u:r:system_server:s0 tclass=capability permissive=1
10-01 11:49:28.170   541   541 I WifiStateMachin: type=1400 audit(0.0:19): avc: denied { module_load } for scontext=u:r:system_server:s0 tcontext=u:r:system_server:s0 tclass=system permissive=1
type=1400 audit(970404009.360:17): avc: denied { sys_module } for pid=543 comm="WifiStateMachin" capability=16 scontext=u:r:system_server:s0 tcontext=u:r:system_server:s0 tclass=capability permissive=1init: Starting service 'p2p_supplicant'...
type=1400 audit(1980266916.550:19): avc: denied { open } for pid=1258 comm="wpa_supplicant" path="/data/misc/wifi/entropy.bin" dev="mmcblk0p4" ino=1253749 scontext=u:r:wpa:s0 tcontext=u:object_r:system_data_file:s0 tclass=file permissive=1
type=1400 audit(1980266916.560:20): avc: denied { write } for pid=1258 comm="wpa_supplicant" name="entropy.bin" dev="mmcblk0p4" ino=1253749 scontext=u:r:wpa:s0 tcontext=u:object_r:system_data_file:s0 tclass=file permissive=1
init: Service 'p2p_supplicant' (pid 1258) exited with status 255fix:
--- a/device/fsl/imx6/sepolicy/device.te
+++ b/device/fsl/imx6/sepolicy/device.te
@@ -1,2 +1,3 @@type caam_device, dev_type;type pxp_device, dev_type;
+type wlan_device, dev_type;--- a/device/fsl/imx6/sepolicy/system_server.te
+++ b/device/fsl/imx6/sepolicy/system_server.te
@@ -4,3 +4,7 @@ allow system_server system_data_file:file {relabelto rw_file_perms};allow system_server system_data_file:dir {relabelto rw_dir_perms};allow system_server kernel:system { syslog_read };allow system_server debugfs_tracing:file { write };
+allow system_server system_file:system module_load;
+allow system_server kernel:key search;
+allow system_server wlan_device:chr_file rw_file_perms;
+allow system_server self:capability sys_module;--- a/system/sepolicy/domain.te
+++ b/system/sepolicy/domain.te
@@ -468,12 +468,12 @@ neverallow {-system_server-system_app-init
+  -wpa-installd # for relabelfrom and unlink, check for this in explicit neverallow} system_data_file:file no_w_file_perms;device/fsl/imx6/sepolicy/wpa.te
allow wpa system_data_file:file {open write create setattr rename unlink};
allow wpa system_data_file:dir {create setattr write add_name remove_name};
allow wpa system_data_file:sock_file {create setattr write};

8.wifi 显示x号无法上网

--- a/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -85,9 +85,9 @@ public class NetworkMonitor extends StateMachine {// Default configuration values for captive portal detection probes.// TODO: append a random length parameter to the default HTTPS url.// TODO: randomize browser version ids in the default User-Agent String.
-    private static final String DEFAULT_HTTPS_URL     = "https://www.google.com/generate_204";
+    private static final String DEFAULT_HTTPS_URL     = "https://captive.v2ex.co/generate_204";private static final String DEFAULT_HTTP_URL      =
-            "http://connectivitycheck.gstatic.com/generate_204";
+            "http://captive.v2ex.co/generate_204";或者调试的时候用
adb shell settings put global captive_portal_detection_enabled 0关闭wfif检测然后重启

9.内核驱动去掉打印调试信息

--- a/kernel_imx/drivers/net/wireless/rtl8188eus/include/autoconf.h
+++ b/kernel_imx/drivers/net/wireless/rtl8188eus/include/autoconf.h
@@ -318,7 +318,7 @@/** Debug Related Config*/
-#define DBG    1
+#define DBG    0--- a/kernel_imx/drivers/net/wireless/rtl8188eus/include/rtw_debug.h
+++ b/kernel_imx/drivers/net/wireless/rtl8188eus/include/rtw_debug.h
@@ -183,8 +183,8 @@ extern void rtl871x_cedbg(const char *fmt, ...);#define _dbgdump rtl871x_cedbg#define _seqdump(sel, fmt, arg...) _dbgdump(fmt, ##arg)#elif defined PLATFORM_LINUX
-       #define _dbgdump printk
-       #define _seqdump seq_printf
+       #define _dbgdump //printk
+       #define _seqdump //seq_printf

RTL8188EUS Anaroid M Porting相关推荐

  1. I.MX6 Goodix GT9xx touchscreen driver porting

    /************************************************************************* I.MX6 Goodix GT9xx touchs ...

  2. I.MX6 Android i2c-tools porting

    /*************************************************************************** I.MX6 Android i2c-tools ...

  3. MF Porting之USB驱动开发

    花费了近三个礼拜的时间,终于完成了TI开发板的USB驱动开发,现在回头想一想,其实也没有什么,具体硬件方面的通信由DM355实现了,软件层面的数据交互由MF Porting实现了,所做的也就是熟悉了解 ...

  4. AliOS Things 硬件抽象层(HAL)对接系列2 — SPI driver porting

    HAL层(Hardware abstraction layer) 的目的是为了屏蔽底层不同芯片平台的差异,从而使驱动层上面的软件不会随芯片平台而改变.AliOS Things定义了全面的HAL抽象层, ...

  5. [gstreamer] [002] porting from 0.10 to 1.0 knew how

    前言:gstreamer 的 1.0 porting guide 里面有提到一下改变,但是,并不是覆盖了全面,本文结合porting 的实际写成,涉及整个porting 真正要用的的一下接口. gst ...

  6. OK335xS dhcpcd porting

    /*********************************************************************** OK335xS dhcpcd porting* 说明: ...

  7. 不到600美元,即可获取一套MF Porting kit 3.0

    Net Micro Framework v3.0 Porting Kit (随着MF的大力推广,以后可讨论的人群会越来越多了,这真是值得期待的事) 相关链接:http://store.microsof ...

  8. 嵌入式Linux:移植USB接口的RTL8188EUS、RTL8188ETV WIFI模块

    文章目录 参考博客 github上面的源码 神仙网站 一.驱动移植 二.内核配置 1.配置USB支持设备 2.配置支持WIFI设备 3.配置支持IEEE 802.11 三.编译.拷贝和运行 1.运行测 ...

  9. RTL8188EUS驱动程序编译步骤

    说明 出于学习的目的,需要在hi3518ev200平台上接入RTL8188无线网卡传输数据.本文记录自己对编译操作的步骤,以期望帮助到其它的初学者. RTL8188简介 嵌入式应用中可供选择的WIFI ...

最新文章

  1. php主要算法设计,四种排序算法设计(PHP)
  2. 关于Ajax 错误:'sys'未定义解决方法.
  3. 区块链时代的拜占庭容错:Tendermint(五)
  4. Jersey注解详解
  5. python replace()
  6. Ubuntu Mate 开机自启ROS
  7. PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)
  8. 二位数组按某一个或多个字段值(升序/降序)排序
  9. 杭电1259ZJUTACM
  10. matlab画直方图_直方图规定化+暗通道去雾 python
  11. 批量 材质 调整_3dmax怎么批量修改材质
  12. React_music开发日记
  13. [NOIP2015普及组]推销员
  14. 开源中国部分源代码分享
  15. 虚拟机关机出现shutting down... running guests on default URT
  16. 谈谈eve-ng仿真模器
  17. 一块链习公开课:从 0 到 1 构建去中心化应用 | ArcBlock 预告
  18. dedecms模板教程:织梦模板网站SEO优化教程
  19. ACW 835. Trie字符串统计
  20. uCore OS(on RISC-V64)——LAB1:中断机制

热门文章

  1. 计算机网络专业的自我鉴定,计算机网络技术专业自我鉴定
  2. 拆修微软光学极动鲨鼠标
  3. Android 图形处理特效 Matrix 的set 、 pre、post方法的区别和使用
  4. 不锈钢侧冲孔发光字制作过程中需留神的细节问题
  5. Git安装配置与使用(超级详细)
  6. torch.arange()与torch.range()
  7. 零基础学Python 开篇--第0节:全套学习路线
  8. ONNX-TensorRT安装教程
  9. js循环发起ajax请求
  10. 某房屋中介网站爬虫实例