OpenHarmony实战开发——WLAN驱动框架介绍及适配方法

1. WLAN 驱动框架概述

WLAN 是基于 HDF(Hardware Driver Foundation)驱动框架开发的模块,该模块可实现跨操作系统迁移、自适应器件差异、模块化拼装编译等功能。从而降低 WLAN 驱动开发的难度,减少 WLAN 驱动移植和开发的工作量。

本文主要分析 WLAN 驱动架构的组成和各部件的功能,以及快速适配方法。

2. WLAN 驱动框架

WLAN 驱动框架组成:

驱动架构主要由 Module、NetDevice、NetBuf、BUS、HAL、Client 和 Message 这七个部分组成。

Module

Module 基于 HDF 驱动框架实现 WLAN 框架的启动加载、配置文件的解析、设备驱动的初始化和芯片驱动的初始化等功能,根据 WLAN 的功能特性,划分 Base、AP、STA 等部件,对控制流的命令和事件进行统一管理。

NetDevice

NetDevice 用于建立专属网络设备,屏蔽不同 OS 的差异,对 WIFI 驱动提供统一接口,提供统一的 HDF NetDevice 数据结构,及其统一管理、注册、去注册能力;对接富设备上的 Linux 的网络设备层;对接轻设备上的 Linux 的网络设备层。

NetBuf

NetBuf 部件为 WLAN 驱动提供 Linux 或者 LiteOS 原生的网络数据缓冲的统一数据结构的封装以及对网络数据的操作接口的封装,框架如下图所示:

BUS

BUS 驱动模块向上提供统一的总线抽象接口。通过向下调用 Platform 层提供的 sdio 接口和封装适配 usb、pcie 接口,屏蔽不同操作系统的差异;通过对不同类型的总线操作进行统一封装,屏蔽不同芯片差异,能够对不同芯片厂商提供完备的总线驱动功能,不同厂商共用此模块接口,从而使厂商的开发更为便捷和统一,框架如下图所示:

HAL

HAL 部件对 WiFiService 模块提供标准的 WIFI-HDI 接口和数据格式定义,提供能力如下:设置 MAC 地址、设置发射功率、获取设备的 MAC 地址等。

Client

Client 部件实现用户态与内核态的交互,通过对 sbuf 及 nl80211 做不同适配,根据产品做配置化编译,从而实现对上提供统一的接口调用,框架如下图所示:

Message

Message 部件为每个服务单独提供业务接口,每个服务也可依赖其他服务形成组合业务接口,此模块支持在用户态、内核态和 MCU 环境运行,实现了组件间的充分解耦。

3. WLAN 驱动适配

目前快速适配 wlan 的方法都是基于 WPA 三方框架直接 CONFIG_DRIVER_NL80211 走的 nl80211 协议,直接连接到芯片驱动上,也就是 Client 流程中走的灰色流程。

3.1 WiFi 适配文件介绍

在 3.1beta 中 device\hihope\hardware\wifi 目录中可以看到 ap6xxx、bin、etc、lib、proc 和 BUILD.gn 文件

1)ap6xxx 文件中存放的是驱动相关的文件;

2)bin 文件中存放着 wpa_cli 和 wpa_supplicantion 二进制文件;(3.1release 版本中无此目录)

3) etc 中存放着 resolv.cof 文件;

4)lib 中存放着 libwpa_client.z.so 和 libwpa.z.so 文件;(3.1release 版本中无此目录)

5)proc 中存放着 ping_group_range 文件,定义着 ping 的变化范围;

6)Build.gn 为编译脚本文件;

3.2 WiFi 适配方法

以 Firefly 的 RK 系列为例,适配方法如下步骤

本方法已在以下 Firefly 产品验证,在 3.1beta 和 3.1release 上 WiFi 都能正常运行。

  • ROC-RK3568-PC,芯片为 rk3568
  • AIO-3399J,芯片为 rk3399

3.2.1 准备基础环境

下载 WiFi 芯片的驱动,从 Firefly 官网下载对应产品的 WiFi 驱动文件。

ROC-RK3568-PC WiFi 芯片(AP6275S)驱动下载链接:https://gitlab.com/firefly-linux/external/rkwifibt/-/tree/firefly/firmware/broadcom/AP6275S/wifi

AIO-3399J WiFi 芯片(AP6356S)驱动下载链接:https://gitlab.com/firefly-linux/external/rkwifibt/-/tree/firefly/firmware/broadcom/AP6356/wifi

3.2.2 修改 WiFi 驱动文件

在 device\hihope\hardware\wifi\ap6xxx 中的驱动文件为润和 rk3568 开发板中的 WiFi 芯片的,存在与其他开发板不适配的情况,所以需要更改替换。

比如 ROC-RK3568-PC,修改如下

  • 把 3.2.1 中下载的驱动文件,依次替换掉 device\hihope\hardware\wifi\ap6xxx 中 clm_bcm43752a2_ag.blob、fw_bcm43752a2_ag_apsta.bin、fw_bcm43752a2_ag.bin、nvram_ap6275s.txt

  • AIO-3399J 同样的方法删除掉 device\hihope\hardware\wifi\ap6xxx 下的文件,拷贝相应的 4 个文件到此目录下;

  • 修改 device\hihope\hardware\wifi\BUILD.gn 文件;
