手动加载驱动

####16th,Jul

驱动加载

modprobe libertas

modprobe libertas_sdio

加载第二行时出错拉

# modprobe libertas_sdio

libertas_sdio: Libertas SDIO driver

libertas_sdio: Copyright Pierre Ossman

model=0xb

sd8686_helper.bin sd8686.bin

init: untracked pid 958 exited

过了一会出现:

libertas: can't load helper firmware

libertas: failed to load helper firmware

libertas_sdio: probe of mmc2:0001:1 failed with error -2

但是用lsmod又能看到

# lsmod libertas_sdio 8776 0 - Live 0xbf022000

libertas 97416 1 libertas_sdio, Live 0xbf009000

usbserial 30256 0 - Live 0xbf000000

###使用insmod试一下

insmod

/lib/modules/2.6.24.7/kernel/drivers/net/wireless/libertas/libertas.ko

insmod

/lib/modules/2.6.24.7/kernel/drivers/net/wireless/libertas/libertas_sdio.ko

还是老样子

###发现系统中没有提到的文件fireware文件

从华恒的romfs/lib把fireware拷贝到 /nfs/rootfs/lib下

$$还是不行

###把fireware拷贝到system/etc/下面,终于可以加载了

如下:

# modprobe libertas_sdio

libertas_sdio: Libertas SDIO driver

libertas_sdio: Copyright Pierre Ossman

model=0xb

sd8686_helper.bin sd8686.bin

init: untracked pid 714 exited

init: untracked pid 717 exited

libertas: eth1: Marvell WLAN 802.11 adapter

$$$建议

Title:Android INIT not loading firmware

android员工答:You need to run the insmod in a separate process

launched by init.

#########

理解原理

Android uses a modified wpa_supplicant (external/wpa_supplicant)

daemon for wifi support which is controlled through a socket by

hardware/libhardware_legacy/wifi/wifi.c (WiFiHW) that gets

controlled from Android UI through android.net.wifi package from

frameworks/base/wifi/java/android/net/wifi/ and it's corresponding

jni implementation in

frameworks/base/core/jni/android_net_wifi_Wifi.cpp Higher level

network management is done in

frameworks/base/core/java/android/net

1.在build/target/board/generic/BoardConfig.mk中增加

BOARD_WPA_SUPPLICANT_DRIVER := WEXT

2.打开调试信息--可选

默认是不打开调试的

2.1 modify external/wpa_supplicant/common.c and set wpa_debug_level

= MSG_DEBUG

2.2 modify common.h and change #define wpa_printf from if ((level)

>= MSG_INFO) to if ((level) >= MSG_DEBUG)

3.创建system/etc/wifi/wpa_supplicant.conf

有2种socket

一种是android private socket

ctrl_interface=eth1

update_config=1

ap_scan=1 ###取决于wifi驱动,如果不行,则改为0试试

另一种是unix 标准socket,这里先选用第二种

ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi

update_config=1

ap_scan=1 ###取决于wifi驱动,如果不行,则改为0试试

4在init.rc中增加以下语句

#@qiu

mkdir

/system/etc/wifi 0777 wifi wifi

chmod 0777

/system/etc/wifi

chmod 0777

/system/etc/wifi/wpa_supplicant.conf

chown wifi

wifi /system/etc/wifi/wpa_supplicant.conf

mkdir /data/misc/wifi 0777 wifi wifi

mkdir /data/misc/wifi/sockets 0770 wifi wifi

chmod 0777 /data/misc/wifi

chmod 0777 /data/misc/wifi/wpa_supplicant.conf

chown wifi wifi /data/misc/wifi

chown wifi wifi /data/misc/wifi/wpa_supplicant.conf

#

wpa_supplicant socket (unix socket mode)

mkdir

/data/system/wpa_supplicant 0777 wifi wifi

chmod 0777

/data/system/wpa_supplicant

chown wifi

wifi /data/system/wpa_supplicant

#qiu@

##如果是private socket,则是

mkdir /system/etc/wifi 0777 wifi wifi

chmod 0777 /system/etc/wifi

chmod 0777 /system/etc/wifi/wpa_supplicant.conf

chown wifi wifi /system/etc/wifi/wpa_supplicant.conf

#wpa_supplicant control socket for android wifi.c (android private

socket)

mkdir /data/misc/wifi 0777 wifi wifi

mkdir /data/misc/wifi/sockets 0770 wifi wifi

chmod 0777 /data/misc/wifi

chmod 0777 /data/misc/wifi/wpa_supplicant.conf

chown wifi wifi /data/misc/wifi

