基于Android的SDIO-WIFI移植(2)

WiFi模块驱动移植+调试 阅读详情
1)项目概述

2)Android SDIO WIFI移植

3)Android WIFI 框架分析

4)SDIO WIFI驱动分析

一、项目概述:

         Android3G平板电脑功能介绍:该系统为手持移动终端,其底层硬件采用ARM来实现,搭载谷歌的Android操作系统。支持多点触摸屏、通过WIFI实现联网、蓝牙数据传输、摄像头、USB接口、SD卡接口、重力感应系统、实物键盘。在本次项目 主要涉及3G模块、WIFI模块两个部分的开发。
硬件环境     
     WIFI模块:Marvell8686 SDIO WIFI
     开发板:FS_S5PC100
       Android 2.1
软件环境
       Linux 2.6.29
SDIO WIFI部分:

项目负责人:本人
项目目标:实现WIFI上网功能、并对WIFI休眠进行改善。
项目开发流程:
硬件分析:对Marvell8686 SDIO WIFI模块硬件工作特性了解和分析
工作原理分析:对Marvel8686 SDIO WIFI工作原理进行分析
Android WIFI框架分析:对Android WIFI系统框架分析
进行源码分析、编写、修改及编译
调试、并完善
时间安排:
2011-9-29至2011-10-7:硬件分析、了解驱动框架
2011-10-8至2011-10-16:Android SDIO WIFI移植及工作原理分析
2011-10-17至2011-10-23:Android WIFI框架分析
2011-10-24至2011-10-30:进行源码分析
2011-10-31至2011-11-5:准备答辩就业

二、Android SDIO WIFI移植:

0、Android中WIFI基本架构
1、WIFI在Android中如何工作
2、配置内核支持SDIO WIFI-make menuconfig
3、配置wpa_supplicant的驱动-BoardConfig.mk
4、使能wpa_supplicant调试信息-common.*
5、修改wpa_supplicant.conf
6、配置路径和权限-init.rc
7、运行wpa_supplicant和dhcpcd-init.rc
8、设置驱动以模块方式加载-libertas_sdio.ko
9、提供固件供驱动模块-sd8686.bin sd8686_helper.bin
10、配置dhcpcd.conf                                                  

WIFI在Android中如何工作

Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,代码位于  external/wpa_supplicant。wpa_supplicant是通过socket与hardware/libhardware_legacy/wifi/wifi.c通信。UI通过android.net.wifi package
   (frameworks/base/wifi/java/android/net/wifi/)发送命令给wifi.c。   相应的JNI实现位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp。
   更高一级的网络管理位于frameworks/base/core/java/android/net。
配置内核支持SDIO WIF

make menuconfig

[*] Networking support  ---> 
         [*]   Wireless  ---> 
                 --- Wireless                                               
                <*>   Improved wireless configuration API                  
                 [*]     cfg80211 regulatory debugging                       
                 [*]     nl80211 new netlink interfacesupport                                                                              
                 -*-   Common routines for IEEE802.11 drivers   
Device Drivers  --->  
         [*] Network device support  ---> 
                Wireless LAN  --->  
               <*>   Marvell 8xxx Libertas WLAN driver support 
               <M>     Marvell Libertas 8385 and 8686 SDIO 802.11b/g cards

配置wpa_supplicant的驱动

1)修改vendor/farsight/fs100/BoardConfig.mk:
   把BOARD_WPA_SUPPLICANT_DRIVER :=true
   改为    BOARD_WPA_SUPPLICANT_DRIVER := WEXT
   目的是:把driver_wext.c作为wpa_supplicant的驱动。wpa_supplicant通过它去与内核的wifi驱动打交道。
2)修改external/wpa_supplicant/Android.mk
    把WPA_BUILD_SUPPLICANT :=false
    改为    WPA_BUILD_SUPPLICANT := true
   默认使用驱动driver_wext.c。
   如果使用定制的wpa_supplicant驱动(例如 madwifi),可以设置:
   BOARD_WPA_SUPPLICANT_DRIVER := MADWIFI

使能wpa_supplicant调试信息

wpa_supplicant默认信息显示的等级为SG_INFO,为了输出更多信息,可修改:
修改external/wpa_supplicant/common.c
    把int wpa_debug_level = MSG_INFO;
    改为:int wpa_debug_level = MSG_DEBUG;
修改external/wpa_supplicant/common.h
    把宏定义#define wpa_printf(level, ...)中的if ((level) >= MSG_INFO)
    改为if ((level) >= MSG_DEBUG)

