鸿蒙硬件开发:HarmonyOS下的LiteOS-M

打印 上一主题 下一主题

主题 619|帖子 619|积分 1857

前言

先来看看HarmonyOS的技术架构:

HarmonyOS当前分为以下几种系统类型:轻量系统 、小型系统、标准系统。针对不同量级的系统,分别使用了不同形态的内核,在轻量系统上,可以选择LiteOS-M;在小型系统和标准系统上,可以选用LiteOS-A;在标准系统上,可以选用Linux。
总的来说,在轻小型系统中,HarmonyOS所使用的内核为LiteOS,在标准系统中使用Linux。
而目前Huawei LiteOS支持多种芯片架构,如Cortex-M series、Cortex-R series、Cortex-A series等。LiteOS有两个应用方向,分别是LiteOS-M和LiteOS-A。
LiteOS-M适用于轻量级的芯片架构,面向的MCU一般是百K级内存,例如cortex-m、riscv32;而LiteOS-A则适用于小型的芯片架构,面向设备一般是M级内存,例如cortex-a。我使用的hi3861v100,芯片架构为riscv32,所适配的就是LiteOS-M内核。
这是官方文档中的一段描述:

所以接下来要学习的暂时是LiteOS-M。详见HarmonyOS/文档/指南/入门
整体框架

首先看看LiteOS-M的内核架构图。可以看到应用于轻量级内核的LiteOS-M整体的架构非常简单,底层支持的内核目前只有Cortex-M和RISC-V系列,在此之上抽象出统一的硬件架构。以该硬件架构为基础,加入OS内核和拓展模块,再继续将这两部分抽象出来,适配到CMSIS和POSIX两个标准上,这样在应用层所编写的程序,就可以具有良好的移植性和可拓展性。

那么这个架构在程序中是如何体现的?上一篇鸿蒙硬件开发:DevEco Device Tool V2.1正式版以及windows平台编译链的更新中,已经下载了HarmonyOS的源码并成功运行了一个程序。根据这个工程的目录结构和内容来分析一下。

可以看到有一个kernel文件夹,其中存放着的就是LiteOS的两个分支。

liteos_m分支的目录结构如下:

在README中可以看到对各个文件夹功能的描述。
   ├── components # 可选组件
│ ├── cppsupport # C++支持
│ └── cpup # CPUP功能
├── kal # 内核抽象层
│ ├── cmsis # cmsis标准接口支持
│ └── posix # posix标准接口支持
├── kernel # 内核最小功能集支持
│ ├── arch # 内核指令架构层代码
│ │ ├── arm # arm32架构的代码
│ │ └── include # 对外接口存放目录
│ ├── include # 对外接口存放目录
│ └── src # 内核最小功能集源码
├── targets # 板级工程目录
├── utils # 通用公共目录
  那么根据上方的LiteOS-M架构图,一层一层分析。
硬件架构抽象层

姑且这么叫。在官网可以看到对这部分的定义。可以看到现有的工程已经对特定的架构进行了适配支持。

那么在文件夹中查看,可以看到 /kernel/liteos_m/kernel/arch 目录下对risc-v和arm两种架构的实现。

risc-v中实现了riscv32架构。

而arm中实现了四种cortex架构。

可以看到这些架构都按照上图的命名规则进行了实现。那么接下来的OS内核的实现就可以通过这个统一的接口来对底层的硬件内核进行操作,从而在OS层实现了对硬件架构的屏蔽作用。

OS层


还是姑且这么叫吧,我随便起的
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表