chown wifi wifi /data/misc/wifi/wpa_supplicant.conf

5.在init.rc中添加wpa_supplicant和dhcpcd启动服务

service wpa_supplicant /system/bin/wpa_supplicant -dd -Dwext -ieth1

-c /system/etc/wifi/wpa_supplicant.conf

group system wifi inet

disabled

oneshot

##如果是pricvate socket则需要在group上面增加一行:

socket wpa_eth1 dgram 777 wifi wifi

service dhcpcd /system/bin/dhcpcd -f /system/etc/dhcpcd/dhcpcd.conf

-d eth1

group system dhcp wifi

disabled

oneshot

5.5增加/system/etc/dhcpcd/dhcpcd.conf文件内容

interface eth1

option subnet_mask, routers, domain_name_servers

6.把wifi驱动编译进内核

首先init.rc中增加

setprop wifi.interface "eth1"

setprop wlan.driver.status "ok"

其次在修改hardware/libhardware_legacy/wifi/wifi.c

新的out/target/product/generic/system/lib/libhardware_legacy.so---v2

在函数wifi_load_driver()的体的开头增加

//@qiu LOGE("Weber@wifi driver

loaded !");

return

0;

//qiu@

在函数wifi_unload_driver()体的开头增加

//@qiu

LOGE("Weber@wifi driver

unloaded!");

return

0;

//qiu@

####17th,Jul

把驱动从M改为*,得zImage-vvv39

开始启动:

加载firmware的时候出错

libertas: can't load helper firmware

libertas: failed to load helper firmware

libertas_sdio: probe of mmc2:0001:1 failed with error -2

看来是无法加载fireware

###尝试修改wifi.c让它自动加载模块

修改

#ifndef WIFI_DRIVER_MODULE_PATH1

#define

WIFI_DRIVER_MODULE_PATH1 "/system/lib/modules/libertas.ko"

#endif

#ifndef WIFI_DRIVER_MODULE_PATH2

#define

WIFI_DRIVER_MODULE_PATH2 "/system/lib/modules/libertas_sdio.ko"

#endif

#ifndef WIFI_DRIVER_MODULE_NAME1

#define

WIFI_DRIVER_MODULE_NAME1 "libertas"

#endif

#ifndef WIFI_DRIVER_MODULE_NAME2

#define

WIFI_DRIVER_MODULE_NAME2 "libertas_sdio"

#endif

并在此文件的后面代码中做一定修改,wifi_load_driver()函数中也做相应修改

编译得到libhardware_legacy.so---v3

-启动后在设置中点击wifi

串口显示如下,看来是能加载了

# libertas_sdio: Libertas SDIO driver

libertas_sdio: Copyright Pierre Ossman

model=0xb

sd8686_helper.bin sd8686.bin

init: untracked pid 954 exited

init: untracked pid 957 exited

libertas: eth1: Marvell WLAN 802.11 adapter

但是wifi图标下面显示wifi不可用

查看logcat的main:

7899 E/WifiHW ( 708): Cannot access

"/data/misc/wifi/wpa_supplicant.conf": Permission denied

7900 E/WifiHW ( 708): Wi-Fi will not be enabled

7901 W/WifiHW ( 708): Weber@wifi driver

unloaded!

7902 E/WifiService( 708):

Failed to start supplicant daemon.

7903 D/SettingsWifiEnabler( 791): Received wifi state changed from Enabling to Unknown

于是增加以下语句到init.rc

mkdir /data/misc/wifi 0770 wifi wifi

mkdir /data/misc/wifi/sockets 0770 wifi wifi

chmod 0770 /data/misc/wifi

chmod 0660 /data/misc/wifi/wpa_supplicant.conf

chown wifi wifi /data/misc/wifi

chown wifi wifi /data/misc/wifi/wpa_supplicant.conf

并且cp system/etc/wifi/wpa_supplicant.conf ./data/misc/wifi/

启动,终于能打开wifi,但还是无法打开网页

查看logcat

4564 E/wpa_supplicant( 917): Failed to read or

parse configuration '/system/etc/wifi/wpa_supplicant.conf'.

4565 E/WifiHW ( 708): Unable to

open connection to supplicant on "/data/system/wpa_supplicant/sta":

No such file or directory

4566 D/WifiService( 708): ACTION_BATTERY_CHANGED

pluggedType: 1

4899 E/WifiHW ( 708):

Supplicant not running, cannot connect

5574 E/WifiHW ( 708):

Supplicant not running, cannot connect

5575 V/WifiStateTracker( 708): Supplicant died

unexpectedly

5576 D/dalvikvm( 934): DexOpt: load 3102ms,

verify 1519ms, opt 24ms

5577 D/installd( 665): DexInv: --- END

'/system/app/Browser.apk' (success) ---

5578 D/NetworkStateTracker( 708): setDetailed

state, old =IDLE and new state=DISCONNECTED

5579 D/ConnectivityService( 708):

ConnectivityChange for WIFI: DISCONNECTED/DISCONNECTED

##在init.rc中把wpa_supplicant.conf权限修改为777,

还是有错误:

5573 E/WifiHW ( 708): Unable to

open connection to supplicant on "/data/system/wpa_supplicant/sta":

No such file or director

##在init.rc中增加以下几条语句

setprop

wifi.interface "eth1"

setprop

wlan.driver.status "ok"

setprop

wlan.interface "eth1"

结果还是不行logcat显示

E/WifiHW ( 708):Unable to open connection to

supplicant on "/data/system/wpa_supplicant/eth1": No such file or

directory

##在init.rc中dhcp服务启动是为eth1的增加wifi组权限

又出现新错误

如果开始就enable wifi就会出现以下错误:

E/WifiHW ( 709): Unable to open

connection to supplicant on "/data/system/wpa_supplicant/eth1":

Connection refused

因为这是开机默认启动wifi,如果不起动,错误则是和上一条相同

###18th,Jul

##尝试在wpa_supplicant.conf设置GROUP=system,还是不行,只好改回去

ls /data/system/wpa_supplicant/eth1 -l

srwxrwx--- 1

1010 1010 0 Jul 18 08:22 /data/system/wpa_supplicant/eth1

# ls /data/system/wpa_supplicant/eth1 -l

srwxrwxrwx 1

1010 1010 0 Jul 18 08:22 /data/system/wpa_supplicant/eth1

###18th,Jul手动调试

# wpa_supplicant -dd -Dwext -ieth1 -c

/system/etc/wifi/wpa_supplicant.conf&

# ioctl[SIOCSIWPMKSA]: Invalid argument《《《《输出的错误

# ls /data/system/wpa_supplicant/eth1 -l

srwxrwxrwx 1

1010 1010 0 Jul 18 13:14 /data/system/wpa_supplicant/eth1

#wpa_cli -i eth1 -p /data/system/wpa_supplicant

不知道该如何设置ap

bash# wpa_cli -ieth1 scan //搜索无线网

bash# wpa_cli -ieth1 scan_results //显示搜索结果

bash# wpa_cli -ieth1 add_network

bash# iwconfig eth1 essid "you_wifi_net"

bash# wpa_cli -ieth1 password 0 "password"

bash# wpa_cli -ieth1 enable_network

###19th,Jul

修改vi

frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java

把tiwlan0改eth1

暂时未编译

###开始没有选择第二步的debug选项,选上,在external/wpa_supplicant目录下有mm编译

得到

system/bin/wpa_cli---vvv1

system/lib/libwpa_client.so---vvv1

system/bin/wpa_supplicant---vvv1

###试一下android private socket

修改vi system/etc/wifi/wpa_supplicant.conf

vi data/misc/wifi/wpa_supplicant.conf

修改init.rc

在chmod那里把unix socket的那段注释

在启动wpa_supplicant的时候增加

socket wpa_eth1 dgram 660 wifi wifi

结果还是不行

###只好在external/wpa_supplicant/wpa_ctrl.c中添加

LOGW,注意得先加入头文件和LOG_TAG

17 #define LOG_TAG "WifiQiu"

18 #include "cutils/log.h"

mm编译得到

system/bin/wpa_cli---vvv2

system/lib/libwpa_client.so---vvv2

但是竟然没有WifiQiu输出,不知道是不是没有用make而是mm的缘故

###20th,Jul

1.BoardConfig.mk增加了HAVE_CUSTOM_WIFI_DRIVER_2 := true

2.修改wifi/wifi.c中使得检查和卸载驱动的两个函数,用make编译得到

libhardware_legacy.so---v4

system/bin/wpa_cli---vvv2.1

system/bin/wpa_supplicant-v2

system/lib/libwpa_client.so---vvv2.1

###上面的版本还没有来的及测试,有发现问题

1.突然发现external/wpa_supplicant/wpa_ctrl.c中LOG不够全面,

一共有三种情况,漏了一个函数没有加,于是增加LOGW并使之可以区分

2.根据手动strace wpa_cli的提示

access("/data/misc/wifi/wpa_supplicant", F_OK) = -1 ENOENT (No such

file or directory)

用grep 搜索到所在文件为external/wpa_supplicant/wpa_cli.c

把它修改为:/data/misc/wifi

用mm分别在external/wpa_supplicant和hardware/libhardware_legacy中编译

得到

system/bin/wpa_cli---vvvvv3

system/lib/libwpa_client.so---vvv3

libhardware_legacy.so---v5

启动之后发现是在对socket进行连接的时候出错了

connect(ctrl->s, (struct sockaddr *)

&ctrl->dest,sizeof(ctrl->dest)) < 0)