修改wpa_supplicant.conf

修改wpa_supplicant.conf:
   把external/wpa_supplicant/wpa_supplicant.conf拷贝到out/target/product/fs100/system/etc/wifi/目录下,
   并把:ctrl_interface=DIR=/data/misc/wifi/wpa_supplicant GROUP=wifi
   改为:
   ctrl_interface=wlan0
配置路径和权限

A)配置init.rc文件修改out/target/product/fs100/root/init.rc,让wifi用户拥有相关的权限, 在 #give system access to wpa_supplicant.conf for backupand restore后面增加:
     #add by caoyi 2011-10-19
 
     mkdir /data/misc/wifi/sockets 0777 wifi wifi

  chown wifi wifi /data/misc/wifi 
     chown wifi wifi /data/misc/wifi/wpa_supplicant.conf
  #for dhcp
     mkdir /data/misc/dhcp 0777 dhcp dhcp 
     chmod 0770 /data/misc/dhcp
     #end add
B)注释原有环境变量#export PATH
改为:
 export PATH /sbin:/system/sbin:/system/bin:/system/xbin
    #above modified by caoyi 2011-10-19
      修改控制台
注释掉原console
   #modfied by caoyi 2011-10-19
   #service console /system/busybox/bin/ash    改为:service console /system/bin/bash

运行wpa_supplicant和dhcpcd

配置init.rc文件修改out/target/product/fs100/root/init.rc, 在末尾添加:
   #add by caoyi 2011-10-19
for wifi Android private socket
   service wpa_supplicant /system/bin/wpa_supplicant -dd -Dwext -iwlan0 -c        /system/etc/wifi/wpa_supplicant.conf
           socket wpa_wlan0 dgram 660 wifi wifi 
           group system wifi inet 
           disabled 
           oneshot
   #for dhcp
   service dhcpcd /system/bin/dhcpcd wlan0
           group system dhcp 
          disabled 
          oneshot
   #end add。
设置驱动以模块方式加载

拷贝内核生成的drivers/net/wireless/libertas/libertas_sdio驱动模块到out/target/product/fs100/system/lib/modules/目录下。
然后修改hardware/libhardware_legacy/wifi/wifi.c
    1)修改#define WIFI_DRIVER_MODULE_PATH         "/system/lib/modules/libertas_sdio.ko"
       #define WIFI_DRIVER_MODULE_NAME        "libertas_sdio" 
    #define WIFI_TEST_INTERFACE  "wlan0"
添加休眠唤醒代码:
/*add by caoyi 2011-10-19*/
int module_wakeup_status()
   { 
         return 1;
   }
   int wait_time()
  {
     sleep(1); 
        return ;
   }
/*end add*/
提供固件firmware

Android不使用标准的hotplug binary,WIFI需要的firmware要复制到/etc/firmware。   或者复制到WIFI驱动指定的位置,然后WIFI驱动会自动加载。
   在此把wifi模块提供的sd8686.bin sd8686_helper.bin放到out/target/product/fs100/system/etc/firmware目录下。

配置dhcpcd.conf

修改源码目录下external/dhcpcd下的Android.mk文件
    取消注释
     26  include $(CLEAR_VARS)
     27 LOCAL_MODULE := dhcpcd.conf
     28 LOCAL_MODULE_TAGS := user
     29 LOCAL_MODULE_CLASS := ETC
     30 LOCAL_MODULE_PATH := $(etc_dir)
     31 LOCAL_SRC_FILES := android.conf
     32 include $(BUILD_PREBUILT)  
 然后重新编译mm,将编译产生的dhcpcd.conf放置到文件系统的目录system/etc/dhcpcd/dhcpcd.conf
最后确定dhcpcd.conf内容有:
     interface wlan0
     option subnet_mask, routers, domain_name_servers  
     option ntp_servers     这几行,否则修改之。
其它修改

修改WifiStateTracker.java
将frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java里的mInterfaceName = SystemProperties.get("wifi.interface", "eth0");
       改为:
     mInterfaceName = SystemProperties.get("wifi.interface", "wlan0");

编译镜像文件后烧写到开发板上就可以使用WiFi模块连接外网。

经验技巧

移植过程中,我们只是针对文件系统中某几个文件修改,所以没必要重新对整个文件系统编译。而这个时候就可以针对性的编译某个目录,使生成对应的库文件*.so,然后替换之前的库文件。例如:
   我们经常要修改wifi.c。我们可以这样:
. ./build/envsetup.sh
tapas
 mmm hardware/libhardware_legacy/
