OpenHarmony之内核层解析~

OpenHarmony简介

技术架构

OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 组件”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的组件。OpenHarmony技术架构如下所示:

技术特性

硬件互助,资源共享

主要通过下列模块达成

  • 分布式软总线

    分布式软总线是多设备终端的统一基座,为设备间的无缝互联提供了统一的分布式通信能力,能够快速发现并连接设备,高效地传输任务和数据。

  • 分布式数据管理

    分布式数据管理位于基于分布式软总线之上的能力,实现了应用程序数据和用户数据的分布式管理。

  • 分布式任务调度

    分布式任务调度基于分布式软总线、分布式数据管理、分布式Profile等技术特性,构建统一的分布式服务管理(发现、同步、注册、调用)机制,支持对跨设备的应用进行远程启动、远程调用、绑定/解绑、以及迁移等操作,能够根据不同设备的能力、位置、业务运行状态、资源使用情况并结合用户的习惯和意图,选择最合适的设备运行分布式任务

  • 设备虚拟化

    分布式设备虚拟化平台可以实现不同设备的资源融合、设备管理、数据处理,将周边设备作为手机能力的延伸,共同形成一个超级虚拟终端。

一次开发,多端部署

OpenHarmony提供用户程序框架、Ability框架以及UI框架,多终端软件平台API具备一致性,确保用户程序的运行兼容性。一次开发、多端部署。

统一OS,弹性部署

OpenHarmony通过组件化和组件弹性化等设计方法,做到硬件资源的可大可小,在多种终端设备间,按需弹性部署,全面覆盖了ARM、RISC-V、x86等各种CPU,从百KiB到GiB级别的RAM。

系统类型

OpenHarmony支持如下几种系统类型:

类型处理器最小内存能力
轻量系统(mini system)MCU类处理器(例如Arm Cortex-M、RISC-V 32位的设备)128KiB提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。
小型系统(small system)应用处理器(例如Arm Cortex-A的设备)1MiB提供更高的安全能力、标准的图形框架、视频编解码的多媒体能力。
标准系统(standard system)应用处理器(例如Arm Cortex-A的设备)128MiB提供增强的交互能力、3D GPU以及硬件合成能力、更多控件以及动效更丰富的图形能力、完整的应用框架。

内核层

  • 内核子系统: 采用多内核(Linux内核或者LiteOS)设计,支持针对不同资源受限设备选用适合的OS内核。内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等。

  • 驱动子系统: 驱动框架(HDF)是系统硬件生态开放的基础,提供统一外设访问能力和驱动开发、管理框架。 OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座。

内核子系统

OpenHarmony针对不同量级的系统,分别使用了不同形态的内核,分别为LiteOS和Linux。

系统级别轻量系统小型系统标准系统
LiteOS×
Linux×

LiteOS

OpenHarmony LiteOS内核是面向IoT领域的实时操作系统内核,基于Huawei LiteOS内核演进发展而来,包含LiteOS-M和LiteOS-A两类内核。

  • LiteOS-M内核面向的MCU一般是百K级内存,可支持MPU(Memory Protection Unit)隔离,类似FreeRTOS或ThreadX等;
  • LiteOS-A内核面向设备一般是M级内存,可支持MMU(Memory Management Unit)隔离,类似Zircon或Darwin等。
LiteOS-M

LiteOS-M内核架构包含硬件相关层和硬件无关层。
硬件相关层按不同编译工具链、芯片架构分类,提供统一的HAL接口;
硬件无关层,其中基础内核模块提供基础能力,扩展模块提供网络、文件系统等组件能力,还提供错误处理、调测等能力,KAL模块提供统一的标准接口。

注:ARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层

LiteOS-A

LiteOS-A内核重要的新特性如下:

  • 新增了丰富的内核机制, 新增虚拟内存、系统调用、多核、轻量级IPC、DAC(Discretionary Access Control,自主访问控制)等机制,丰富了内核能力;新增支持多进程,使得应用之间内存隔离、相互不影响

  • 支持1200+标准POSIX接口 更加全面的支持POSIX标准接口,使得应用软件易于开发和移植

Linux

OpenHarmony 中Linux内核从LTS版本中选择合适的版本作为内核的基础版本,目前已完成对Linux-4.19及Linux-5.10的适配及支持,4.19已经处于维护周期

下面是 Linux 内核适配层的目录结构:

