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

news2024/11/20 15:16:57

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 = true
	source = "$WIFI_BIN_DIR/wpa_cli"
	module_install_dir = "bin"
	install_images = ["system"]
	part_name = "rockchip_products"
}

ohos_prebuild_executable("wpa_supplicant") {
	install_enable = true
	source = "$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.coloradmin.cn/o/1657067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 扩展篇:ConfigFileApplicationListener源码解析

SpringBoot 扩展篇:ConfigFileApplicationListener源码解析 1.概述2. ConfigFileApplicationListener定义3. ConfigFileApplicationListener回调链路3.1 SpringApplication#run3.2 SpringApplication#prepareEnvironment3.3 配置environment 4. 环境准备事件 Config…

2024年全网最新AI实景自动无人直播软件:引领智能直播新潮流;打造智能化、互动性强的直播平台

随着互联网的飞速发展,直播已经成为商家品牌推广和产品宣传的重要方式。然而,AI实景自动无人直播软件的问世,进一步推动了直播行业的智能化进程,为商家带来了全新的直播体验。(ai无人自动直播大量招商加盟;…

【镜像仿真篇】磁盘镜像仿真常见错误

【镜像仿真篇】磁盘镜像仿真常见错误 记系统镜像仿真常见错误集—【蘇小沐】 1、实验环境 2023AFS39.E01(Windows11系统镜像)Arsenal Image Mounter,[v3.10.262]‍Vmware Workstation 17 Pro,[v17.5.1]Windows 11 专业工作站版…

BurpSuite软件的介绍以及下载

BurpSuite是一个用于攻击web应用程序的集成平台,它包含了许多工具,这些工具可以协同工作,有效地分享信息,并支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。这些工具包括但不限于: Proxy(代…

今天来聊聊Numpy (二)

​ 上一期和大家简短介绍了一下Numpy​,不知道你还记得惊喜嘛👀。不知道的各位看官可以追溯一下上一期内容。(别回来打小编就好🤪🤪) ​ 今天来聊聊Numpy!(👈上一期在…

OpenAI 发布 AI 生成图片检测器;特斯拉计划在中国测试自动驾驶出租车丨 RTE 开发者日报 Vol.200

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

【前端】CSS基础(1)

文章目录 前言一、CSS基础1、 CSS是什么2、 CSS基本语法规范3、 代码风格3.1 样式格式3.2 样式大小写3.3 空格规范 4、 CSS引入方式4.1 内部样式表4.2 行内样式表4.3 外部样式 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明,关于CSS的更多讲解以及HTML、Javasc…

系统安全与应用【2】

1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB 菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。 实例&…

FANUC机器人故障诊断—报警代码(五)

FANUC机器人故障诊断中关于报警代码的介绍更新如下: 一、报警代码(SRVO-214) SRVO-214 6轴放大器保险丝熔断 [原因]6轴伺服放大器上的保险丝(FS2,FS3)已熔断。括号内的数字表示在第几台6轴伺服放大器上检测出了保险丝熔断。 [对策] 1.保险…

TL-WN826N无线网卡连接电脑蓝屏,提示rtl8188gu.sys

TL-WN826N无线网卡插电脑就蓝屏,提示rtl8188gu.sys 处理方法: 设备管理器中卸载其他的2.0无线网卡程序和功能中卸载网卡驱动TPlink官网下载 TL-WN826N V1.0_1.0.0(https://www.tp-link.com.cn/product_572.html?vdownload)&…

RAG 检索的底座:Milvus Cloud向量数据库

在业界实践中,RAG 检索通常与向量数据库密切结合,也催生了基于 ChatGPT + Vector Database + Prompt 的 RAG 解决方案,简称为 CVP 技术栈。这一解决方案依赖于向量数据库高效检索相关信息以增强大型语言模型(LLMs),通过将 LLMs 生成的查询转换为向量,使得 RAG 系统能在向…

MoviePy(Python音视频开发)

音视频基础帧率、码率、分辨率视频格式H.264和H.265视频压缩算法 Moviepy常见剪辑类VideoFlieClipImageFlieClipColorClipTextClipCompositeVideoClipAudioFlieClipCompositeAudioClip 常见操作音视频的读入与导出截取音视频 音视频基础 帧率、码率、分辨率 体积(V…

【SAP ME 38】SAP ME发布WebService配置及应用

更多WebService介绍请参照 【SAP ME 28】SAP ME创建开发组件(DC)webService 致此一个WebService应用发布成功,把wsdl文件提供到第三方系统调用接口! 注意: 在SAP ME官方开发中默认对外开放的接口是WebService接口&am…

揭秘“绿色命脉”:永久基本农田如何守护“中国饭碗”?

今天,我们来共同揭开一个关乎国家粮食安全、生态平衡乃至经济社会可持续发展的重要概念——“永久基本农田”。同时,我们将深入解读我国对于这一宝贵资源的保护方针,理解其在守护“中国饭碗”,确保国家粮食安全中的关键作用。 一…

服务器端口怎么查,服务器端口查看方法详解

服务器端口是网络通信的关键组件,对于网络管理员和系统管理员来说,了解和掌握如何查看服务器端口是非常重要的。接下来介绍两种常用的方法来查看服务器端口。 方法一:使用命令提示符(CMD) 1. 首先,点击电脑…

知从科技应邀参加恩智浦技术日巡回研讨会郑州站汽车电子专场

4月18日,恩智浦技术日巡回研讨会的首个汽车电子专场在郑州成功举办。此次研讨会汇聚了众多行业专家,聚焦前沿的赋能技术,共同探讨汽车电子架构、ADAS、汽车电气化、车载信息娱乐系统、UWB超宽带等热门应用。作为恩智浦合作伙伴,知…

鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙的使用

gn是什么? gn 存在的意义是为了生成 ninja,如果熟悉前端开发,二者关系很像 Sass和CSS的关系. 为什么会有gn,说是有个叫even的谷歌负责构建系统的工程师在使用传统的makefile构建chrome时觉得太麻烦,不高效,所以设计了一套更简单,更高效新的构建工具gnninja,然后就被广泛的使用…

二叉树的定理和存储结构

文章目录 前言一、二叉树的定理二、满二叉树与完全二叉树1.满二叉树的定义2.完全二叉树的定义3.完全二叉树的特殊定理 三、完全二叉树的存储结构1.顺序存储结构2.链式存储结构 总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便…

经典回溯算法之N皇后问题

问题描述: 有一个N*N的棋盘,需要将N个皇后放在棋盘上,保证棋盘的每一行每一列每一左斜列每一右斜列都最多只能有一个皇后。 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如…

智慧粮库/粮仓视频监管系统:AI视频智能监测保障储粮安全

智慧粮库视频监管系统是一种基于物联网、AI技术和视频监控技术的先进管理系统,主要用于对粮食储存环境进行实时监测、数据分析和预警。TSINGSEE青犀智慧粮库/粮仓视频智能管理系统方案通过部署多区域温、湿度、空气成分等多类传感器以及视频监控等设施,对…