博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RTL8188EUS Anaroid M Porting
阅读量:4074 次
发布时间:2019-05-25

本文共 11729 字,大约阅读时间需要 39 分钟。

硬件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_WLAN          If 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-parameter EXTRA_CFLAGS += -Wno-unused-function EXTRA_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-pic EXTRA_CFLAGS += -I$(src)/include EXTRA_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 = n CONFIG_PLATFORM_ANDROID_X86 = n CONFIG_PLATFORM_ANDROID_INTEL_X86 = n CONFIG_PLATFORM_JB_X86 = n@@ -126,6 +128,7 @@ CONFIG_PLATFORM_MOZART = n CONFIG_PLATFORM_RTK119X = n CONFIG_PLATFORM_NOVATEK_NT72668 = n CONFIG_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.mkPRODUCT_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 functionality L_CFLAGS += -DANDROID_P2P+ifeq ($(BOARD_HOSTAPD_PRIVATE_LIB),)+L_CFLAGS += -DANDROID_LIB_STUB+endif # Use Android specific directory for control interface sockets L_CFLAGS += -DCONFIG_CTRL_IFACE_CLIENT_DIR=\"/data/misc/wifi/sockets\"@@ -973,7 +976,9 @@ LOCAL_MODULE_TAGS := optional ifdef CONFIG_DRIVER_CUSTOM LOCAL_STATIC_LIBRARIES := libCustomWifi endif-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_supplicant ifdef CONFIG_DRIVER_CUSTOM LOCAL_STATIC_LIBRARIES := libCustomWifi endif-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 ConfigurationBOARD_WIFI_VENDOR := realtekifeq ($(BOARD_WIFI_VENDOR),realtek)WPA_SUPPLICANT_VERSION := VER_0_8_XBOARD_WPA_SUPPLICANT_DRIVER := NL80211BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtlBOARD_HOSTAPD_DRIVER := NL80211BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_rtlBOARD_USE_WIFI := rtl8188euBOARD_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_wlan0    class main    socket wpa_wlan0 dgram 660 wifi wifi    disabled    oneshotservice 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_wlan0    class main    socket wpa_wlan0 dgram 660 wifi wifi    disabled    oneshot

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 
#include
#include
-+#include
#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=110-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=1type=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=1type=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=1init: 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.teallow 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

转载地址:http://xxkni.baihongyu.com/

你可能感兴趣的文章
场景中,并没有灯源的存在,但是cube却会有灯光照射的反应,这就是Light Probe Group的作用。...
查看>>
unity3d 为什么要烘焙?烘焙作用是为了什么?
查看>>
[AR]高通Vuforia Getting Started
查看>>
Unity ios、android、pc一键打包(一)
查看>>
欧几里得空间
查看>>
今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因...
查看>>
Unity shader saturate
查看>>
_LightColor0将会是主要的directional light的颜色。
查看>>
Unity的Shader如何控制投影颜色
查看>>
Unity3d 下websocket的使用
查看>>
unity与android交互总结
查看>>
android studio 开发android app 真机调试
查看>>
两分钟彻底让你明白Android Activity生命周期(图文)!
查看>>
这几天用高通VUFORIA的体会
查看>>
ARGB_8888
查看>>
HoloLens的显示分辨率有多少?
查看>>
ThreadPool(线程池) in .Net
查看>>
为什么3D模型的网格由很多三角形来组成
查看>>
U3D OnDrawGizmos
查看>>
Unity Remote 5 使用
查看>>