drivers/hdf_core/adapter/khdf/linux
├── manager               #linux内核下启动适配启动HDF框架代码
├── model                 #驱动模型适配linux代码
│   ├── audio
│   ├── camera
│   ├── display
│   ├── input
│   ├── misc              #杂项驱动模型,包括dsoftbus、light、vibrator等
│   ├── network           #网络驱动模型,包括wifi、bt等
│   ├── sensor
│   ├── storage
│   └── usb
├── network               #适配linux内核网络代码
├── osal                  #适配linux内核的posix接口
├── platform              #平台设备接口适配linux内核代码
│   ├── adc
│   ├── emmc
│   ├── fwk
│   ├── gpio
│   ├── i2c
│   ├── mipi_csi
│   ├── mipi_dsi
│   ├── mmc
│   ├── pwm
│   ├── regulator
│   ├── rtc
│   ├── sdio
│   ├── spi
│   ├── uart
│   └── watchdog        
├── test                  #linux内核测试用例
└── utils                 #linux内核下编译配置解析代码的编译脚本
内核增强特性

OpenHarmony 针对 linux 内核做了以下增强:

  • Enhanced SWAP 特性
  • 关联线程组调度
  • CPU 轻量级隔离
  • New IP内核协议栈
  • XPM(eXecutable Permission Manager)模块

这些 Linux 内核增强特性,是否对我们现在的内核优化有啥借鉴意义?

Patch合入流程

