OpenHarmony之分布式软总线
OpenHarmony之分布式软总线背景概述从之前的文档(OpenHarmony之内核层)可知,
分布式软总线是多设备终端的统一基座,为设备间的无缝互联提供了统一的分布式通信能力,能够快速发现并连接设备,高效地传输任务和数据。
分布式软总线实现近场设备间统一的分布式通信管理能力,提供不区分链路的设备间发现连接、组网和传输能力,主要功能如下:
发现连接:提供基于Wifi、蓝牙等通信方式的设备发现连接能力。
设备组网:提供统一的设备组网和拓扑管理能力,为数据传输提供已组网设备信息。
数据传输:提供数据传输通道,支持消息、字节、流、文件的数据传输能力。
分布式软总线是OpenHarmony重要特性、重要组件之一,是其他分布式子系统的基础,包括分布式数据管理,分布式任务调度,分布式硬件子系统等
架构目录结构:分布式软总线框架主要位于 foundation/communication/dsoftbus目录下,其目录结构如下:
//foundation/communication/dsoftbus
├── adapter # 适配层
│ ├── commo ...
WSL2相关
WSL2相关背景WSL:
Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层
在逛OpenHarmony开发者论坛的时候,看到使用WSL2编译OpenHarmony,突起想起自己之前在自己的Windows的电脑上也捣鼓了一下WSL2,装了个Ubuntu20.04,然后一直就扔在那没用,今天正好再继续弄弄
安装WSL配置 WSL 环境使用 win+s 搜索 启用或关闭windows功能,并打开:
适用于Linux的Windows子系统
虚拟机平台
下载 Linux 内核更新包:适用于 x64 计算机的 WSL2 Linux 内核更新包
运行并安装
将 WSL 2 设置为默认版本wsl --set-default-version 2
安装Linux分发版Microsoft Store搜索Ubuntu对应版本,这里选的是20.04,安装默认情况下会安装到C盘。
配置Linux为新的 Linux 分发版创建用户帐户
切换源
sudo vim /etc/apt/sources ...
OpenHarmony之系统调用
OpenHarmony之系统调用背景对于运行L0系统的硬件一般是mcu,资源有限,L0系统没有区分内核态和用户态,所有的代码都在内核态运行,所以不需要系统调用L2系统用的是Linux内核,所以系统调用跟Linux Kernel的是一样的。可以参见我之前的博文Linux之系统调用
所以我们主要来看看L1系统中系统调用机制的是怎么实现的。
后面的分析基于如下版本:
OpenHarmony v3.3.2
musl v1.2.0
L1系统调用对于运行L1系统的硬件一般集成了MMU,而且CPU有特权级别状态(状态寄存器的某些位),可以实现进程之间的隔离、内核态和用户态的隔离。系统调用就是在有内核态和用户态隔离的操作系统上,用户态进程访问内核态资源的一种方式
用户态c库通常我们的应用不会直接调用系统调用,而是通过c库的库函数来间接调用。
OpenHarmony上层使用的C库是musl libc, c库的一些函数接口调到最下面就是系统调用接口了。
通过third_party/musl/src/internal/syscall.h文件中,各种宏的展开,最终都会变成类似与__syscall3等这样的 ...
OpenHarmony南向之Audio
OpenHarmony南向之Audio音频架构Audio驱动框架基于HDF驱动框架实现,包含内核态(KHDF),和用户态(UHDF), 对北向提供音频HDI接口
音频框架图
驱动架构主要由以下几部分组成。
HDI adapter:实现Audio HAL层驱动(HDI接口适配),给Audio服务(frameworks)提供所需的音频硬件驱动能力接口。包含 Audio Manager、Audio Adapter、Audio Control、Audio Capture、Audio Render等接口对象。
Audio Interface Lib:向下配合内核中的Audio Driver Model使用,实现音频硬件的控制、录音数据的读取、播放数据的写入,向上和上层的Audio HDI Adapter层进行对接。
ADM(Audio Driver Model):音频驱动框架模型,向上服务于多媒体音频子系统,向下统一接口适配各自的驱动代码。
主要代码目录
drivers/hdf_core/framework/model/audio及 device/board/xxx/yyy/audio_dr ...
OpenHarmony之HDI
OpenHarmony之HDIHDI 介绍HDI(Hardware Device Interface,硬件设备接口)是HDF驱动框架为开发者提供的硬件规范化描述性接口。通过规范化的设备接口标准,为系统提供统一、稳定的硬件设备操作接口。
HDI支持“IPC模式”及“直通模式”两种调用方式。
IPC模式即跨进程通信模式,基于binder机制实现,调用端通过Proxy代理库调用HDI接口,具备良好的解耦性和安全性,是标准系统的默认部署方式。
直通模式,将HDI实现为共享库,调用端使用dlopen加载HDI实现库并直接调用HDI接口,是小型系统的默认部署方式,同时还适用于对性能有特殊需求的标准系统模块。
HDI硬件设备接口为硬件的接入提供了统一的实现通路。屏蔽了硬件接口的具体实现,实现系统软件与硬件的架构解耦。让开发者专注于硬件接口的使用,从而简化开发过程,提升开发效率。
HDI 实现下面主要介绍IPC模式下基于C/S(Client-Server客户端与服务端)结构的HDI接口实现,OpenHarmony的IPC也是基于Android的Binder机制。
IPC进程间通信IPC(I ...
OpenHarmony之hdc
OpenHarmony之hdc简介
hdc(OpenHarmony Device Connector)是 OpenHarmony 为开发人员提供的用于调试的命令行工具,通过该工具可以在Windows/Linux/MacOS等系统上与开发机或者模拟器进行交互。
类似于Android的adb,和adb类似,使用hdc的前提是开发机器hdc工具已安装好,设备端hdc已安装且已配置好。
开发机HDC开发机hdc工具通过OpenHarmony sdk获取,hdc在sdk的 toolchains目录下
从官方每日构建版本(http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist)里下载对应分支的SDK,
这里我对应的是OpenHarmony-3.2-Release的 ohos-sdk-full
解压:
zdd@xxx-PC:~/WorkSpace/OHOS/ohos-sdk$ tree
.
├── linux
│ ├── ets-linux-x64-3.2.15.3-Release.zip
│ ├── js-linux-x6 ...
USB Gadget 与 Configfs
USB Gadget 与 Configfs
USB Gadget 与 Configfs
USB Gadget
Configfs
使用configfs配置usb gadget
配置UAC
配置adb功能
参考
USB Gadget
A USB Linux Gadget is a device which has a UDC (USB Device Controller) and canbe connected to a USB Host to extend it with additional functions like a serial
A gadget is seen by its host as a set of configurations, each of which containsa number of interfaces which, from the gadget’s perspective, are known asfunctions, each function representing e.g. a serial connection ...
OpenHarmony之消息机制实现
OpenHarmony之消息机制实现背景在之前的介绍(OpenHarmony之HDF驱动框架)中,了解到OpenHarmony的消息机制主要有以下两种:
用户态应用发送消息到驱动。
用户态应用接收驱动主动上报事件。
下面我们分别来看看两种机制用户态的流程及实现
用户态应用发送消息到驱动用户态主要代码struct HdfIoService *serv = HdfIoServiceBind(SAMPLE_SERVICE_NAME);
......
ret = serv->dispatcher->Dispatch(&serv->object, SAMPLE_WRITE_READ, data, reply);
if (ret != HDF_SUCCESS) {
HDF_LOGE("fail to send service call");
goto out;
}
重点就是通过HdfIoServiceBind绑定服务,调用服务的Dispatch接口
HdfIoServiceBind接口流程HdfIoServiceBind接口的主要作用是open对 ...
初识鸿蒙系统
初识鸿蒙系统目录
初识鸿蒙系统
目录
概要
OpenHarmony 与 HarmonyOS
HarmonyOS Next
HarmonyOS
应用开发
ArkCompiler
设备开发
OpenHarmony
思考
参考
概要初识鸿蒙系统系列:
初识鸿蒙系统
OpenHarmony之内核层(内核、驱动子系统)
OpenHarmony之HDF驱动框架
OpenHarmony开发环境搭建
基于HDF的简单驱动开发实例
基于实际硬件实战体验(RK3566/RK3568,RK3588)
大家听到的鸿蒙系统有两个:HarmonyOS 和 OpenHarmony,但这两个系统是不同的概念
OpenHarmony 与 HarmonyOSOpenHarmony 与 HarmonyOS 类似AOSP与国内各手机厂商定制的Android OS之间的关系。
2007年,谷歌按照 Apache 开源许可协议的方法将安卓开源了,这个开源项目就是 AOSP,任何组织机构和个人,都可以从 AOSP 网站上下载和使用安卓系统的源代码,国内的移动手机厂家基于 AOSP 的源 ...
OpenHarmony之内核层
OpenHarmony之内核层目录
OpenHarmony之内核层
目录
OpenHarmony简介
技术架构
技术特性
硬件互助,资源共享
一次开发,多端部署
统一OS,弹性部署
系统类型
内核层
内核子系统
LiteOS
LiteOS-M
LiteOS-A
Linux
内核增强特性
Patch合入流程
HCK
KAL
驱动子系统
驱动架构
驱动开发
平台驱动
外设驱动
驱动架构代码说明
思考
参考
OpenHarmony简介技术架构OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。OpenHarmony技术架构如下所示:
技术特性硬件互助,资源共享主要通过下列模块达成
分布式软总线
分布式软总线是多设备终端的统一基座,为设备间的无缝互联提供了统一的分布式通信能力,能够快速发现并连接设备,高效地传输任务和数据。
分布式数据管理
分布式数据管理位于基于分布式软总线之 ...
OpenHarmony之HDF驱动框架
OpenHarmony之HDF驱动框架目录
OpenHarmony之HDF驱动框架
目录
概述
驱动模型
驱动加载
按需加载
按序加载(默认加载策略)
异常恢复(用户态驱动)
驱动服务管理
驱动消息机制管理
配置管理
配置语法
配置生成
平台驱动举例
统一服务模式
独立服务模式
外设驱动举例
思考总结
参考
概述HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范,旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的驱动管理的开发环境,力求做到一次开发,多系统部署。
驱动加载HDF驱动框架提供把和配置的设备列表匹配成功的驱动程序加载起来的功能
驱动服务管理HDF框架可以集中管理驱动服务,开发者可直接通过HDF框架对外提供的能力接口获取驱动相关的服务
驱动消息机制HDF框架提供统一的驱动消息机制,支持用户态应用向内核态驱动发送消息,也支持内核态驱动向用户态应用发送消息
配置管理HCS是HD ...
Kconfig相关
Kconfig相关背景以前准备写一下Linux内核里的Kconfig,但一直迟迟没有动手,最近在看 Openharmony 相关的东西,发现它也可以通过Kconfig和Kconfiglib进行可视化配置,所以想借此机会在这一起记录一下
作用#define配置宏主要用来使能/关闭代码,如下面:
#define CONFIG_TEST_ENABLE
#ifdef CONFIG_TEST_ENABLE
... ... ...
#endif
或来定义配置参数,如下:
#define CONFIG_TEST_SHOW_STRING "Test 123"
#define CONFIG_TEST_SHOW_INT (123)
但是如果参数越来越多,或者配置之间的关系越来越复杂,就会让代码的可读性越来越差,管理越麻烦,且不直观。所以Kconfig就是用来解决这些问题的,管理这些配置参数,而且能够可视化地去配置它们
Kconfig简介Kconfig语言定义了一套完整的规则来表述配置项及配置项间的关系Kconfig是配置项的描述文件,支持设置配置项及其默认值,依赖关系等等,该文件还会继续依赖各 ...