然后将生成的libhardware_legacy.so拷贝到文件系统fs100_root中lib目录。
 $cp out/target/product/fs100/system/lib/libhardware_legacy.so      fs100_root/system/lib/
三、Android WIFI 框架分析:

待续……


sdio wifi 移植 介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3 阅读详情

相关推荐

RK3399安卓10平台实战:用AIC8800DC替换RTL8723DS,低成本升级WIFI6 2.4G模组

本文详细介绍了在RK3399安卓10平台上使用AIC8800DC替换RTL8723DS模组,实现低成本升级WIFI6 2.4G的完整技术方案。从硬件兼容性验证到驱动移植优化,提供了可复用的升级路径,帮助开发者提升嵌入式设备的网络性能。

weixin_34194829的博客 356

SDIO wifi驱动框架

SDHC:Secure Digital(SD) Host Controller,是指一套sd host控制器的设计标准,一般挂载sd和sdio设备,隶属于mmc子系统,其寄存器偏移以及意义都有一定的规范,并且提供了对应的驱动程序,方便vendor进行host controller的开发。Linux内核使用 net_device结构体表示一个具体的网络设备,网络驱动的核心就是初始化net_device 结构体中的各个成员变量,然后将初始化完成以后的net_device 注册到 Linux内核中。

yangzhipengyzp的博客 5700

RK3399安卓板卡实战:用AIC8800DC替换RTL8723,低成本升级WiFi6 2.4G模组

本文详细解析了在RK3399安卓板卡上使用AIC8800DC替换RTL8723模组实现WiFi6升级的全流程。从硬件兼容性验证到驱动移植,再到典型问题排查和量产优化建议,为工程师提供了低成本升级WiFi6 2.4G模组的完整技术方案,显著提升网络性能和连接稳定性。

weixin_31476015的博客 317

基于Android的SDIO-WIFI移植(1)(2)

http://blog.youkuaiyun.com/yicao821/article/details/6872247  一、SDIO 设备驱动移植         很不巧内核已经“被”支持了,我就先不费这事了。 二、配置内核以支持Marvel无线WIFI 在这里我编译成模块的方式:      Device Drivers  --->              [*]

Gabby 1529

基于Ubuntu内核的SDIO WiFi驱动移植编程

在本文中,我们将探讨如何在Ubuntu内核上移植和编程SDIO WiFi驱动。请记住,具体的移植和编程步骤可能因硬件和驱动的差异而有所不同,因此您可能需要参考相关文档和资源以获取更具体的指导。在内核源代码的根目录中,找到SDIO WiFi驱动的源代码文件(通常位于drivers/net/wireless目录下)。在移植和编程SDIO WiFi驱动之前,我们需要获取Ubuntu内核的源代码。在移植SDIO WiFi驱动之前,我们需要修改内核配置以支持SDIO接口和WiFi功能。步骤3:修改内核配置。

PixelNovaO的博客 403

RK3568 Android 13驱动适配-WiFi&BT模块(RTL8822CS)

本文记录了在RK3568平台Android 13 SDK上移植RTL8822CS WiFi/蓝牙模块的完整过程,涵盖硬件原理、设备树配置、驱动移植及HAL库适配。

x150061的博客 707

基于Android的SDIO-WIFI移植(2) .

1)项目概述 2)Android SDIO WIFI移植 3)Android WIFI 框架分析 4)SDIO WIFI驱动分析 一、项目概述:          Android 3G平板电脑功能介绍:该系统为手持移动终端,其底层硬件采用ARM来实现,搭载谷歌的Android操作系统。支持多点触摸屏、通过WIFI实现联网、蓝牙数据传输、摄像头、USB接口、SD卡接口、

wince--linux的专栏 844

LabVIew串口收发的一些问题

LabView串口收发实验总结

weixin_45508826的博客 2065

android wifi驱动流程,高通Android wifi驱动移植-SDIO

环境用的是android2.3系统,wifi是BCM4329,接口是SDIO,Android4.0在步骤上略有不同。1.首先了解SDIO的一些相关知识:SDIO有两端,其中一端是HOST端,另一端是device端.所有的通信都是由HOST端发送命令开始的,Device端只要能解析命令,就可以相互通信。​CLK信号:HOST给DEVICE的时钟信号,每个时钟周期传输一个命令。CMD信号:双向的...

weixin_39727336的博客 1860

Hermes Agent Windows安装教程:本地智能体离线部署实战