import("//build/ohos.gni")AP6XXX_ETC_DIR = "//device/hihope/hardware/wifi/ap6xxx"
DNS_CONFIG_DIR = "//device/hihope/hardware/wifi"
WIFI_LIB_DIR = "//device/hihope/hardware/wifi/lib"
WIFI_BIN_DIR = "//device/hihope/hardware/wifi/bin"ohos_prebuild_etc("fw_bcm4356a2_ag_mfg.bin") {source = "$AP6XXX_ETC_DIR/fw_bcm4356a2_ag_mfg.bin"install_images = ["vendor"]relative_install_dir = "firmware"part_name = "rockchip_products"install_enable = true
}ohos_prebuild_etc("fw_bcm4356a2_ag.bin") {source = "$AP6XXX_ETC_DIR/fw_bcm4356a2_ag.bin"install_images = ["vendor"]relative_install_dir = "firmware"part_name = "rockchip_products"install_enable = true
}ohos_prebuild_etc("nvram.txt") {source = "$AP6XXX_ETC_DIR/nvram.tx"install_images = ["vendor"]relative_install_dir = "firmware"part_name = "rockchip_products"install_enable = true
}ohos_prebuild_etc("resolv.conf") {source = "$DNS_CONFIG_DIR/etc/resolv.conf"install_images = ["system"]part_name = "rockchip_products"install_enable = true
}ohos_prebuild_executable("wpa_cli") {install_enable = truesource = "$WIFI_BIN_DIR/wpa_cli"module_install_dir = "bin"install_images = ["system"]part_name = "rockchip_products"
}ohos_prebuild_executable("wpa_supplicant") {install_enable = truesource = "$WIFI_BIN_DIR/wpa_supplicant"module_install_dir = "bin"install_images = ["system"]part_name = "rockchip_products"
}ohos_prebuild_share_library("libwpa.z.so") {source = "$WIFI_LIB_DIR/libwpa.z.so"module_install_dir = "lib"install_images = ["system"]part_name = "rockchip_products"
}ohos_prebuild_share_library("libwpa_client.z.so") {source = "$WIFI_LIB_DIR/libwpa_client.z.so"module_install_dir = "lib"install_images = ["system"]part_name = "rockchip_products"
}group("ap6xxx") {deps = [":fw_bcm4356a2_ag_mfg.bin",":fw_bcm4356a2_ag.bin",":nvram.txt",":resolv.conf",":wpa_cli",":wpa_supplicant",":libwpa_client.z.so",":libwpa.z.so",]
}

上述 BUILD.gn 修改方法为 3.1beta 版本中的,在 3.1release 中则不需要 wpa_cli、wpa_supplicant、libwpa_client.z.so 和 libwpa.z.so 文件的配置。

3.3 WiFi 连网常用指令

WiFi 使能

$ ifconfig wlan0 up

成功后 ifconfig 能看到 wlan0 节点

启动 wpa_supplicant 进程

$ wpa_supplicant -i wlan0 -c /etc/wifi/wpa_supplicant -B

通过 wpa_cli 配置 WiFi

$ wpa_cli
localhost/wla0> scan
localhost/wla0> scan_result

添加网络

1)如果要连接加密方式是 WPA-PSK-CCMP+TKIP[ESS] (wpa 加密),wifi 名称是 name,wifi 密码是:psk。操作如下:

$ wpa_cli -i wlan0 set_network 0 ssid '"name"
$ wpa_cli -i wlan0 set_network 0 psk '"psk"'
$ wpa_cli -i wlan0 enable_network 0    //使能WiFi

2)如果要连接加密方式是 WEP (wep 加密),wifi 名称是 name,wifi 密码是 psk。操作如下:

$ wpa_cli -i wlan0 set_network 0 ssid '"name"'
$ wpa_cli -i wlan0 set_network 0 key_mgmt NONE
$ wpa_cli -i wlan0 set_network 0 wep_key0 '"psk"'
$ wpa_cli -i wlan0 enable_network 0

3)如果要连接加密方式是[ESS] (无加密),wifi 名称是 name。操作如下:

$ wpa_cli -i wlan0 set_network 0 ssid '"name"'
$ wpa_cli -i wlan0 set_network 0 key_mgmt NONE
$ wpa_cli -i wlan0 enable_network 0

保存 WIFI 连接信息

$ wpa_cli -i wlan0 save_config

连接已有的连接

$ wpa_cli -i wlan0 list_network        // 列举所有保存的连接
$ wpa_cli -i wlan0 select_network 1     // 连接第1个保存的连接
$ wpa_cli -i wlan0 enable_network 1      // 使能第1个保存的连接

断开连接

$ wpa_cli -i wlan0 disable_network 0

关闭 WiFi

$ ifconfig wlan0 down

码牛课堂也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线。大家可以进行参考学习:https://qr21.cn/FV7h05

