惊雷无声 发表于 2022-6-26 09:43:14

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

前言

先来看看HarmonyOS的技术架构:
https://img-blog.csdnimg.cn/116f547314924aaf8f9b481b3e07f29d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5om25oiR6LW35p2l5oiR6L-Y5pyJ5aS05Y-R,size_20,color_FFFFFF,t_70,g_se,x_16
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内核。
这是官方文档中的一段描述:
https://img-blog.csdnimg.cn/02f9a51db18849e2b87fa93cc86e5f5a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5om25oiR6LW35p2l5oiR6L-Y5pyJ5aS05Y-R,size_20,color_FFFFFF,t_70,g_se,x_16
所以接下来要学习的暂时是LiteOS-M。详见HarmonyOS/文档/指南/入门。
整体框架

首先看看LiteOS-M的内核架构图。可以看到应用于轻量级内核的LiteOS-M整体的架构非常简单,底层支持的内核目前只有Cortex-M和RISC-V系列,在此之上抽象出统一的硬件架构。以该硬件架构为基础,加入OS内核和拓展模块,再继续将这两部分抽象出来,适配到CMSIS和POSIX两个标准上,这样在应用层所编写的程序,就可以具有良好的移植性和可拓展性。
https://img-blog.csdnimg.cn/c72eec8de49c40f98b70a4c295ce98ac.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5om25oiR6LW35p2l5oiR6L-Y5pyJ5aS05Y-R,size_13,color_FFFFFF,t_70,g_se,x_16
那么这个架构在程序中是如何体现的?上一篇鸿蒙硬件开发:DevEco Device Tool V2.1正式版以及windows平台编译链的更新中,已经下载了HarmonyOS的源码并成功运行了一个程序。根据这个工程的目录结构和内容来分析一下。
https://img-blog.csdnimg.cn/568d9eec168a40fd9f75f14eee8d18b5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5om25oiR6LW35p2l5oiR6L-Y5pyJ5aS05Y-R,size_12,color_FFFFFF,t_70,g_se,x_16
可以看到有一个kernel文件夹,其中存放着的就是LiteOS的两个分支。
https://img-blog.csdnimg.cn/b82069ebe8154cab97ccb64c753811dd.png
liteos_m分支的目录结构如下:
https://img-blog.csdnimg.cn/86c657419af7438f915493d3df825a03.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5om25oiR6LW35p2l5oiR6L-Y5pyJ5aS05Y-R,size_12,color_FFFFFF,t_70,g_se,x_16
在README中可以看到对各个文件夹功能的描述。
   ├── components # 可选组件
│ ├── cppsupport # C++支持
│ └── cpup # CPUP功能
├── kal # 内核抽象层
│ ├── cmsis # cmsis标准接口支持
│ └── posix # posix标准接口支持
├── kernel # 内核最小功能集支持
│ ├── arch # 内核指令架构层代码
│ │ ├── arm # arm32架构的代码
│ │ └── include # 对外接口存放目录
│ ├── include # 对外接口存放目录
│ └── src # 内核最小功能集源码
├── targets # 板级工程目录
├── utils # 通用公共目录
那么根据上方的LiteOS-M架构图,一层一层分析。
硬件架构抽象层

姑且这么叫。在官网可以看到对这部分的定义。可以看到现有的工程已经对特定的架构进行了适配支持。
https://img-blog.csdnimg.cn/b62c5ec656854b129851890b86f5f976.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5om25oiR6LW35p2l5oiR6L-Y5pyJ5aS05Y-R,size_18,color_FFFFFF,t_70,g_se,x_16
那么在文件夹中查看,可以看到 /kernel/liteos_m/kernel/arch 目录下对risc-v和arm两种架构的实现。
https://img-blog.csdnimg.cn/6184f1da0f814de2884b1fe455b1e56e.png
risc-v中实现了riscv32架构。
https://img-blog.csdnimg.cn/e6f71b0b1e1748ca8f073f1c5a63855e.png
而arm中实现了四种cortex架构。
https://img-blog.csdnimg.cn/7526cee7467746449cdf4b62af9aeaae.png
可以看到这些架构都按照上图的命名规则进行了实现。那么接下来的OS内核的实现就可以通过这个统一的接口来对底层的硬件内核进行操作,从而在OS层实现了对硬件架构的屏蔽作用。
https://img-blog.csdnimg.cn/4ca438a13be94158aacd233aac9ab3bb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5om25oiR6LW35p2l5oiR6L-Y5pyJ5aS05Y-R,size_12,color_FFFFFF,t_70,g_se,x_16
OS层


还是姑且这么叫吧,我随便起的
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 鸿蒙硬件开发:HarmonyOS下的LiteOS-M