1wifi 简介(框架)

一、wifi 组建原理:

        WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是一个无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。

        一般架设无线网络的基本配备就是 无线网卡 及 一个AP(无线接入点)。有了AP,就像一般有线网络的Hub一般,无线工作站可以快速且轻易地与网络相连。特别是对于宽带的使用,WiFi更显优势,有线宽带网络(ADSL、小区LAN等)到户后,连接到一个AP,然后在电脑中安装一块无线网卡即可上网。普通的家庭有一个AP已经足够,甚至用户的邻里得到授权后,则无需增加端口,也能以共享的方式上网。


二、=================== android WIFI 框架 =======================


---------------------------------------------------------------------------------------------------


三、 Android平台Wifi 编译前 基本代码 路径 及 文件名(根文件系统的源码下)

1、Wifi setting 部分(Java应用层)

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

WifiSettings.java&WifiEnabler.java

2、JAVA Framework部分
位于frameworks/base/services/java/com/android/server/

WifiService.java &WifiWatchdogService.java
位于frameworks/base/wifi/java/android/net/wifi/

WifiManager.java&WifiMonitoer.java&WifiStateTracker.java &WifiNative.java

3.       Wifi的JNI部分

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

4.       Wifi的HAL层代码(wpa_supplicant适配器层)

位于 hardware/libhardware_legary/wifi/wifi.c

5.       Wpa_supplicant程序的 源码部分(tools)
位于 external/wpa_supplicant_6/

external/wpa_supplicant/
生成库libwpa_client.so 和 守护进程wpa_supplicant
6.kernel (wifi 驱动*.ko)
位于 net/wireless     drivers/wlan_sd8688       arch/arm/mach-pxa/wlan_pm.c

四、每一层 编译后 的所在位置

Java应用层
  -- Settings, Wifi Switcher等应用

  --> /system/app/

Java Framework层  

    --> 

        /system/framework/services.jar

JNI层  

  --> /system/framework/framework.jar

wpa_supplicant 适配器层

    --> /system/lib/libhardware_legacy.so

wpa_supplicant 程序

    --> /system/bin/wpa_supplicant

        /system/lib/libwpa_client.so

Kernel层
  -- kernel network drivers  




===================== android WIFI 框架 end ====================================

Wifi 网卡状态

1.    WIFI_STATE_DISABLED: WIFI网卡不可用

2.    WIFI_STATE_DISABLING: WIFI正在关闭

3.    WIFI_STATE_ENABLED:WIFI网卡可用

4.    WIFI_STATE_ENABLING:WIFI网卡正在打开

5.    WIFI_STATE_UNKNOWN:未知网卡状态



Rootfs中 关于wpa_supplicant的配置

1) /device/amlogic/f08refe1/BoardConfig.mk  //wpa_supplicant版本,driver
WPA_SUPPLICANT_VERSION := VER_0_6_X
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
2) root/init.rc   //wpa_supplicant service
setprop wifi.interface wlan0
service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -d -c /data/misc/wifi/wpa_supplicant.conf
    socket wpa_wlan0 dgram 0666 wifi wifi
3) /system/etc/wifi/wpa_supplicant.conf//config for wpa_supplicant service
update_config=1
ctrl_interface=wlan0
eapol_version=1
ap_scan=1
fast_reauth=1

---------------------



在基于OpenHarmony的系统中,WiFi驱动的开发框架和架构设计涉及到多个关键模块和组件。以下是关于WiFi驱动框架结构、架构设计以及开发指南的详细说明。 ### WiFi驱动框架结构 WiFi驱动框架主要由以下几个部分组成: 1. **硬件抽象(HDF)** OpenHarmony 使用 HDF(Hardware Driver Foundation)作为硬件抽象,负责管理硬件设备。对于WiFi驱动来说,HDF 提供了统一的接口来加载和管理无线网卡驱动[^1]。 2. **内核空间驱动** 内核空间中的WiFi驱动负责与硬件交互,完成无线网卡的初始化和数据传输。通常,这部分驱动是基于Linux的mac80211子系统实现的,支持常见的WiFi芯片组[^2]。 3. **用户空间守护进程 wpa_supplicant** 在用户空间,wpa_supplicant 被用来处理WiFi网络的扫描、连接、认证等操作。它提供了对WPA/WPA2安全协议的支持,并通过D-Bus或socket接口与应用程序通信[^2]。 4. **网络管理接口** 系统提供标准的网络接口(如`iw`命令行工具或Netlink接口),用于配置和管理WiFi连接[^2]。 5. **应用接口** 应用程序可以通过调用OpenHarmony提供的网络管理API来控制WiFi连接状态,例如扫描热点、连接指定SSID等[^1]。 ### 架构设计 WiFi驱动的整体架构可以分为以下几个级: - **应用** 提供用户界面和API,允许用户进行WiFi连接、断开、扫描等操作。 - **服务** 包括wpa_supplicant等服务程序,负责处理复杂的网络认证逻辑和连接管理。 - **中间件(HDF)** 提供硬件抽象接口,使得上软件无需关心底硬件细节即可访问WiFi功能。 - **驱动** 实现对具体WiFi芯片的控制,包括初始化、数据收发、电源管理等功能。 - **硬件** 物理上的无线网卡模块,负责接收和发送无线信号。 整个架构的设计目标是实现良好的模块化和可移植性,便于不同平台上的适配和扩展。 ### 开发指南 为了在OpenHarmony平台上成功移植和开发WiFi驱动,需遵循以下步骤: #### 1. 准备工作 - 获取目标平台的WiFi芯片手册和技术文档。 - 配置好OpenHarmony的编译环境。 - 下载并熟悉HDF驱动框架的相关代码结构。 #### 2. 移植HDF驱动 - 根据芯片规格书编写HDF兼容的驱动程序,注册到HDF框架中。 - 实现必要的回调函数,如`Bind()`、`Init()`、`Release()`等。 - 在`hdf_wlan.c`中定义设备信息和服务接口。 #### 3. 集成wpa_supplicant - 将wpa_supplicant源码集成进系统镜像。 - 修改配置文件以支持当前平台的WiFi芯片。 - 编写启动脚本,在系统启动时自动运行wpa_supplicant服务。 #### 4. 测试与调试 - 使用`iw`命令测试WiFi扫描和连接功能。 - 检查dmesg日志确认驱动加载正常。 - 利用wireshark等工具分析无线数据包传输情况。 #### 5. 性能优化 - 对驱动进行功耗优化,确保低电量模式下仍能保持稳定连接。 - 优化数据路径,减少延迟并提高吞吐量。 #### 示例:HDF驱动基本结构 ```c #include "hdf_base.h" #include "hdf_wlan.h" struct HdfWlanDevice { struct IWlanDevice ops; }; static int32_t HdfWlanInit(struct HdfDeviceObject *device) { // 初始化WiFi硬件 return HDF_SUCCESS; } static void HdfWlanRelease(struct HdfDeviceObject *device) { // 释放资源 } struct HdfDriverEntry g_hdfWlanEntry = { .moduleVersion = 1, .moduleName = "hdf_wlan", .Init = HdfWlanInit, .Release = HdfWlanRelease, }; HDF_INIT(g_hdfWlanEntry); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值