OpenHarmony内核子系统

ops/2025/2/21 4:27:37/

OpenHarmony内核子系统

  • 简介

  • LiteOS

  • Linux

  • 目录

  • 约束

  • 使用

    • LiteOS使用说明
    • linux使用说明
  • 构建说明

  • 相关仓

简介

OpenHarmony针对不同量级的系统,分别使用了不同形态的内核,分别为LiteOS和Linux。在轻量系统、小型系统可以选用LiteOS;在小型系统和标准系统上可以选用Linux。

系统级别

轻量系统

小型系统

标准系统

LiteOS

×

Linux

×

LiteOS

OpenHarmony LiteOS内核是面向IoT领域的实时操作系统内核,它同时具备RTOS轻快和Linux易用的特点。

OpenHarmony LiteOS内核主要包括进程和线程调度、内存管理、IPC机制、timer管理等内核基本功能。

OpenHarmony LiteOS内核的源代码分为 kernel_liteos_a 和 kernel_liteos_m 这2个代码仓库,其中kernel_liteos_a主要针对小型系统(small system)和标准系统(standard system),而kernel_liteos_m则主要针对轻量系统(mini system),下面主要针对kernel_liteos_a代码仓库进行介绍。图1为OpenHarmony LiteOS-A内核架构图:

图 1 OpenHarmony LiteOS-A内核架构图

Linux

OpenHarmony的Linux内核基于开源Linux内核LTS 4.19.y / 5.10.y / 6.6.y 分支演进,在此基线基础上,回合CVE补丁及OpenHarmony特性,作为OpenHarmony Common Kernel基线。针对不同的芯片,各厂商合入对应的板级驱动补丁,完成对OpenHarmony的基线适配。

Linux社区LTS 4.19.y分支信息请查看kernel官网;

Linux社区LTS 5.10.y分支信息请查看kernel官网;

Linux社区LTS 6.6.y分支信息请查看kernel官网。

内核的Patch组成模块,在编译构建流程中,针对具体芯片平台,合入对应的架构驱动代码,进行编译对应的内核镜像。所有补丁来源均遵守GPL-2.0协议。

目录

kernel/
├── linux
│   ├── common_modules                     # linux内核通用模块仓
│   ├── linux-4.19                         # OpenHarmony linux-4.19 Common kernel
│   ├── linux-5.10                         # OpenHarmony linux-5.10 Common kernel
│   ├── linux-6.6                          # OpenHarmony linux-6.6  Common kernel
│   ├── build
│   │   ├── BUILD.gn                       # 编译框架GN文件
│   │   ├── kernel.mk                      # 内核编译文件
│   │   └── ohos.build                     # 内核编译组件文件
│   ├── patches
│   │   ├── linux-4.19                     # linux-4.19 相关patch
│   │   │   ├── common_patch
│   │   │   │   └── hdf.patch              # linux-4.19 HDF patches
│   │   │   └── hispark_taurus_patch
│   │   │       └── hispark_taurus.patch   # linux-4.19 hispark_taurus SOC patches
│   │   ├── linux-5.10
│   │   │   ├── common_patch
│   │   │   │   └── hdf.patch              # linux-5.10 HDF patches
│   │   │   └── hispark_taurus_patch
│   │   │   │   └── hispark_taurus.patch   # linux-5.10 hispark_taurus SOC patches
│   │   │   └── rk3568_patch
│   │   │       ├── kernel.patch           # linux-5.10 rk3568 SOC patches
│   │   │       └── hdf.patch              # linux-5.10 rk3568 定制 HDF patches
│   │   └── linux-6.6
│   │       └── rk3568_patch
│   │           ├── kernel.patch           # linux-6.6  rk3568 SOC patches
│   │           └── hdf.patch              # linux-6.6  rk3568 定制 HDF patches
│   └── config
│       ├── linux-4.19
│       │   └── arch
│       │       └── arm
│       │          └── configs
│       │              ├── hispark_taurus_small_defconfig        # 厂商Hisilicon对应的开源开发板hispark_taurus小型系统的defconfig
│       │              ├── hispark_taurus_standard_defconfig     # 厂商Hisilicon对应的开源开发板hispark_taurus标准系统的defconfig
│       │              ├── small_common_defconfig                # 小型系统的内核的common defconfig
│       │              └── standard_common_defconfig             # 标准系统的内核的common defconfig
│       └── linux-5.10 or linux-6.6
│           ├── base_defconfig                                # 内核必选或安全红线模块基础配置
│           ├── type                                          # 形态配置目录
│           │   ├── small_defconfig                           # 小型系统常用配置文件
│           │   └── standard_defconfig                        # 标准系统常用配置文件
│           ├── form                                          # 版本配置目录
│           │   └── debug_defconfig                           # 调试版本配置文件(示例目前无配置需求)
│           ├── rk3568                                        # 厂商平台配置目录
│           │   └── arch
│           │       └── arm64_defconfig                       # 芯片单板64位版本相关配置文件
│           └── product                                       # 相关产品类型配置目录
│               └── phone_defconfig                           # 手机类型产品相关配置文件
└── liteos_a               # liteos内核基线代码├── apps               # 用户态的init和shell应用程序├── arch               # 体系架构的目录,如arm等│   └── arm            # arm架构代码├── bsd                # freebsd相关的驱动和适配层模块代码引入,例如USB等├── compat             # 内核接口兼容性目录│   └── posix          # posix相关接口├── drivers            # 内核驱动│   └── char           # 字符设备│       ├── mem        # 访问物理IO设备驱动│       ├── quickstart # 系统快速启动接口目录│       ├── random     # 随机数设备驱动│       └── video      # framebuffer驱动框架├── fs                 # 文件系统模块,主要来源于NuttX开源项目│   ├── fat            # fat文件系统│   ├── jffs2          # jffs2文件系统│   ├── include        # 对外暴露头文件存放目录│   ├── nfs            # nfs文件系统│   ├── proc           # proc文件系统│   ├── ramfs          # ramfs文件系统│   └── vfs            # vfs层├── kernel             # 进程、内存、IPC等模块│   ├── base           # 基础内核,包括调度、内存等模块│   ├── common         # 内核通用组件│   ├── extended       # 扩展内核,包括动态加载、vdso、liteipc等模块│   ├── include        # 对外暴露头文件存放目录│   └── user           # 加载init进程├── lib                # 内核的lib库├── net                # 网络模块,主要来源于lwip开源项目├── platform           # 支持不同的芯片平台代码,如hispark_taurus等│   ├── hw             # 时钟与中断相关逻辑代码│   ├── include        # 对外暴露头文件存放目录│   └── uart           # 串口相关逻辑代码├── platform           # 支持不同的芯片平台代码,如hispark_taurus等├── security           # 安全特性相关的代码,包括进程权限管理和虚拟id映射管理├── syscall            # 系统调用└── tools              # 构建工具及相关配置和代码