①全方位,更合理的学习路径
路线图包括ArkTS基础语法、鸿蒙应用APP开发、鸿蒙能力集APP开发、次开发多端部署开发、物联网开发等九大模块,六大实战项目贯穿始终,由浅入深,层层递进,深入理解鸿蒙开发原理!

②多层次,更多的鸿蒙原生应用
路线图将包含完全基于鸿蒙内核开发的应用,比如一次开发多端部署、自由流转、元服务、端云一体化等,多方位的学习内容让学生能够高效掌握鸿蒙开发,少走弯路,真正理解并应用鸿蒙的核心技术和理念。

③实战化,更贴合企业需求的技术点
学习路线图中的每一个技术点都能够紧贴企业需求,经过多次真实实践,每一个知识点、每一个项目,都是码牛课堂鸿蒙研发团队精心打磨和深度解析的成果,注重对学生的细致教学,每一步都确保学生能够真正理解和掌握。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:https://qr21.cn/FV7h05

如何快速入门:

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

大厂鸿蒙面试题::https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/682229.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用自动获客软件实现高效精准获客

在数字化时代的浪潮中,企业之间的竞争愈发激烈。客户资源的获取成为企业生存和发展的关键。传统的获客方式如广告投放、线下推广等不仅成本高昂,而且效率和准确性难以保证。随着科技的进步,自动获客软件应运而生,它以其独特的优势…

【Linux】yum与vim

文章目录 软件包管理器:yumLinux安装和卸载软件包Linux中的编辑器:vimvim下的底行模式vim下的正常模式vim下的替换模式vim下的视图模式vim下的多线程 软件包管理器:yum yum其实就是一个软件,也可以叫商店 和你手机上的应用商店或app store一…

多进程编程

创建一对父子进程&#xff1a; 父进程负责向文件中写入 长方形的长和宽 子进程负责读取文件中的长宽信息后&#xff0c;计算长方形的面积 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #inc…

Linux(openEuler、CentOS8)企业内网DHCP服务器搭建(固定Mac获取指定IP)

----本实验环境为openEuler系统<以server方式安装>&#xff08;CentOS8基本一致&#xff0c;可参考本文&#xff09;---- 目录 一、知识点二、实验&#xff08;一&#xff09;为服务器配置网卡和IP&#xff08;二&#xff09;为服务器安装DHCP服务软件&#xff08;三&a…

STC8增强型单片机开发day02

逻辑分析仪 什么是逻辑分析仪 逻辑分析仪&#xff08;Logic Analyzer&#xff09;是一种工具&#xff0c;用于分析数字信号&#xff0c;例如控制信号&#xff0c;时钟信号等等。它可以用于调试和验证数字电路、嵌入式系统等等 本人采用的是mini版USB 逻辑分析仪。总共有10个…

【Linux】进程间通信方式之管道

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误的话&#xff0c;还望指出&…

7.基于麻雀搜索算法(SSA)优化VMD参数(SSA-VMD)

01.智能优化算法优化VMD参数的使用说明 02.基本原理 麻雀搜索算法&#xff08;SSA&#xff09;是一种基于鸟类觅食行为的启发式优化算法&#xff0c;它模拟了麻雀在觅食时的群体行为&#xff0c;通过模拟麻雀的觅食过程来寻找问题的最优解。SSA的基本原理是通过模拟麻雀的搜索…

机器学习初学者 6 个核心算法!建议收藏,反复观看!

今天再来介绍机器学习算法的基本概念和适用场景&#xff01; 首先&#xff0c;引用一句英国统计学家George E. P. Box的名言&#xff1a;All models are wrong, but some are useful. 没有哪一种算法能够适用所有情况&#xff0c;只有针对某一种问题更有用的算法。 也就是说&…

Linux-笔记 修改开发板默认时区

1. 时区文件 使用命令date -R查看当前的默认时区&#xff0c;date - R命令会自动解析/etc/localtime 文件&#xff0c;而该文件又是指向“ /usr/share/zoneinfo/$主时区/$次时区 ”&#xff0c;当需要更改到指定的时区只要将/etc/localtime 文件软链接到 ”/usr/share/zoneinf…

视频降噪算法 hqdn3d 原理分析

视频降噪 视频降噪是一种处理技术&#xff0c;旨在减少视频中的噪声&#xff0c;提高画面质量。噪声可能来自多种源头&#xff0c;包括摄像机的传感器、压缩算法、传输过程中的干扰等。降噪处理对于视频监控、视频会议、电影后期制作以及任何需要高画质输出的应用场景都非常重…

Linux进程——Linux环境变量

前言&#xff1a;在结束完上一篇的命令行参数时&#xff0c;我们简单的了解了一下Linux中的环境变量PATH&#xff0c;而环境变量不只有PATH&#xff0c;关于更多环境变量的知识我们将在本篇展开&#xff01; 本篇主要内容&#xff1a; 常见的环境变量 获取环境变量的三种方式 本…

springcloud服务间调用 feign 的使用

引入依赖包 <!-- 服务调用feign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>创建调用外部服务的接口 需要使用的地方注入 使用 启动类增…