广州好的网站设计公司,应用宝下载,wordpress 翻页,企业建网站计什么科目1 内核概述
内核简介
用户最常见到并与之交互的操作系统界面#xff0c;其实只是操作系统最外面的一层。操作系统最重要的任务#xff0c;包括管理硬件设备#xff0c;分配系统资源等#xff0c;我们称之为操作系统内在最重要的核心功能。而实现这些核心功能的操作系统模…1 内核概述
内核简介
用户最常见到并与之交互的操作系统界面其实只是操作系统最外面的一层。操作系统最重要的任务包括管理硬件设备分配系统资源等我们称之为操作系统内在最重要的核心功能。而实现这些核心功能的操作系统模块业界一般称之为操作系统“内核”。
实现原理
操作系统是位于应用和硬件之间的系统软件向上提供易用的程序接口和运行环境向下管理硬件资源。内核位于操作系统的下层为操作系统上层的程序框架提供硬件资源的并发管理。
图1 操作系统架构 多内核架构和基本组成
业界的内核有很多但无论是什么内核基本上有几个最重要的组成单元是每个内核均要具备的分别是
负责持久化数据并让应用程序能够方便的访问持久化数据的“文件系统”。负责管理进程地址空间的“内存管理”。负责管理多个进程的“进程管理”或者“任务管理“。负责本机操作系统和另外一个设备上操作系统通信的“网络”。
OpenHarmony采用了多内核结构支持Linux和LiteOS开发者可按不同产品规格进行选择使用。linux和LiteOS均具备上述组成单元只是实现方式有所不同。多个内核通过KALKernel Abstraction Layer模块向上提供统一的标准接口。
内核子系统位于OpenHarmony下层。需要特别注意的是由于OpenHarmony面向多种设备类型这些设备有着不同的CPU能力存储大小等。为了更好的适配这些不同的设备类型内核子系统支持针对不同资源等级的设备选用适合的OS内核内核抽象层KALKernel Abstract Layer通过屏蔽内核间差异对上层提供基础的内核能力。
图2 OpenHarmony架构图 不同内核适配的系统及设备类型
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领域构建的轻量级物联网操作系统内核具有小体积、低功耗、高性能的特点其代码结构简单主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等分为硬件相关层以及硬件无关层硬件相关层提供统一的HALHardware Abstraction Layer接口提升硬件易适配性不同编译工具链和芯片架构的组合分类满足AIoT类型丰富的硬件和编译工具链的拓展。
图3 LiteOS-M架构图 使用指导
LiteOS-M使用指导请参见LiteOS-M内核概述的“使用说明”章节。
3 LiteOS-A
内核架构
OpenHarmony 轻量级内核是基于IoT领域轻量级物联网操作系统Huawei LiteOS内核演进发展的新一代内核包含LiteOS-M和LiteOS-A两类内核。LiteOS-M内核主要应用于轻量系统面向的MCUMicroprocessor Unit一般是百K级内存可支持MPUMemory Protection Unit隔离业界类似的内核有FreeRTOS或ThreadX等LiteOS-A内核主要应用于小型系统面向设备一般是M级内存可支持MMUMemory Management Unit隔离业界类似的内核有Zircon或Darwin等。
为适应IoT产业的高速发展OpenHarmony 轻量级内核不断优化和扩展能够带给开发者友好的开发体验和统一开放的生态系统能力。轻量级内核LiteOS-A重要的新特性如下
新增了丰富的内核机制
新增虚拟内存、系统调用、多核、轻量级IPCInter-Process Communication进程间通信、DACDiscretionary Access Control自主访问控制等机制丰富了内核能力为了更好的兼容软件和开发者体验新增支持多进程使得应用之间内存隔离、相互不影响提升系统的健壮性。
引入统一驱动框架HDFHardware Driver Foundation 引入统一驱动框架HDF统一驱动标准为设备厂商提供了更统一的接入方式使驱动更加容易移植力求做到一次开发多系统部署。支持1200标准POSIX接口 更加全面的支持POSIX标准接口使得应用软件易于开发和移植给应用开发者提供了更友好的开发体验。内核和硬件高解耦轻量级内核与硬件高度解耦新增单板内核代码不用修改。图4OpenHarmony LiteOS-A内核架构图 使用指导
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领域构建的轻量级物联网操作系统内核具有小体积、低功耗、高性能的特点。其代码结构简单主要包括内核最小功能集、内核抽象层、可选组件以及工程目录等。支持驱动框架HDFHardware Driver Foundation统一驱动标准为设备厂商提供了更统一的接入方式使驱动更加容易移植力求做到一次开发多系统部署。
OpenHarmony LiteOS-M内核架构包含硬件相关层以及硬件无关层如下图所示其中硬件相关层按不同编译工具链、芯片架构分类提供统一的HALHardware Abstraction Layer接口提升了硬件易适配性满足AIoT类型丰富的硬件和编译工具链的拓展其他模块属于硬件无关层其中基础内核模块提供基础能力扩展模块提供网络、文件系统等组件能力还提供错误处理、调测等能力KALKernel Abstraction Layer模块提供统一的标准接口。
图1 内核架构图 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 内核启动流程 目录
目录结构如下。
/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工程GCCgn、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/