而且不能关闭wifi

只好重新修改wifi.c直接在unload函数中返回0,使得wifi能被关闭

libhardware_legacy.so---v5.1

###21th,Jul使用private的时候再次手动调试

# wpa_supplicant -dd -Dwext -ieth1 -c

/system/etc/wifi/wpa_supplicant.conf&

# ioctl[SIOCSIWPMKSA]: Invalid argument

mkdir[ctrl_interface]: Permission denied

[1] +

Done(255) wpa_supplicant -dd -Dwext -ieth1 -c

/system/etc/wifi/wpa_supplicant.conf

查找mkdir发现是在ctrl_iface_unix.c中

错误是出现在#ifdef ANDROID之外阿,诡异

###用donut中external/wpa_supplicant下的driver_wext.c替换地掉eclair中的

mm重新编译,得到:

wpa_supplicant---vvv3

$$$还是不行

###22th,Jul

把donut的wpa_supplicant文件夹拷贝到eclair下

用mm编译得到

system/bin/wpa_cli---vvvvv4

system/bin/wpa_supplicant---vvv4

system/lib/libwpa_client.so---vvv4

wpa_supplicant---vvv3

终于可以搜索到网络了,泪奔

但是,不能获取到ip地址呵呵

logcat提示:

I/WifiStateTracker( 713): DhcpHandler: DHCP

