赞
踩
用户最常见到并与之交互的操作系统界面,其实只是操作系统最外面的一层。操作系统最重要的任务,包括管理硬件设备,分配系统资源等,我们称之为操作系统内在最重要的核心功能。而实现这些核心功能的操作系统模块,业界一般称之为操作系统“内核”。
操作系统是位于应用和硬件之间的系统软件,向上提供易用的程序接口和运行环境,向下管理硬件资源。内核位于操作系统的下层,为操作系统上层的程序框架提供硬件资源的并发管理。
图1 操作系统架构
业界的内核有很多,但无论是什么内核,基本上有几个最重要的组成单元是每个内核均要具备的,分别是:
OpenHarmony采用了多内核结构,支持Linux和LiteOS,开发者可按不同产品规格进行选择使用。linux和LiteOS均具备上述组成单元,只是实现方式有所不同。多个内核通过KAL(Kernel Abstraction Layer)模块,向上提供统一的标准接口。
内核子系统位于OpenHarmony下层。需要特别注意的是,由于OpenHarmony面向多种设备类型,这些设备有着不同的CPU能力,存储大小等。为了更好的适配这些不同的设备类型,内核子系统支持针对不同资源等级的设备选用适合的OS内核,内核抽象层(KAL,Kernel Abstract Layer)通过屏蔽内核间差异,对上层提供基础的内核能力。
图2 OpenHarmony架构图
OpenHarmony按照支持的设备可分为如下几种系统类型:
OpenHarmony针对不同量级的系统,使用了不同形态的内核。轻量系统、小型系统可以选用LiteOS;小型系统和标准系统可以选用Linux。其对应关系如下表:
表1 系统关系对应表
系统级别 | 轻量系统 | 小型系统 | 标准系统 |
LiteOS-M | √ | × | × |
LiteOS-A | × | √ | √ |
Linux | × | √ | √ |
OpenHarmony LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点,其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等,分为硬件相关层以及硬件无关层,硬件相关层提供统一的HAL(Hardware Abstraction Layer)接口,提升硬件易适配性,不同编译工具链和芯片架构的组合分类,满足AIoT类型丰富的硬件和编译工具链的拓展。
图3 LiteOS-M架构图
LiteOS-M使用指导请参见LiteOS-M内核概述的“使用说明”章节。
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重要的新特性如下:
LiteOS-A使用指导请参见LiteOS-A内核概述的“使用说明”章节。
OpenHarmony的Linux内核基于开源Linux内核LTS 4.19.y / 5.10.y 分支演进,在此基线基础上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。
内核的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仓对应的路径文件里,即可生效。
OpenHarmony LiteOS-M内核是面向IoT领域构建的轻量级物联网操作系统内核,具有小体积、低功耗、高性能的特点。其代码结构简单,主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等。支持驱动框架HDF(Hardware Driver Foundation),统一驱动标准,为设备厂商提供了更统一的接入方式,使驱动更加容易移植,力求做到一次开发,多系统部署。
OpenHarmony LiteOS-M内核架构包含硬件相关层以及硬件无关层,如下图所示,其中硬件相关层按不同编译工具链、芯片架构分类,提供统一的HAL(Hardware Abstraction Layer)接口,提升了硬件易适配性,满足AIoT类型丰富的硬件和编译工具链的拓展;其他模块属于硬件无关层,其中基础内核模块提供基础能力,扩展模块提供网络、文件系统等组件能力,还提供错误处理、调测等能力,KAL(Kernel Abstraction Layer)模块提供统一的标准接口。
图1 内核架构图
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 内核启动流程
目录结构如下。
- /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层。
动态加载模块:待加载的共享库需要验签或者限制来源,确保安全性。
OpenHarmony LiteOS-M内核的编译构建系统是一个基于gn和ninja的组件化构建系统,支持按组件配置、裁剪和拼装,按需构建出定制化的产品。本文主要介绍如何基于gn和ninja编译LiteOS-M工程,GCC+gn、IAR、Keil MDK等编译方式可以参考社区爱好者贡献的站点。
在搭建各个开发板环境前,需要完成OpenHarmony系统基础环境搭建。系统基础环境主要是指OpenHarmony的编译环境和开发环境,详细介绍请参考官方站点快速入门环境搭建部分。开发者需要根据环境搭建文档完成环境搭建。
详细的源码获取方式,请见源码获取。获取OpenHarmony完整仓代码后,假设克隆目录为~/OpenHarmony
。
Qemu模拟器: arm_mps2_an386、esp32、riscv32_virt、SmartL_E802
, 编译运行详见: Qemu指导
恒玄科技: bes2600
, 编译运行详见: 恒玄开发指导
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/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。