http://blog.csdn.net/haomcu/article/details/7267090

2023-11-02

转自:http://blog.csdn.net/haomcu/article/details/7267090


一.   Android平台Wifi的基本代码路径

1.       Wpa_supplicant源码部分

external/wpa_supplicant_6/

生成库libwpa_client.so和守护进程wpa_supplicant

2.       Wifi的HAL层代码

位于hardware/libhardware_legary/wifi/

3.       Wifi的JNI部分

位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp

4.       JAVA部分

位于frameworks/base/services/java/com/android/server/
        frameworks/base/wifi/java/android/net/wifi/

5.       wifi设置部分

位于packages/apps/Settings/src/com/android/settings/wifi/


二.  linux内核配置

 

在原有android内核支持情况下,增加wifi内核配置,具体配置如下:

1.       Networkingsupport  --->Wireless下增加802.11 协议栈的支持


2.       USB 支持WIFI的配置

USB 支持WIFI 的配置选项位于Device Drivers>USB support 配置菜单下USB Wireless

Device Management support。


3.       用户空间的mdev 和firmware 支持配置

进入DeviceDriver > Generic Driver Options 配置菜单,按照下图所示配置用户空间

的mdev 和firmware支持。


4.       WIFI 设备支持配置

DeviceDrivers  ---> Network devicesupport  ---> Wireless LAN  ---> Ralink driver support--->Ralinkrt2800 (USB) support (EXPERIMENTAL) --->rt2800usb - Include support forrt30xx (USB) devices

以及Wireless LAN 目录里IEEE 802.11 for Host AP (Prism2/2.5/3 andWEP/TKIP/CCMP)都选择上,目的是打开CONFIG_WIRELESS_EXT=y CONFIG_WEXT_PRIV=y

 

三. 驱动配置与编译

 

1.       修改驱动SDK包中的配置文件

1.1   修改env.mk,将RT28xx_DIR 设为当前目录,RT28xx_DIR = $(shell pwd)。

1.2   修改makefile中对应的kernel与交叉编译器路径

1.3   修改os/linux目录下config.mk中gcc 与 ld变量

1.4   打开os/linux目录下config.mk中HAS_WPA_SUPPLICANT与HAS_NATIVE_WPA_SUPPLICANT_SUPPORT宏

2.       修改驱动SDK包中的驱动源码

2.1   将rt_linux.h中的RTUSB_URB_ALLOC_BUFFER与RTUSB_URB_FREE_BUFFER宏修改,定义如下

#define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev,BufSize, pDma_addr)     usb_alloc_coherent(pUsb_Dev,BufSize, GFP_ATOMIC, pDma_addr)

#defineRTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)       usb_free_coherent(pUsb_Dev, BufSize,pTransferBuf, Dma_addr)

2.2   修改rt_main_dev.c,直接将MainVirtualIF_close函数放空,return  0,解决不能反复关闭wifi问题。

2.3   修改rt_linux.c里RtmpOSNetDevAttach函数里增加devname赋值。strcpy( pNetDev->name, "mlan0");注:(此处所用的名字要与上层使用的节点名保持一致,在此说明一下上层主要有这几处用到节点名:

1,\frameworks\base\wifi\java\android\net\wifiWifiStateTracker.java

2,init.rc启动wpa_supplicant守护进程里面与启动dhcpcd服务

3,dhcpcd服务配置文件,dhcpcd.conf里面

4,init.rc设置setprop wifi.interface "mlan0")

3.       编译方法

Source env.mk;make;即可,驱动是在的路径为os/linux下的rt3070sta.ko。

此处所用的驱动名字应与HAL层wifi.c所指定驱动名保持一致


四. Wap_supplicant相关配置

3.1   Wpa_supplicant.conf配置文件的修改

ctrl_interface=DIR=/data/system/wpa_supplicantGROUP=wifi #这个路径在wifi.c中用到

3.2   整个环境必须要让wext类型相关代码进行编译。也就是要打开wext相关的宏CONFIG_DRIVER_WEXT。  即在device/hisi/Hi3716C/BoardConfig.mk中添加:
      BOARD_HAVE_WIFI := true
      BOARD_WPA_SUPPLICANT_DRIVER := WEXT

该配置的作用是使external/wpa_supplicant/Android.mk设置WPA_BUILD_SUPPLICANT为true。

3.3   在init.rc里面增加启动wpa_supplicant守护进程及dhcpcd进程

3.4   在init.rc里面增加wifi相关文件的权限设定,设置如下:

chmod 0771 /system/etc/wifi

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

      chown wifiwifi /system/etc/wifi/wpa_supplicant.conf #wifi的原始配置文件

     

      #wpa_supplicantsocket

      mkdir/data/system/wpa_supplicant 0770 wifi wifi

      chmod 0771/data/system/wpa_supplicant  #放置wifiinterface的地方

      mkdir/data/misc/wifi 0770 wifi wifi

   

      chmod 0771/data/misc/wifi

chmod 0660 /data/misc/wifi/wpa_supplicant.conf  #wifi的配置文件,将由wpa_supplicant根据实际配置写入该文件

      chown wifiwifi /data/misc/wifi

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

      mkdir/data/misc/wifi/sockets 0770 wifi wifi  #与上层通过socket通信的路径

     

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

     

      mkdir/data/misc/dhcp 0777 dhcp dhcp

      chown dhcpdhcp /data/misc/dhcp

     

      # Preparefor wifi

    setpropwifi.interface "mlan0"

          setprop wlan.driver.status "ok"

3.5   启动wpa_supplicant守护进程与dhcpcd服务

在init.rc里面添加wpa_supplicant启动:

service wpa_supplicant/system/bin/logwrapper /system/bin/wpa_supplicant \

   -Dwext -imlan0 -c/data/misc/wifi/wpa_supplicant.conf -dd

             user root

             group system wifi inet

             socket wpa_mlan0 dgram 660 wifi wifi

             disable

                     oneshot

       在init.rc里面添加dhcpcd启动:

service dhcpcd /system/bin/logwrapper/system/bin/dhcpcd -d -B wlan0
         disabled
         oneshot

3.6   在init.godbox.rc里增加dns设置

Setprop net.dns1 192.168.10.247

Setprop net.dns2 192.168.10.248

 

五. wifi移植所需在android系统添加的一些文件

4.1   添加wifi的wpa_supplicant.conf配置文件

放置目录与hardware/libhardware_legacy/wifi/wifi.c中的目录保持一致

4.2   添加驱动的配置文件

在system/etc/Wireless/RT2870STA目录放置配置文件RT2870STA.dat,与rt_linux.h中配置文件的路径保持一致。

4.3   添加dhcpcd启动配置文件

设置/system/etc/dhcpcd/dhcpcd.conf的配置为:
      interface mlan0
      option subnet_mask, routers,domain_name_servers 

七. 其它平台移植记录

6.1    内核

内核的修改如上述第二大点内核配置

6.2    Wpa_supplicant

将wpa_supplicant_6编译打开

Wpa_supplicant 主要是在device/hisi/Hi3716C/BoardConfig.mk中添加:
      BOARD_HAVE_WIFI := true
      BOARD_WPA_SUPPLICANT_DRIVER := WEXT

         以及在wpa_supplicant_6 里面的.config增加ANDROID=y


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http://blog.csdn.net/haomcu/article/details/7267090 的相关文章