主要是按照kernel.mk中对应的patch路径规则及命名规则,合入相应补丁

  1. 合入不同内核版本对应的HDF内核补丁:
    $(OHOS_BUILD_HOME)/drivers/hdf_core/adapter/khdf/linux/patch_hdf.sh $(OHOS_BUILD_HOME) $(KERNEL_SRC_TMP_PATH) $(KERNEL_PATCH_PATH) $(DEVICE_NAME)
  1. 合入芯片平台驱动补丁,以Hi3516DV300为例:
    DEVICE_PATCH_DIR := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patchDEVICE_PATCH_FILE := $(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch
  1. 修改自己所需要编译的config:
    KERNEL_CONFIG_PATH := $(OHOS_BUILD_HOME)/kernel/linux/config/${KERNEL_VERSION}DEFCONFIG_FILE := $(DEVICE_NAME)_$(BUILD_TYPE)_defconfig
#### HCK

HCK(OpenHarmony Common Kernel)内核解耦框架。该框架为最新的v4.0 Beta版本引入,为开发者提供了整套插桩、注册、调用接口,减少对内核的侵入修改,统一解耦框架,插桩接口可在多平台间通用,使三方内核特性在不侵入或少侵入内核仓的情况下合入社区

HCK定义、注册、调用接口及流程图:

目前还只有 xpmnewip模块使用

直接合入内核仓或适用patch方法,相比有哪些弊端?维护,移植

KAL

内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽多内核差异,对上层提供基础的内核能力,包括进程/线程管理、内存管理、文件系统、网络管理和外设管理等

Linux内核中操作系统抽象层(OSAL,Operating System Abstraction Layer)部分:

drivers/hdf_core/adapter/khdf/linux/osal/
├── include
│   ├── hdf_log_adapter.h
│   ├── hdf_types.h
│   ├── osal_atomic_def.h
│   ├── osal_cdev_adapter.h
│   ├── osal_io_adapter.h
│   ├── osal_math.h
│   └── osal_uaccess.h
├── Makefile
└── src├── Makefile├── osal_cdev.c├── osal_deal_log_format.c├── osal_file.c├── osal_firmware.c├── osal_irq.c├── osal_mem.c├── osal_mutex.c├── osal_sem.c├── osal_spinlock.c├── osal_thread.c├── osal_time.c├── osal_timer.c└── osal_workqueue.c

驱动子系统

OpenHarmony驱动子系统采用C面向对象编程模型构建,通过平台解耦、内核解耦,兼容不同内核,提供了归一化的驱动平台底座,旨在为开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。

驱动架构

HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。
HDF驱动框架架构如下图所示:

HDF驱动架构主要组成部分:

  • HDI层: (Hardware Device Interface,硬件设备统一接口),通过规范化的设备接口标准,为系统提供统一、稳定的硬件设备操作接口。

  • HDF驱动框架: 提供统一的硬件资源管理、驱动加载管理、设备节点管理、设备电源管理以及驱动服务模型等功能,需要包含设备管理、服务管理、DeviceHost、PnPManager等模块。

  • 统一的配置界面: 支持硬件资源的抽象描述,屏蔽硬件差异,可以支撑开发者开发出与配置信息不绑定的通用驱动代码,提升开发及迁移效率,并可通过HC-Gen等工具快捷生成配置文件。

  • 操作系统抽象层: 提供统一封装的内核操作相关接口,屏蔽不同系统操作差异,包含内存、锁、线程、信号量等接口。

  • 平台驱动: 为外设驱动提供硬件(如:I2C/SPI/UART总线等平台资源)操作统一接口,同时对硬件操作进行统一的适配接口抽象以便于不同平台迁移。

  • 外设驱动模型: 面向外设驱动,提供常见的驱动抽象模型。

驱动开发

平台驱动

这里的平台设备,泛指I2C/UART等总线、以及GPIO/RTC等特定硬件资源。

平台驱动框架提供如下特性:

  • 统一的平台设备访问接口(向上):对平台设备操作接口进行统一封装,屏蔽不同SoC平台硬件差异以及不同OS形态差异,为系统及外设驱动提供标准的平台设备访问接口
  • 统一的平台驱动适配接口(向下):为平台设备驱动提供统一的适配接口,使其只关注自身硬件的控制,而不必关注设备管理及公共业务流程。
  • 提供设备注册、管理、访问控制等与SoC无关的公共能力。

目前支持的设备类型包括但不限于:ADC、DAC、GPIO、HDMI、I2C、I3C、MIPI_CSI、MIPI_DSI、MMC、Pin、PWM、Regulator、RTC、SDIO、SPI、UART、WatchDog等。

外设驱动

在HDF驱动框架及平台驱动框架的基础上,提供标准化的外设器件驱动,可以减少重复开发;提供统一的外设驱动抽象模型,屏蔽驱动与不同系统组件间的交互,使得驱动更具备通用性。

目前支持的外设设备类型包括但不限于:Audio、Camera、Codec、Face_auth、Fingerprint_auth、LCD、Light、Motion、Pin_auth、Sensor、Touchscreen、USB、User_auth、Vibrator、WLAN等。

驱动架构代码说明
仓库路径仓库内容
drivers/hdf_core/frameworkHDF框架、平台驱动框架、驱动模型等平台无关化的公共框架
drivers/hdf_core/adapter/khdf提供驱动框架对LiteOS-M、LiteOS-A内核、Linux等所有内核依赖适配
drivers/hdf_core/adapter/uhdf提供用户态驱动接口对系统依赖适配
drivers/hdf_core/adapter/uhdf2提供用户态驱动框架对系统依赖适配
drivers/peripheralDisplay、Input、Sensor、WLAN、Audio、Camera等外设模块硬件抽象层。
drivers/interfaceDisplay、Input、Sensor、WLAN、Audio、Camera等外设模块HDI接口定义。
drivers/external_device_manager扩展外部设备管理框架

思考

  • 为啥大费力气单独弄一套HDF驱动框架?为了上层的大一统?不同内核,不同硬件平台之间的迁移? 统一,多端
  • KAL+HDF,微内核的雏形?为后面引入微内核做准备?
  • 有什么好处优势?KAL+独立的HDF驱动框架,分层解耦,驱动模型抽象,最小化修改最底层硬件适配,增加开发适配通用性,提高开发适配效率
  • HCK,减少对社区内核侵入性,我们是否可以借鉴?
  • 桌面系统内核一定非得是Linux内核?与内核解耦

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

《鸿蒙 (Harmony OS)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. 应用开发导读(Java)

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门:https://qr21.cn/FV7h05

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

开发基础知识: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. ……

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

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

相关文章

平衡二叉树的构建(递归

目录 1.概念:2.特点:3.构建方法:4.代码:小结: 1.概念: 平衡二叉树(Balanced Binary Tree),也称为AVL树,是一种二叉树,它满足每个节点的左子树和右…

BDD - Python Behave Runner Script

BDD - Python Behave Runner Script 引言Runner Scriptsubprocess.run 调用 Behave 命令行调用 Behave 提供的 API behave_main 引言 通过终端命令执行 Behave 测试用例,有时 IDE 重启了,还得重新敲一遍命令,很是麻烦,说实话我都…

单例模式(C++实现)

RAII运用 只能在栈上创建对象 只能在堆上创建的对象 单例模式 设计模式 懒汉模式 解决线程安全 优化 饿汉模式 饿汉和懒汉的区别 线程安全与STL与其他锁

Hadoop入门学习笔记——四、MapReduce的框架配置和YARN的部署

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 四、MapReduce的框架配置和YARN的部署4.1. 配置MapReduce…

微擎模块 出现Error: template source ‘common/message’ is not exist!解决方法

今天有会员反馈微课堂分销中心打不开,错误提示模板找不到:Error: template source ‘common/message’ is not exist!,看了下这模板应该微擎框架通用的,进公众号会员管理-会员中心网址居然也打不开,提示一样的错误&…

【hacker送书第11期】Python数据分析从入门到精通

探索数据世界,揭示未来趋势 《Python数据分析从入门到精通》是你掌握Python数据分析的理想选择。本书深入讲解核心工具如pandas、matplotlib和numpy,助您轻松处理和理解复杂数据。 通过matplotlib、seaborn和创新的pyecharts,本书呈现生动直…

5g消息-5G时代短信升级-富媒体智能交互-互联网新入口

在5G时代,运营商和各大手机厂商都在积极推进5G消息的商用,基于短信入口的富媒体消息应用在近两年得到快速发展,并在企业端形成了广泛应用。 作为5G时代的数字原生应用,5G消息支持用户通过文字、图片、音频、视频、位置等富媒体方式…

GIT具体配置步骤详解

GIT配置具体步骤如下 SDK 使用 Repo 工具管理,拉取 SDK 需要配置安装 Repo 工具。 Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workf…

SpringBoot集成opencc4j实现繁体中文转为简体中文

背景 繁体中文转为简体中文的需求非常常见,特别是在中文语境下的文本处理和翻译应用中。有很多现成的工具和库可以实现这个功能,比如 OpenCC 、 HanLP 等。从网上下载的 MySQL 版诗词数据库中的诗词数据都是繁体字,这里使用 SpringBoot 集成…

Apache Flink 进阶教程(七):网络流控及反压剖析

目录 前言 网络流控的概念与背景 为什么需要网络流控 网络流控的实现:静态限速 网络流控的实现:动态反馈/自动反压 案例一:Storm 反压实现 案例二:Spark Streaming 反压实现 疑问:为什么 Flink(bef…

物联网产品设计,聊聊设备OTA的升级

物联网产品设计部分的OTA设备固件是一个非常重要的部分,能够实现升级用户服务、保障系统安全等功能。 在迅速变化和发展的物联网市场,新的产品需求不断涌现,因此对于智能硬件设备的更新需求就变得空前高涨,设备不再像传统设备一样…

unity HoloLens2开发,使用Vuforia识别实体 触发交互(二)(有dome)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、打包到HoloLens二、Vuforia相关1.配置识别框2.制作一个半透明识别框:3.设置如下4.问题 四 HoloLens2 问题总结 前言 我使用的utniy 版本:Unity 2021.3…

产品原型设计软件 Axure RP 9 mac支持多人写作设计

axure rp 9 mac是一款产品原型设计软件,它可以让你在上面任意构建草图、框线图、流程图以及产品模型,还能够注释一些重要地方,axure rp汉化版可支持同时多人写作设计和版本管理控制,这款交互式原型设计工具可以帮助设计者制作出高…

Jenkins自动化构建打包,部署

1.环境准备 上传jdk,maven和tomcat的包,解压到/usr/local下并配置环境变量。 配置jdk [rootserver04 ~]# vim /etc/profile.d/java.sh JAVA_HOME/usr/local/java export PATH$JAVA_HOME/bin:$PATH##加载环境变量 [rootserver04 ~]# source /etc/profi…

由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。

问题描述: 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者虚拟的请求路由),服务器无法或不会处理当前请求。 在实现向数据库中添加记录时,请求发送无效,参数也未传递到控…

HAL库的常用库函数(根据学习而更新)

目录 一、常用的GPIO相关HAL库函数 1、GPIO的初始化 2、配置GPIO引脚输出电平 3、切换指定引脚的电平,电平的翻转 4、读取指定GPIO引脚的电平 5、结构体 GPIO_InitTypeDef (引脚)定义: 6、高低电平的表示 7、延时函数&…

如何使用内网穿透工具实现Java远程连接本地Elasticsearch搜索分析引擎

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…

【计算机视觉中的多视图几何系列】深入浅出理解针孔相机模型

温故而知新,可以为师矣! 一、参考资料 《计算机视觉中的多视图几何-第五章》-Richard Hartley, Andrew Zisserman. 二、针孔模型相关介绍 1. 重要概念 1.1 投影中心/摄像机中心/光心 投影中心称为摄像机中心,也称为光心。投影中心位于一…

50个免费的 AI 工具,提升工作效率(附网址)

上次我们已经介绍了20个精选的提高工作效率的免费AI工具,但如果你觉得这些AI工具还不过瘾的话,想进一步成为职场中最了解AI的人,本文将汇总介绍免费最新的50个AI工具。 DeepSwap DeepSwap 是一个基于 AI 的工具,适用于想要制作令人…

给零基础朋友的编程课07 - 代码

给零基础朋友的编程课07-初识色彩、初识变量、案例3讲解_哔哩哔哩_bilibili Code: // // 案例3 // //// -设定画面- // size(1000, 1000); // 设置画面大小 background(7, 119, 132); // 设置背景颜色// - 绘画 - //// 1 绘制垂线 // 设定线条风格 …