request failed: Timed out waiting for DHCP to finish

###手动启动dhcp提示

eth1: open `/data/misc/dhcp/dhcpcd-eth1.pid': No such file or

directory

在init.rc中增加

mkdir /data/misc/dhcp 0777 wifi wifi

chmod 0777 /data/misc/dhcp

chown wifi wifi /data/misc/dhcp

还是不能获得地址

eth1: flock `/data/misc/dhcp/dhcpcd-eth1.pid': Try again

后来把上面的wifi 改为dhcp,还是不能获得IP地址

$$

把dhcpcd杀了,手动启动

# dhcpcd -f /system/etc/dhcpcd/dhcpcd.conf -d eth1

eth1: dhcpcd 4.0.1 starting

eth1: hardware address = 00:1a:6b:a2:38:65

eth1: executing `/system/etc/dhcpcd/dhcpcd-run-hooks', reason

PREINIT

eth1: /system/etc/dhcpcd/dhcpcd-run-hooks: Permission denied

eth1: waiting for carrier

eth1: host does not support a monotonic clock - timing can

skew

eth1: timed out

eth1: executing `/system/etc/dhcpcd/dhcpcd-run-hooks', reason

FAIL

eth1: /system/etc/dhcpcd/dhcpcd-run-hooks: Permission denied

$$把权限都改为777,再次执行

# dhcpcd -f /system/etc/dhcpcd/dhcpcd.conf -d eth1

eth1: dhcpcd 4.0.1 starting

eth1: hardware address = 00:1a:6b:a2:38:65

eth1: executing `/system/etc/dhcpcd/dhcpcd-run-hooks', reason

PREINIT

eth1: waiting for carrier

eth1: host does not support a monotonic clock - timing can

skew

eth1: timed out

eth1: executing `/system/etc/dhcpcd/dhcpcd-run-hooks', reason

FAIL

$$还没有关闭android机呢,重新打开wifi,嘿嘿,能分配到地址了

但是...但是,还是不能上网,估计是由于地址的原因吧

把eth0禁用之后就可以上网了,呵呵

wifi移植告一段落