随机推荐

  • 双向LSTM 对航空乘客预测

    前言 1 LSTM 航空乘客预测 单步预测和多步预测 简单运用LSTM 模型进行预测分析 2 加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制 将两者进行结合预测 3 多层 LSTM 对航空乘客预测 简单运用多层
  • cmd 用命令连接oracle数据库

    这里所用的数据库在tnsnames ora里的配置 mesdb155 DESCRIPTION ADDRESS PROTOCOL TCP HOST IP地址 PORT 端口号 CONNECT DATA SERVER XXX SERVICE N
  • Spring之Joinpoint类详解

    说明 Joinpoint是AOP的连接点 一个连接点代表一个被代理的方法 我们从源码角度看连接点有哪些属性和功能 源码 Copyright 2002 2016 the original author or authors Licensed
  • CentOS7安装Keepalived详细步骤

    1 首先先去Keepalived官网上下载 官网地址 2 把下载好的Keepalived压缩包上传到我们的CentOS7系统上 然后输入下面解压命令进行解压 tar zxvf keepalived 2 0 18 tar gz 3 先进入Ke
  • 7 - 简单状态机代码设计

    7 简单状态机代码设计 三角波发生器 代码 2021 11 21 lyw The simplest state machine triangle wave generator timescale 1ns 10ps module tri ge
  • 记一次使用hive-jdbc+tomcat-jdbc连接(Connection)中断的处理过程

    现象描述 Hive环境一个数据库 拥有表8000 业务代码需要挨个desc tableName 来获取表信息 当程序运行到4000 左右 开始出现获取信息失败 查找原因 通过查看日志发现是连接已断开 具体如下 INFO org apache
  • Kaggle——Rain in Australia (Predict rain tomorrow in Australia)

    文章目录 写在前面 1 案例背景 2 解读数据 2 导入数据进行数据分析及特征工程 2 1 概览数据 2 2 探索数据 2 2 1 探索数据类型 2 2 2 探索缺失值 2 2 3 产生训练集和测试集 2 2 4 分析是否存在样本不平衡问题
  • 在笔试题面试题中,如果出现加法和乘法,要注意是否越界的问题

    比如不设置另外变量 a和b如何置换 一法为相加的方法 可能越界 二法为异或法 程序员面试宝典也有此题 再比如类似问题是华为上机试题 如何求整数数组中大于平均值的个数 如果最用求平均值的方法 就会出现浮点数 为避免出现浮点数 可以转化为总和与
  • java基础(三)数组字典,类与对象

    字符串去重 public class Test04 public static void removeMrthod String s StringBuffer sb new StringBuffer boolean flag false f
  • gradle-5.6.4-all 百度网盘下载CSDN快速下载

    Gradle 5 6 4 发布 Gradle团队很兴奋地宣布Gradle 5 6 4 此版本的特点是提高Groovy编译速度的改进 的新插件Java测试夹具和更好地管理插件版本在多项目构建中 这是Gradle 5 x的最终次要版本 还有许多
  • vue组件和js实现鼠标悬停显示title效果

    需求 显示文本内容过长 显示 鼠标悬浮时 全部显示 使用element组件
  • [开发

    下载安装人大金仓常见问题 需要去人大金仓https www kingbase com cn qd index htm下载linux版iso文件和授权文件 license 企业版 90天 iso文件需要挂载在指定目录下 参考 https ww
  • “电脑登录界面显示引用的账户当前已锁定”解决办法

    一 电脑登录界面显示引用的账户当前已锁定 解决办法 https www zhihu com question 400540089 answer 2159778869 具体步骤 1 开机进BIOS系统 不同机型方法不同 具体可百度 2 进入B
  • 服务器正常运行温度范围 & ubuntu查看cpu温度 & cpu温度过高

    服务器正常运行温度范围 服务器正常运行温度 服务器cpu的温度在什么范围内是属于正常温度 weixin 39571219的博客 CSDN博客 CPU温度 一般在45 65 或更低 如果在75 80 则要检查CPU和风扇间是否正常 更换CPU
  • 【基带】手机外设之SIM卡槽电路及其变化

    SIM卡槽是手机通讯必不可少的外设 从卸电池插卡到弹出式卡槽 双卡双待诞生后 从并行式双卡槽到现在重叠式双卡槽 SIM卡形态从曾经的大卡到Micro卡和NANO卡 SIM卡槽也随之经历了一系列变化 一 SIM卡原理 PIN1 VCC 电源输
  • css样式不能显示(史上最全)

    文章目录 css样式不能显示常见问题 浏览器问题 浏览器缓存 Google浏览器css显示不了 细节问题 外部样式引入错误 其他细节问题 选择器问题 编码格式问题 样式层叠问题 最后可根据流程图检查 css样式不能显示常见问题 浏览器问题
  • 机器学习笔记--2.1文本分类

    从分类算法层面来看 各类语言的文本分类技术大同小异 但从整个流程来考察 不同语言的文本处理所用到的技术还是有差别的 下面给出中文语言的文本分类技术和流程 主要包括以下几个步骤 1 预处理 去除文本的噪声信息 例如HTML标签 文本格式转换
  • SpringBoot之【mybatisplus】快速上手

    文章目录 1 概述 特性 2 快速开始 2 1 新建springboot 引入相关依赖 2 2 配置文件 2 2 1 在resources下新建db文件 2 2 2 配置文件yml 2 3 编码 2 3 1 启动类增加mapper扫描 2
  • 惊呼!VSCode 花式摸鱼大法!

    开始正文之前 推荐一款CocosStore新上架 超硬核动作游戏 Rougelike RPG Game Demo 来欣赏下游戏效果吧 源码地址 https store cocos com app detail 3117 作者QQ群 1192
  • http://blog.csdn.net/haomcu/article/details/7267090

    转自 http blog csdn net haomcu article details 7267090 一 Android平台Wifi的基本代码路径 1 Wpa supplicant源码部分 external wpa supplicant