- 浏览: 365655 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
loveskey:
找了好久,可算是找到了。感谢
dx.jar dx.bat -
zhaoyi168:
可以把工程的代码发给我吗?
ZJLN1982@yahoo.co ...
Athrun Demo -
ergodic09:
請問樓主 我目前在porting AR6003但是無法自己產生 ...
009-Android平台开发-WIFI function porting-WIFI功能移植 -
iedj99fei:
...
androi中xliff:g
编译代码时,本目录下用mm,上级目录用mmm,如果加上参数-B则表示强制该目录下的所有文件。
如果编译时显示的编译信息有乱码情况,则需要在该终端export LANG=en 。
移植framework,hardware,wpa_supplicant,dhcpcd及system/core/init
一 修改framework
./frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java
将mInterfaceName = SystemProperties.get("wifi.interface", "tiwlan0");改成 mInterfaceName = SystemProperties.get("wifi.interface", "eth0");
编译生成
framework.jar
更新jar包:
adb push system/framework/framework.jar /system/framework
二 修改hardware
./hardware/libhardware_legacy/wifi/wifi.c
1 引用库文件:#include <unistd.h>
2 更改wifi接口,将#define WIFI_DEF_IFNAME "wlan0"改成 #define WIFI_DEF_IFNAME "eth0"(视项目具体情况而定)
3 更改驱动名及路径:将#define WIFI_DRIVER_MODULE_PATH "/system/lib/modules/wlan.ko"改成 #define WIFI_DRIVER_MODULE_PATH "/data/dhd.ko"
4 更改驱动模块名:将#define WIFI_DRIVER_MODULE_NAME "wlan" 改成 #define WIFI_DRIVER_MODULE_NAME "dhd"
5 更改wifi接口路径:将static const char IFACE_DIR[] = "/data/system/wpa_supplicant"; 改成 static const char IFACE_DIR[] = "/data/wpa_supplicant";
6 增加wifi上电,下电代码:
static const char CONFIG_UP_NAME[] = "wifi_up";
static const char CONFIG_DOWN_NAME[] = "wifi_down";
static const char WIFI_POWER_PATH[] = "/sys/devices/platform/bcm4319-pm/power_state";
static const char * off_state = "off";
static const char * on_state = "on";
static int set_wifi_power(int on) // on is 0: wifi down power, otherwise wifi up power.
{
int fd = -1;
int ret = -1;
char buf[6];
int len;
fd = open(WIFI_POWER_PATH, O_WRONLY);
//fd = open("/sys/devices/platform/bcm4319-pm/power_state", O_RDWR);
LOGE("set_wifi_power fd=%d\n", fd);
if (fd < 0) {
LOGE("open wifi file %s failed.", WIFI_POWER_PATH);
goto out;
}
if (on) {
len = sprintf(buf, "on");
} else {
len = sprintf(buf, "off");
}
len = write(fd, buf, len);
if (len < 0) {
LOGE("write wifi file %s failed.", WIFI_POWER_PATH);
goto out;
}
LOGE("set wifi power %s", WIFI_POWER_PATH);
LOGE("whether wifi is on : %s", buf);
close(fd);
return 0;
out:
if (fd >= 0) {
close(fd);
}
return ret;
}
在insmod方法中的free(module);后面增加如下代码:
if (0 == ret) {
property_set("ctl.start", CONFIG_UP_NAME);
}
在rmmod方法中的while循环后面增加如下代码:
if (0 == ret) {
property_set("ctl.start", CONFIG_DOWN_NAME);
}
在wifi_load_driver中调用set_wifi_power(1);
在wifi_unload_driver中调用set_wifi_power(0);
编译生成
libhardware_legacy.so
更新so文件
adb push system/lib/libhardware_legacy.so /system/lib
三 修改wpa_supplicant
./external/wpa_supplicant/wpa_supplicant.conf
将 ctrl_interface=wlan0 改成 ctrl_interface=/data/wpa_supplicant
编译生成
wpa_supplicant.conf
更新文件
adb push system/etc/wifi/wpa_supplicant.conf /system/etc/wifi
如果希望log中能打印出所有级别的log信息,则可以更改wpa_supplicant目录下的common.h文件。
将wpa_printf定义中的if ((level) >= MSG_INFO) 改成 if ((level) >= MSG_ERROR) 如下:
#define wpa_printf(level, ...) \
do { \
if ((level) >= MSG_ERROR) { \
android_printf((level), __VA_ARGS__); \
} \
} while (0)
编译生成
wpa_supplicant
更新bin文件
adb push system/bin/wpa_supplicant /system/bin
四 修改dhcpcd
1 ./external/dhcpcd/Android.mk
将以下代码打开
include $(CLEAR_VARS)
LOCAL_MODULE := dhcpcd.conf
LOCAL_MODULE_TAGS := user
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(etc_dir)
LOCAL_SRC_FILES := android.conf
include $(BUILD_PREBUILT)
2 ./external/dhcpcd/android.conf
将interface wlan0注释掉
3 ./external/dhcpcd/dhcp.c
将 return (const uint8_t *)dhcp_opt_buffer; 改成 return (const uint8_t *)&dhcp_opt_buffer;
4 ./external/dhcpcd/dhcpcd-hooks/20-dns.conf
在set_dns_props方法最后加上如下脚本代码:
for i in 1 2 3 4; do
setprop net.dns${i} ""
done
count=1
for dnsaddr in ${new_domain_name_servers}; do
setprop net.dns${count} ${dnsaddr}
count=$(($count + 1))
done
在unset_dns_props方法中加上如下脚本代码:
for i in 1 2 3 4; do
setprop dhcp.${interface}.dns${i} ""
done
for i in 1 2 3 4; do
setprop net.dns${i} ""
done
编译生成
dhcpcd,dhcpcd.conf, 20-dns.conf
更新文件
adb push system/bin/dhcpcd /system/bin
adb push system/etc/dhcpcd.conf /system/etc/dhcpcd
adb push system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf /system/etc/dhcpcd/dhcpcd-hooks
五 修改system/core
./system/core/init/property_service.c
如下结构体内容:
struct {
const char *prefix;
unsigned int uid;
unsigned int gid;
} property_perms[] = {
{ "net.rmnet0.", AID_RADIO, 0 },
{ "net.gprs.", AID_RADIO, 0 },
{ "net.ppp", AID_RADIO, 0 },
{ "ril.", AID_RADIO, 0 },
{ "gsm.", AID_RADIO, 0 },
{ "persist.radio", AID_RADIO, 0 },
{ "net.dns", AID_RADIO, 0 },
{ "net.", AID_SYSTEM, 0 },
{ "dev.", AID_SYSTEM, 0 },
{ "runtime.", AID_SYSTEM, 0 },
{ "hw.", AID_SYSTEM, 0 },
{ "sys.", AID_SYSTEM, 0 },
{ "service.", AID_SYSTEM, 0 },
{ "wlan.", AID_SYSTEM, 0 },
{ "dhcp.", AID_SYSTEM, 0 },
{ "dhcp.", AID_DHCP, 0 },
{ "net.", AID_DHCP, 0 }, // add to avoid "permission denied" error
{ "net.dns", AID_DHCP, 0 }, // add to avoid "permission denied" error
{ "vpn.", AID_SYSTEM, 0 },
{ "vpn.", AID_VPN, 0 },
{ "debug.", AID_SHELL, 0 },
{ "log.", AID_SHELL, 0 },
{ "service.adb.root", AID_SHELL, 0 },
{ "persist.sys.", AID_SYSTEM, 0 },
{ "persist.service.", AID_SYSTEM, 0 },
{ "persist.security.", AID_SYSTEM, 0 },
{ "xec.", AID_SYSTEM, 0 },
{ "user.", AID_SYSTEM, 0 },
{ "media.", AID_MEDIA, 0 },
{ NULL, 0, 0 }
};
/*
* White list of UID that are allowed to start/stop services.
* Currently there are no user apps that require.
*/
struct {
const char *service;
unsigned int uid;
unsigned int gid;
} control_perms[] = {
{ "dumpstate",AID_SHELL, AID_LOG },
{ "pppd_gprs", AID_RADIO, AID_RADIO },
{ "pppd_gprs2", AID_RADIO, AID_RADIO },
{ NULL, 0, 0 }
};
编译生成
system/lib/libpixelflinger.so
system/bin/test-opengl-codegen
root/init
最后将以上文件更新到设备上
六 更新驱动
adb push dhd.ko /data
adb push fw_bcm4329.bin /data
adb push nvram.txt /data
注意:如果移植后出现设备不能启动,并且log中一直循环打印“NetId1.0......”时,则可以考虑编译环境是否正确,版本是否一致。
比如,你的设备上烧写的是最新的image,kernel等,而你在本地的老版本中更改文件后,编译出的是老版本的bin文件,jar包,
当push到设备中后出现版本不一致,最新版本中很多库文件或者设备的配置环境已经发生改变,造成设备不能正常启动。
发表评论
-
eclipse中安装插件地址
2014-03-07 15:08 755http://subclipse.tigris.org/up ... -
ubuntu13下载android源码
2014-02-27 18:23 632一、注意repo的正确地址 repo:curl " ... -
用例无法运行,报如下错:Exception during suite construction
2014-02-26 15:47 1264一 前提 1、 测试工程中的所有参数已配置好,如ins ... -
dx.jar dx.bat
2013-06-17 19:33 2254Android SDK中dx.jar, dx.bat文件的备份 ... -
Please ensure that adb is correctly located..... 问题
2013-04-16 09:44 963解决方法: 方法一、查毒杀毒,也许了病毒占用了adb ... -
PC端通过adb与设备端通信
2013-03-28 09:36 1509adb 全称Android Debug Bri ... -
Unable to execute dex: Multiple dex files define Lorg/taptwo/android/widget/Circ
2013-02-21 15:07 2574问题:[2013-02-21 15:01:02 - Dex ... -
android viewTree and decorView
2013-01-30 13:55 1694Android ViewTree and DecorView ... -
No active compatible AVD's or devices found. Relaunch this configuration after c
2013-01-29 10:56 8758问题:No active compatible AVD's ... -
代码对比工具
2013-01-24 15:33 644windows: http://www.scooterso ... -
android最新源码下载
2013-01-23 09:57 1047源码下载:https://source.android.co ... -
Run MonkeyTalk Scripts via Ant in Windows
2012-12-18 20:24 1275Run MonkeyTalk Scripts via ... -
Android中cpu,memory,Battery的计算
2012-11-20 19:59 66081 Memory的分配(RAM而非ROM) 网址: •ht ... -
http://code.taobao.org/p/TMTS/src/
2012-10-12 17:38 1029http://code.taobao.org/p/TMTS/s ... -
string.xml文件中的特殊符号转换符
2012-09-24 09:09 775strings.xml文件中需要对特殊符号(如%,'等)进行转 ... -
web server 中设置wifi代理
2012-09-24 09:07 891DefaultHttpClient httpClient = ... -
Android开发一些常见问题
2012-09-24 09:06 7401:当追踪问题时,代码中实在找不出问题所以,代码的逻辑完全正确 ... -
将log信息写入sdcard
2012-07-05 17:14 868File mFile; private void write ... -
string.xml文件中的特殊符号转换符
2012-06-19 19:39 1048strings.xml文件中需要对特殊符号(如%,'等)进行转 ... -
关于popupWindow的dismiss
2012-06-17 16:13 8584View contentView = LayoutInflat ...
相关推荐
移植wifidog到MTK Openwrt的第一步是添加wifidog的下载源。由于默认的OpenWrt源码中并未包含wifidog,你需要在`feeds.conf.default`文件中加入wifidog的GitHub仓库链接。这可以通过运行`vim feeds.conf.default`命令...
Android Q WIFI 模块移植指南 随着 Android 系统的不断发展和更新,WIFI 模块的移植成为 Android 设备开发中一个非常重要的步骤。T507 Android Q WIFI 模块移植说明文档提供了将 WIFI 模块移植到 Android Q 系统上...
RealTek wifi驱动移植说明文档主要针对Android平台,提供了针对RealTek wifi驱动在Rockchip(RK)平台上的移植方法。文档详细介绍了如何将RealTek的USB和SDIO wifi驱动移植到RK平台上,并针对不同内核版本(如kernel...
aic8800蓝牙WiFi详细移植文档
根据文件内容,以上是关于全志A33开发板、Linux系统、WiFi模块移植、Ubuntu环境配置、交叉编译、Linux内核、编译器安装和配置、网络限制以及wpa_supplicant的知识点。这些知识点对于进行类似系统移植和开发工作的...
全志A31平台的WIFI移植是指将WIFI模块集成到基于全志A31处理器的Android设备中,以实现无线网络通信的功能。在移植过程中需要处理内核配置、引脚配置、平台配置以及与具体WIFI模组相关的配置和代码修改。 文档主要...
Android HAL USB WIFI 驱动移植详解,都是一些比较常用的USB WIFI包括rtl8192cu ,rtl8192du ,rtl8192ce ,rtl8192de,rtl8723as ,rtl8723au ,rtl8189es ,android WIFI 架构和控制流程详解,理解Android架构从Linux底层...
在Android 13操作系统中移植Wi-Fi功能是一项复杂而关键的任务,涉及到多个组件和步骤。本文档将详细阐述如何进行这一过程,并提供有关NXP无线芯片组的特定信息。NXP是一家知名的半导体制造商,其产品广泛应用于Wi-Fi...
基于ubuntu-2.6.35内核的SDIO-WiFi驱动移植
《RTL8723BU WiFi 移植包详解》 在现代移动设备和物联网(IoT)领域,无线网络连接是不可或缺的一部分。Reltek的RTL8723BU芯片是一款单2.4GHz频段的WiFi模块,同时支持蓝牙功能,广泛应用于各种嵌入式系统和智能硬件...
"Linux WIFI驱动移植教程" Linux WIFI驱动移植教程是一篇详细的教程,旨在指导读者如何将 WIFI驱动移植到 Linux 系统上。该教程涵盖了从配置红框内设置到创建 WIFI 连接脚本的整个过程。 知识点1:配置红框内设置...
WIFI驱动移植是一项涉及到硬件驱动层与操作系统层面的复杂工作,它要求开发者对WIFI技术、嵌入式系统编程、以及具体目标平台的硬件和软件架构有深入的理解。下面详细解释标题和描述中所涉及的知识点。 首先,WIFI...
移植WiFi驱动至mini2440平台的Linux-3.1.5内核是一项挑战性的任务,涉及到内核配置、驱动匹配、文件系统构建等多个环节。通过详细的步骤指导与实践经验分享,本文为后续的开发者提供了宝贵的参考,有助于加速类似...
总的来说,移植WIFI驱动到Linux 2.6.21内核是一项技术性强且需要耐心的任务。在实践中,可能会遇到各种问题,如驱动与内核版本不兼容、硬件兼容性问题或编译错误。解决这些问题需要扎实的Linux内核知识和调试技巧。...
标题中的“rtl8723du WiFi驱动,移植SDK”涉及到的是无线网络适配器的驱动程序开发,特别是针对Realtek RTL8723DU这一芯片的。Realtek RTL8723DU是一款常见的2.4GHz单频Wi-Fi芯片,广泛应用于各种嵌入式设备和笔记本...
在本文中,我们将深入探讨如何在基于ARM架构的S5PC100处理器上移植WiFi驱动,特别是针对RT73无线网卡的驱动移植。这个过程是嵌入式Linux系统开发中的一个关键环节,使得设备能够连接并使用WiFi网络。以下是一步步的...
WiFi驱动移植是一个复杂而关键的过程,特别是在嵌入式系统中,比如使用新唐NUC980系列MCU的设备。以下是对标题和描述中提到的知识点的详细说明: 1. **驱动移植**: - **环境准备**:移植驱动前,需要了解目标硬件...
Linux 下移植 WiFi 的步骤 Linux 操作系统作为目前最流行的开源操作系统之一,在无线网络连接方面也提供了强大的支持。WiFi 是无线网络连接中最常用的技术,本文将详细介绍 Linux 下移植 WiFi 的步骤,包括获取驱动...