鸿蒙内核框架
1 内核概述内核简介
用户最常见到并与之交互的操作系统界面,其实只是操作系统最外面的一层。操作系统最重要的使命,包括管理硬件装备,分配系统资源等,我们称之为操作系统内在最重要的核心功能。而实现这些核心功能的操作系统模块,业界一般称之为操作系统“内核”。
实现原理
操作系统是位于应用和硬件之间的系统软件,向上提供易用的程序接口和运行环境,向下管理硬件资源。内核位于操作系统的下层,为操作系统上层的程序框架提供硬件资源的并发管理。
图1 操作系统架构
https://i-blog.csdnimg.cn/blog_migrate/202f98608b5938e80976224e3fc5674b.png
多内核架构和基本构成
业界的内核有很多,但无论是什么内核,基本上有几个最重要的构成单位是每个内核均要具备的,分别是:
[*]负责持久化数据,并让应用程序能够方便的访问持久化数据的“文件系统”。
[*]负责管理进程地点空间的“内存管理”。
[*]负责管理多个进程的“进程管理”大概“使命管理“。
[*]负责本机操作系统和另外一个装备上操作系统通信的“网络”。
OpenHarmony采用了多内核布局,支持Linux和LiteOS,开发者可按不同产物规格举行选择使用。linux和LiteOS均具备上述构成单位,只是实现方式有所不同。多个内核通过KAL(Kernel Abstraction Layer)模块,向上提供统一的标准接口。
内核子系统位于OpenHarmony下层。需要特别注意的是,由于OpenHarmony面向多种装备范例,这些装备有着不同的CPU能力,存储巨细等。为了更好的适配这些不同的装备范例,内核子系统支持针对不同资源等级的装备选用适合的OS内核,内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽内核间差异,对上层提供底子的内核能力。
图2 OpenHarmony架构图
https://i-blog.csdnimg.cn/blog_migrate/60cc484281bd03848a0e62b8a5dc0b02.png
不同内核适配的系统及装备范例
OpenHarmony按照支持的装备可分为如下几种系统范例:
[*]轻量系统(mini system) 面向MCU类处置惩罚器比方Arm Cortex-M、RISC-V 32位的装备,硬件资源极其有限,支持的装备最小内存为128KiB,可以提供多种轻量级网络协议,轻量级的图形框架,以及丰富的IOT总线读写部件等。可支撑的产物如智能家居范畴的毗连类模组、传感器装备、穿戴类装备等。
[*]小型系统(small system) 面向应用处置惩罚器比方Arm Cortex-A的装备,支持的装备最小内存为1MiB,可以提供更高的安全能力、标准的图形框架、视频编解码的多媒体能力。可支撑的产物如智能家居范畴的IP Camera、电子猫眼、路由器以及智慧出行域的行车记录仪等。
[*]标准系统(standard system) 面向应用处置惩罚器比方Arm Cortex-A的装备,支持的装备最小内存为128MiB,可以提供增强的交互能力、3D GPU以及硬件合成能力、更多控件以及动效更丰富的图形能力、完备的应用框架。可支撑的产物如高端的冰箱显示屏。
OpenHarmony针对不同量级的系统,使用了不同形态的内核。轻量系统、小型系统可以选用LiteOS;小型系统和标准系统可以选用Linux。其对应关系如下表:
表1 系统关系对应表
系统级别
轻量系统
小型系统
标准系统
LiteOS-M
√
×
×
LiteOS-A
×
√
√
Linux
×
√
√
2 LiteOS-M
内核架构
OpenHarmony LiteOS-M内核是面向IoT范畴构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点,其代码布局简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目次等,分为硬件相干层以及硬件无关层,硬件相干层提供统一的HAL(Hardware Abstraction Layer)接口,提拔硬件易适配性,不同编译工具链和芯片架构的组合分类,满意AIoT范例丰富的硬件和编译工具链的拓展。
图3 LiteOS-M架构图
https://i-blog.csdnimg.cn/blog_migrate/14237cc1f7cfd2f084e1667c3b6d628a.png
使用引导
LiteOS-M使用引导请参见LiteOS-M内核概述的“使用分析”章节。
3 LiteOS-A
内核架构
OpenHarmony 轻量级内核是基于IoT范畴轻量级物联网操作系统Huawei LiteOS内核演进发展的新一代内核,包罗LiteOS-M和LiteOS-A两类内核。LiteOS-M内核主要应用于轻量系统,面向的MCU(Microprocessor Unit)一般是百K级内存,可支持MPU(Memory Protection Unit)隔离,业界类似的内核有FreeRTOS或ThreadX等;LiteOS-A内核主要应用于小型系统,面向装备一般是M级内存,可支持MMU(Memory Management Unit)隔离,业界类似的内核有Zircon或Darwin等。
为顺应IoT产业的高速发展,OpenHarmony 轻量级内核不断优化和扩展,能够带给开发者友好的开发体验和统一开放的生态系统能力。轻量级内核LiteOS-A重要的新特性如下:
[*]新增了丰富的内核机制:
[*]新增虚拟内存、系统调用、多核、轻量级IPC(Inter-Process Communication,进程间通信)、DAC(Discretionary Access Control,自主访问控制)等机制,丰富了内核能力;
[*]为了更好的兼容软件和开发者体验,新增支持多进程,使得应用之间内存隔离、相互不影响,提拔系统的坚固性。
[*]引入统一驱动框架HDF(Hardware Driver Foundation)
引入统一驱动框架HDF,统一驱动标准,为装备厂商提供了更统一的接入方式,使驱动更加容易移植,力求做到一次开发,多系统部署。
[*]支持1200+标准POSIX接口
更加全面的支持POSIX标准接口,使得应用软件易于开发和移植,给应用开发者提供了更友好的开发体验。
[*]内核和硬件高解耦轻量级内核与硬件高度解耦,新增单板,内核代码不用修改。图4OpenHarmony LiteOS-A内核架构图
https://i-blog.csdnimg.cn/blog_migrate/d974f327581a9ec7579f22799cf3e54e.png
使用引导
LiteOS-A使用引导请参见LiteOS-A内核概述的“使用分析”章节。
4 Linux
内核概述
OpenHarmony的Linux内核基于开源Linux内核LTS 4.19.y / 5.10.y 分支演进,在此基线底子上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。
[*]Linux社区LTS 4.19.y分支信息请查看kernel官网。
[*]Linux社区LTS 5.10.y分支信息请查看kernel官网。
内核的Patch构成模块,在编译构建流程中,针对详细芯片平台,合入对应的架构驱动代码,举行编译对应的内核镜像。全部补丁来源均服从GPL-2.0协议。
内核增强特性
OpenHarmony针对linux内核在ESwap(Enhanced Swap)、关联线程组调度和CPU轻量级隔离做了增强。
Enhanced SWAP特性
ESwap提供了自界说新增存储分区作为内存交换分区的能力,并创建了一个常驻进程zswapd将ZRAM压缩后的匿名页加密换出到ESwap存储分区,从而能完全的空出一块可用内存,以此来到达维持Memavailable水线的目标。同时,配合这个接纳机制,在整个内存框架上举行改进,优化匿名页和文件页的接纳服从,并且使两者的接纳比例更加公道以制止过度接纳导致的refault问题造成卡顿现象。
关联线程组调度
关联线程组(related thread group)提供了对一组关键线程调度优化的能力,支持对关键线程组单独举行负载统计和推测,并且设置优选CPU cluster功能,从而到达为组内线程选择最优CPU运行并且根据分组负载选择合适的CPU调频点运行。
CPU轻量级隔离
CPU轻量级隔离特性提供了根据系统负载和用户配置来选择合适的CPU举举措态隔离的能力。内核会将被隔离CPU上的使命和中断迁移到其他合适的CPU上执行,被隔离的CPU会进入ilde状态,以此来到达功耗优化的目标。同时提供用户态的配置和查询接口来实现更好的系统调优。
使用引导
1. 合入HDF补丁 在kernel/linux/build仓中,按照kernel.mk中HDF的补丁合入方法,合入不同内核版本对应的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) 2.合入芯片平台驱动补丁 以Hi3516DV300为例:
在kernel/linux/build仓中,按照kernel.mk中的芯片组件所对应的patch路径规则及定名规则,将对应的芯片组件patch放到对应路径下:
DEVICE_PATCH_DIR := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch
DEVICE_PATCH_FILE := $(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch 3.修改本身所需要编译的config 在kernel/linux/build仓中,按照kernel.mk中的芯片组件所对应的patch路径规则及定名规则,将对应的芯片组件config放到对应路径下:
KERNEL_CONFIG_PATH := $(OHOS_BUILD_HOME)/kernel/linux/config/${KERNEL_VERSION}DEFCONFIG_FILE := $(DEVICE_NAME)_$(BUILD_TYPE)_defconfig 须知:
由于OpenHarmony工程的编译构建流程中会拷贝kernel/linux/linux-*.*的代码环境后举行打补丁动作,在使用OpenHarmony的版本级编译命令前,需要kernel/linux/linux-*.*原代码环境。
根据不同系统工程,编译完成后会在out目次下的kernel目次中天生对应实际编译的内核,基于此目次的内核,举行对应的config修改,将最后天生的.config文件cp到config仓对应的路径文件里,即可见效。
5 轻量级内核概述
内核简介
OpenHarmony LiteOS-M内核是面向IoT范畴构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点。其代码布局简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目次等。支持驱动框架HDF(Hardware Driver Foundation),统一驱动标准,为装备厂商提供了更统一的接入方式,使驱动更加容易移植,力求做到一次开发,多系统部署。
OpenHarmony LiteOS-M内核架构包罗硬件相干层以及硬件无关层,如下图所示,其中硬件相干层按不同编译工具链、芯片架构分类,提供统一的HAL(Hardware Abstraction Layer)接口,提拔了硬件易适配性,满意AIoT范例丰富的硬件和编译工具链的拓展;其他模块属于硬件无关层,其中底子内核模块提供底子能力,扩展模块提供网络、文件系统等组件能力,还提供错误处置惩罚、调测等能力,KAL(Kernel Abstraction Layer)模块提供统一的标准接口。
图1 内核架构图
https://i-blog.csdnimg.cn/blog_migrate/41c1e678b045020084cfa20ec5832079.png
CPU体系架构支持
CPU体系架构分为通用架构界说和特定架构界说两层,通用架构界说层为全部体系架构都需要支持和实现的接口,特定架构界说层为特定体系架构所特有的部分。在新增一个体系架构的时候,必须需要实现通用架构界说层,如果该体系架构还有特有的功能,可以在特定架构界说层来实现。
表1 CPU体系架构规则
规则
通用体系架构层
特定体系架构层
头文件位置
arch/include
arch/<arch>/<arch>/<toolchain>/
头文件定名
los_<function>.h
los_arch_<function>.h
函数定名
Halxxxx
Halxxxx
LiteOS-M已经支持ARM Cortex-M3、ARM Cortex-M4、ARM Cortex-M7、ARM Cortex-M33、RISC-V等主流架构。
运行机制
在开发板配置文件target_config.h配置系统时钟、每秒Tick数,可以对使命、内存、IPC、异常处置惩罚模块举行裁剪配置。系统启动时,根据配置举行指定模块的初始化。内核启动流程包罗外设初始化、系统时钟配置、内核初始化、操作系统启动等,详见下图。
图2 内核启动流程
https://i-blog.csdnimg.cn/blog_migrate/a322c0039443a9127728d1b7d7f58ea0.png
目次
目次布局如下。
/kernel/liteos_m
├── arch # 内核指令架构层目录
│ ├── arm # arm 架构代码
│ │ ├── arm9 # arm9 架构代码
│ │ ├── cortex-m3 # cortex-m3架构代码
│ │ ├── cortex-m33 # cortex-m33架构代码
│ │ ├── cortex-m4 # cortex-m4架构代码
│ │ ├── cortex-m55 # cortex-m55架构代码
│ │ ├── cortex-m7 # cortex-m7架构代码
│ │ └── include # arm架构公共头文件目录
│ ├── csky # csky架构代码
│ │ └── v2 # csky v2架构代码
│ ├── include # 架构层对外接口存放目录
│ ├── risc-v # risc-v 架构
│ │ ├── nuclei # 芯来科技risc-v架构代码
│ │ └── riscv32 # risc-v官方通用架构代码
│ └── xtensa # xtensa 架构代码
│ └── lx6 # xtensa lx6架构代码
├── components # 可选组件
│ ├── backtrace # 栈回溯功能
│ ├── cppsupport # C++支持
│ ├── cpup # CPUP功能
│ ├── dynlink # 动态加载与链接
│ ├── exchook # 异常钩子
│ ├── fs # 文件系统
│ ├── lmk # Low memory killer 机制
│ ├── lms # Lite memory sanitizer 机制
│ ├── net # Network功能
│ ├── power # 低功耗管理
│ ├── shell # shell功能
│ └── trace # trace 工具
├── drivers # 驱动框架Kconfig
├── kal # 内核抽象层
│ ├── cmsis # cmsis标准接口支持
│ └── posix # posix标准接口支持
├── kernel # 内核最小功能集支持
│ ├── include # 对外接口存放目录
│ └── src # 内核最小功能集源码
├── testsuites # 内核测试用例
├── tools # 内核工具
├── utils # 通用公共目录
text
约束
开发语言:C/C++;
实用架构:详见目次布局arch层。
动态加载模块:待加载的共享库需要验签大概限定来源,确保安全性。
6 使用分析
OpenHarmony LiteOS-M内核的编译构建系统是一个基于gn和ninja的组件化构建系统,支持按组件配置、裁剪和拼装,按需构建出定制化的产物。本文主要先容如何基于gn和ninja编译LiteOS-M工程,GCC+gn、IAR、Keil MDK等编译方式可以参考社区爱好者贡献的站点。
搭建系统底子环境
在搭建各个开发板环境前,需要完成OpenHarmony系统底子环境搭建。系统底子环境主要是指OpenHarmony的编译环境和开发环境,详细先容请参考官方站点快速入门环境搭建部分。开发者需要根据环境搭建文档完成环境搭建。
获取OpenHarmony源码
详细的源码获取方式,请见源码获取。获取OpenHarmony完备仓代码后,假设克隆目次为~/OpenHarmony。
已支持的示例工程
Qemu模拟器: arm_mps2_an386、esp32、riscv32_virt、SmartL_E802, 编译运行详见: Qemu引导
恒玄科技: bes2600, 编译运行详见: 恒玄开发引导
社区移植工程链接
LiteOS-M内核移植的详细开发板的工程由社区开发者提供,可以访问社区开发者代码仓获取。如果您移植支持了更多开发板,可以提供链接给我们举行社区分享。
[*]cortex-m3:
[*]STM32F103 https://gitee.com/rtos_lover/stm32f103_simulator_keil
该仓包罗OpenHarmony LiteOS-M内核基于STM32F103芯片架构构建的Keil工程,支持Keil MDK方式举行编译。
[*]cortex-m4:
[*]野火寻衅者STM32F429IGTb https://gitee.com/harylee/stm32f429ig_firechallenger
该仓包罗OpenHarmony LiteOS-M内核移植支持野火寻衅者STM32F429IGTb开发板的工程代码,支持Ninja、GCC、IAR等方式举行编译。
文章转载自:https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/device-dev/kernel/kernel-overview.md/OpenHarmonyhttps://docs.openharmony.cn/pages/v3.2Beta/zh-cn/device-dev/kernel/kernel-overview.md/
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]