本地智能体(Local Agent)是一种运行在用户设备端、无需云端依赖即可响应自然语言指令并自动化执行任务的轻量级AI运行时框架。其核心原理基于配置驱动的任务监听与脚本调用机制,通过服务化驻留实现持续响应能力,技术价值在于保障数据隐私、规避API调用限制、适配内网及老旧系统环境。典型应用场景包括财务报表自动整理、科研仪器数据归档、IT资产变更通知等Windows桌面自动化需求。本文聚焦Hermes Agent这一主流开源实现,围绕Windows平台特有的服务注册、权限模型、杀软拦截、中文路径与YAML编码

weixin_34411563的博客 433

国密证书实战:在CentOS 7上构建GmSSL私有CA与完整证书链

本文详细介绍了在CentOS 7操作系统上,使用GmSSL工具构建私有国密证书颁发机构(CA)与完整证书链的实战指南。内容涵盖从部署GmSSL、创建国密根CA、签发服务器与客户端证书,到生产环境安全加固与最佳实践的全流程,旨在帮助系统管理员和安全工程师建立统一、可控的内部国密安全通信体系。

jenkins8butler的博客 495

Android移植之WIFI

  Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <object cl

wylhistory的专栏 2517

AgentFlow:模块化智能体框架与Flow-GRPO强化学习实战解析

在人工智能领域,大语言模型(LLM)与智能体(Agent)技术正推动着自动化任务处理的发展。其核心原理在于通过规划、执行与反馈的循环,使AI系统能够自主调用工具解决复杂问题。这一技术的价值在于突破单一模型的局限性,实现更可靠的多步骤推理。在实际应用中,智能体框架需要处理搜索、代码执行、数学计算等多种场景。本文聚焦的AgentFlow框架,正是通过模块化设计将智能体拆分为规划者、执行者、验证者和生成者四个专家模块,并引入Flow-GRPO强化学习算法进行流程内优化。该框架在搜索增强与工具调用等任务上展现出显著

weixin_42311427的博客 366

android之wifi移植全过程(一)

http://blog.youkuaiyun.com/liyulei316686082/article/details/7006577 android之wifi移植全过程                                硬件环境                                     WIFI模块:Marvell8686 SDIO WIFI           

Gabby 1846

ESP32 Arduino学习篇 (一) 引脚和串口的基本使用

简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制,例如LED灯,蜂鸣器,按键arduino程序首先来讲arduino程序是基于C语言,而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语言知识即可实现。arduino程序是基于函数的,而在arduino的库有很多函数,我们只需要调用即可。arduino的程序主体是**setup()函数和loop()**函数以及其它在使用过程中需要构建的函数:setup()函数。

DOF526570的博客 1万+

2.Vivado软件基础操作

在本章节,我们以一个简单的计数器实例,介绍FPGA开发软件Vivado的基础操作流程,计数器实例程序的设计,在本课程中先不同掌握,后续课程将针对verilog编程进行讲解。 打开Vivado软件,会看到如下的界面: 点击如下图所示的: 点击Next> 将这个地方,设置路径,注意路径必须是英文路径。且文件夹名称第一个字符不能为数字。所有路径的名称的字符数量不能超过144个符号。 点击Next> 点击Next> 点...

FPGA/MATLAB学习教程/源码/项目合作开发 4475

RK3399教程:wifi驱动调试技巧

疑问点? Android hal层需要配置那些东西? rk3399的wifi模组自适应支持多款wifi是什么技术原理? wpa_supplicant需要配置那些东西? 回答上面的问题我们需要一步一步往下看。 什么是VID和PID? 答:VID为厂商,PID为产品ID。 硬件接口 单wifi硬件接口 在嵌入式中wifi功能在SOC中有两种方式,一种是集成在SOC当中,芯片代表有MTK和高通的芯片,因为这两家芯片厂商的通讯技术都比较厉害所以一般都会在他们自己的SOC中添加WIFI的模块,从而降低成本和降低板子的

qq_27809619的博客 1万+

YOLOv11 损失函数解析

YOLOv11 在 YOLO 系列的持续演进中,通过 ​多模态损失协同优化、动态任务感知机制 和 ​超轻量化设计,实现了检测精度与推理效率的再突破。其损失函数设计融合了前沿的几何建模、分布学习与自监督技术,显著提升了复杂场景下的鲁棒性。

浩瀚之水的专栏 6697
上一篇: 基于Android的SDIO-WIFI移植(1)
下一篇: RadioGroup组与onCheckedChanged事件
menuconfig
博客等级 码龄19年 713粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值