android 5.0 wifi移植,android  wifi移植相关推荐

  1. [高通SDM450][Android 9.0] 虹软人脸算法WIFI信息变化导致授权失败

    虹软人脸算法WIFI信息变化导致授权失败 开发平台基本信息 补丁下载地址 前言 问题描述 解决方法 开发平台基本信息 芯片: 高通SDM450 版本: Android 9.0 kernel: msm- ...

  2. 对于ANDROID 5.0及其以上版本WIFI图标上显示感叹号的原因分析及解决方法

    这里我指的是WIFI可正常连接网络使用的前提下,手机状态栏WIF图标上仍出现感叹号的情况. 原因: 从 Android 5.0 开始,当安卓系统连接网络时,系统会向Google的某个特定的网址(htt ...

  3. Android 9.0 飞行模式下WiFi状态变化

    关注我,更多程序猿的日常信息等你哦 在Android 9.0 中,AirPlaneMode与WiFi的原生设定是这样的: 1.开启飞行模式时,如果wifi打开,则关闭,如果是关闭状态则不处理. 2.开 ...

  4. android 5.0 ios 8,Android 5.0和iOS8.1哪个好?安卓5.0与iOS8.1区别对比

    Android和iOS显然是目前最受欢迎的移动平台,也是最大的两个竞争者.在今年,谷歌和苹果都对各自的系统进行了更新,其中iOS8.1已经正式推送,相信各位苹果用户已经正在使用:而Android 5. ...

  5. Android 8.0学习 (2)---Android HAL

    硬件抽象层 (HAL) HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现.借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统.HAL ...

  6. 小米3升级android 6.0,可升级Android 6.0机型一览 小米手机亮了

    前不久,Android M被谷歌正式确定为6.0系统,代号Marshmallow,预计年底前发布.而对于普通用户来说,最关心的就是自己的手机能不能升级.不过别着急,在此之前,我们不妨看看Android ...

  7. android 7.0拷贝文件,Android 7.0应用间共享文件----FileProvider

    应用间经常需要将自己的私有文件共享给其他的app,如某应用想要共享图库的图片用来编辑用户的头像,或者文件管理app允许用户在不同目录下复制粘贴文件等等,但为了保护私有文件的安全性,在targetSdk ...

  8. android 6.0权限库,Android 6.0动态权限适配

    前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...

  9. android 6.0 dm-verity技术,Android 7.0安全性大幅提升,要求严格强制执行验证启动

    在我们针对 Android 7.0 对 dm-verity 所做的更改中,我们使用了一个称为交错的技术,利用该技术,我们不仅可以从丢失的整个 4 KiB 源块恢复数据,还可从多个连续块恢复数据,与此同 ...

  10. android 7.0 禁止 imei,Android一些适配

    # Android 版本适配重点 其他细节请查看官网对应版本:https://developer.android.com/preview ## 7.0 1. 后台优化 - 移除了以下静态注册广播通知( ...

最新文章

  1. 查看Eclipse中的jar包的源代码:jd-gui.exe
  2. linux 建议锁和强制锁
  3. 从程序员到项目经理(12):如何管理自己的时间(上)
  4. 【转】掌握java枚举类型(enum type)
  5. pcl 使用gpu计算法向量_PCL点云特征描述与提取(1)
  6. 用C/C++编程技术教你制作彩票随机程序
  7. v1 中兴f450g_中兴ZXHN F450G获得telecom密码教程
  8. 2018年下半年系统集成项目管理工程师下午真题及答案解析
  9. Unity下载安装和Android打包成APK
  10. java验证码kaptcha_spring整合kaptcha验证码的实现
  11. matlab中wavread函数,关于wavread函数的用法
  12. v.douyin.com/xxx抖音网址官方生成制作抖音缩短口令网址php接口方法
  13. Oracle的 wm_concat 的排序问题,Oracle的 listagg 函数[转]
  14. 网易视频云首推多路互动直播,引领直播新时代
  15. pandoc下载 - 文档格式转换器
  16. RGB和YUV视频存储格式
  17. user account control用户帐户控制
  18. 计算机事业单位结构化面试的专业题,事业单位结构化面试出题规律:组织活动类问题...
  19. 经典推荐——计算机科学殿堂的知识瑰宝
  20. 利用opencv霍夫变检测中国象棋的外形——圆

热门文章

  1. 在Windows Server 2022系统上安装 Brother MFC-7450打印机驱动
  2. Lua 5.1.3源代码分析之词法分析[1]
  3. (一) 一元线性回归方程 梯度下降
  4. 西瓜书——多元线性回归(知识点:多元实值函数凹凸性的证明)
  5. ant-design-vue对起始时间的校验
  6. 嵌入式:Altium Designer18提升速度的操作(画开发板笔记)
  7. Visual Studio Code最新1.66.0版下载
  8. android studio linux 字体,Android Studio代码字体模糊解决方法
  9. IE8上面的旋转和透明度,利用滤镜属性去处理(兼容css3的transform和rgba())
  10. HL6601高性价比多种快充协议芯片QC3.0QC2.0华为FCP,SCP.VOOV苹果三星快充协议