约束

LiteOS:

Hi3518EV300默认使用jffs2文件系统,hispark_taurus默认使用FAT文件系统。若要使用其他文件系统,需要新增适配。

使用

LiteOS使用说明

参见LiteOS-A内核README和LiteOS-M内核README的“使用说明”章节。

linux使用说明

  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. 合入芯片平台驱动补丁

    以hispark_taurus为例:

    在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仓对应的路径文件里,即可生效。

构建说明

以hispark_taurus开源开发板+ubuntu x86主机开发环境为例

使用工程的全量编译命令,编译生成uImage内核镜像

./build.sh --product-name rk3568					# 编译rk3568镜像--gn-args linux_kernel_version="linux-6.6"		# 编译指定内核版本

相关仓

内核子系统

LiteOS:

drivers_liteos

kernel_liteos_a

kernel_liteos_m

device_qemu

Linux:

kernel_linux_patches

kernel_linux_config

kernel_linux_build

kernel_linux_5.10

kernel_linux_6.6


http://www.ppmy.cn/ops/159678.html

相关文章

Spring Boot 如何实现自动配置?

欢迎并且感谢大家指出我的问题,由于本人水平有限,有些内容写的不是很全面,只是把比较实用的东西给写下来,如果有写的不对的地方,还希望各路大牛多多指教!谢谢大家!🥰 大家如果对Java…

如何快速在项目中集成AI功能:AI信箱工具使用

AI的使用目前已经非常普遍了,那么作为程序员的我们,改如何在自己的项目中集成AI相关的功能呢? 1. 获取apikey和baseurl 想要完成一次AI的api调用,我们必须要在官网中获取身份认证信息apikey和请求的url,这里更推荐阿…

MATLAB中regexpi函数用法

目录 语法 说明 示例 模式匹配 区分大小写的匹配 regexpi函数的功能是匹配正则表达式(不区分大小写)。 语法 startIndex regexpi(str,expression) [startIndex,endIndex] regexpi(str,expression) out regexpi(str,expression,outkey) [out1,.…

Java零基础入门笔记:(4)方法

前言 本笔记是学习狂神的java教程,建议配合视频,学习体验更佳。 【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili 第1-2章:Java零基础入门笔记:(1-2)入门(简介、基础知识)-CSDN博客 第3章…

Machine Learning:Optimization

文章目录 局部最小值与鞍点 (Local Minimum & Saddle Point)临界点及其种类判断临界值种类 批量与动量(Batch & Momentum)批量大小对梯度下降的影响动量法 自适应学习率AdaGradRMSPropAdam 学习率调度优化总结 局部最小值与鞍点 (Local Minimum & Saddle Point) 我…

DeepSeek24小时写作机器人,持续创作高质量文案

内容创作已成为企业、自媒体和创作者的核心竞争力。面对海量的内容需求,人工创作效率低、成本高、质量参差不齐等问题日益凸显。如何在有限时间内产出高质量内容?DeepSeek写作机器人,一款24小时持续创作的智能工具,为企业和个人提…

Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)

1.软硬链接 1.1硬链接 硬链接(Hard Link)是Linux系统中的一种文件链接方式,它允许多个文件名指向同一个inode(索引节点),从而实现多个文件名指向同一个物理文件数据块。 硬链接与原始文件之间没有任何区…

XSS盲打:当攻击者“盲狙”管理员

XSS盲打:当攻击者“盲狙”管理员 上集回顾 ​ 在之前的章节中,我们解锁了XSS漏洞的高阶玩法:偷Cookie。今天,我们将探索XSS的另一种攻击场景——XSS盲打。这种攻击方式就像“盲狙”一样,攻击者看不到前端的反馈&…