Huawei LiteOS 概览

简介: Huawei LiteOS 概览

术语

术语名称 描述
物联网 顾名思义,物联网就是物物相连的互联网。
NB-IoT/LPWA NB-IoT是IoT领域一个新兴的技术,支持低功耗设备在广域网的蜂窝数据连接,也被叫作低功耗广域网LPWAN,该项技术是目前华为公司最重要的物联网技术之一。
LiteOS SDK LiteOS SDK是Huawei LiteOS软件开发工具包(Software Development Kit),包括端云互通组件、FOTA、JS引擎、传感框架等内容。
南向设备 用于采集数据的嵌入式设备,比如STM32开发板,或者温湿度采集的传感器等。
北向应用 用于查看IoT云平台上南向设备上报数据或者给南向设备下发控制命令的手机APP或者PC端的应用程序。
设备profile 用于描述南向设备具有的能力以及上报的数据的格式的一组json格式文件,这些文件需要上传到IoT云平台上。
编解码插件 用于将南向设备上报的私有数据解析成设备profile描述的并且IoT云平台能够识别和存储的数据,以及将北向应用下发的命令编码成南向设备能够识别的数据格式的一组函数组成的jar文件。简而言之就是南向设备和云平台之间的一个数据转换的程序。
AT指令 AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。本文通过AT指令操作WIFI或者GSM模组。
端云互通组件 端云互通组件是华为物联网解决方案中,资源受限终端对接到 IoT云平台的重要组件。
华为云IoT 华为云IoT是面向运营商和企业/行业领域的统一开放云平台,支持SIM和非SIM场景的各种联接和联接管理,是华为公司面向IoT解决方案的关键平台部件。主要分为连接管理平台,设备管理平台和应用使能平台等多个部分,负责联通端侧设备与北向应用的核心产品。可以支撑千万级的海量物联网连接。
RESTful Web API REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。目前华为云IoT北向应用提供的就是这样一套规范性API。
LwM2M 轻量化机器对机器协议
CoAP 轻量级受限应用层协议
MQTT 消息队列遥测传输
DTLS 数据传输安全协议
FOTA 固件远程升级
UART 通用异步收发器(异步串行通信口)

简介

Huawei LiteOS是华为面向IoT领域,构建的轻量级物联网操作系统,可广泛应用于智能家居、个人穿戴、车联网、城市公共服务、制造业等领域。

Huawei LiteOS开源项目目前支持 ARM64、ARM Cortex-A、ARM Cortex-M0,Cortex-M3,Cortex-M4,Cortex-M7 等芯片架构。

优势

  • 高实时性,高稳定性。
  • 超小内核,基础内核体积可以裁剪至不到10K。
  • 低功耗,配套芯片整体功耗低至uA级。
  • 支持功能静态裁剪。

License

Huawei LiteOS遵循BSD-3开源许可协议。

架构框图

Huawei LiteOS支持多种芯片架构,如Cortex-M series、Cortex-R series、Cortex-A series等,可以快速移植到多种硬件平台。Huawei LiteOS也支持 UP(单核)与 SMP(多核)模式,即支持在单核或者多核的环境上运行。

除基础内核外,Huawei LiteOS还包含了丰富的组件,可帮助用户快速构建物联网相关领域的应用场景及实例,主要包含以下组成部分:

  • 基础内核:包括不可裁剪的极小内核和可裁剪的其他模块。极小内核包含任务管理、内存管理、中断管理、异常管理和系统时钟。可裁剪的模块包括信号量、互斥锁、队列管理、事件管理、软件定时器等。
  • 内核增强:在内核基础功能之上,进一步提供增强功能,包括C++支持、调测组件等。调测组件提供了强大的问题定位及调测能力,包括shell命令、Trace事件跟踪、获取CPU占用率、LMS等。
  • 文件系统:提供一套轻量级的文件系统接口以支持文件系统的基本功能,包括vfs、ramfs、fatfs等。
  • 系统库接口:提供一系列系统库接口以提升操作系统的可移植性及兼容性,包括Libc/Libm/POSIX以及CMSIS适配层接口。
  • 网络协议栈:提供丰富的网络协议栈以支持多种网络功能,包括CoAP/LwM2M、MQTT等。
  • 业务组件:构建于上述组件之上的一系列业务组件或框架,以支持更丰富的用户场景,包括OTA、GUI、AI、传感框架等。
  • IDE(Huawei LiteOS Studio):基于LiteOS操作系统定制开发的一款工具。它提供了界面化的代码编辑、编译、烧录、调试等功能。

硬件支持

架构 系列
ARM Cortex-M0
Cortex-M0+
Cortex-M3
Cortex-M4
Cortex-M7
Cortex-A7
Cortex-A9
Cortex-A53
ARM64 Cortex-A72
RISC-V RV32
C-SKY CK802

代码

【源码链接】

LiteOS代码入口

INT32 main(VOID)
{
    BoardConfig();
    HardwareInit();
    PRINT_RELEASE("\n********Hello Huawei LiteOS********\n"
                  "\nLiteOS Kernel Version : %s\n"
                  "build data : %s %s\n\n"
                  "**********************************\n",
                  HW_LITEOS_KERNEL_VERSION_STRING, __DATE__, __TIME__);
    UINT32 ret = OsMain();
    if (ret != LOS_OK) {
        return LOS_NOK;
    }
    OsStart();
    return 0;
}

首先进行内存结束地址配置BoardConfig(),硬件初始化HardwareInit(),然后打印Huawei LiteOS的版本信息;

接着执行OsMain()初始化Huawei LiteOS内核及例程,在OsMain()函数中会创建用户任务,其任务处理函数为app_init();

最后调用OsStart()开始任务调度,Huawei LiteOS开始正常工作。

LiteOS的代码目录结构说明

关于代码树中各个目录存放的源代码的相关内容简介如下:

一级目录 二级目录 三级目录 说明
arch arm cortex_a_r A核架构支持
cortex_m M核架构支持
arm64 arm64架构支持
csky cskyv2 cskyv2架构支持
riscv rvm32 riscv架构支持
build LiteOS编译系统需要的配置及脚本
compat cmsis liteos提供的CMSIS-RTOS 1.0和2.0接口
components ai ai(基于mindspore)算子库实现
connectivity agent_tiny agent_tiny端云互通组件,包括公共头文件、示例代码、客户端实现代码、操作系统适配层代码
lwm2m lwm2m协议实现
mqtt MQTT开源协议实现
nb_iot LiteOS NB-IoT API
fs devfs devfs文件系统
fatfs fatfs文件系统
kifs kifs文件系统
littlefs littlefs文件系统
ramfs ramfs文件系统
spiffs spiffs文件系统
vfs 虚拟文件系统
gui 开源LittlevGL图形库
language 语言相关组件,含lua
lib cjson c语言json库
log 日志等级控制
media 媒体相关组件,含libpng、openexif、opus、upup、
net at_device AT设备适配层
at_frame LiteOS AT框架API
ifconfig ifconfig shell命令实现
los_iperf 网络带宽测试工具
lwip/lwip_port lwip驱动及OS适配代码
lwip/lwip-2.1.2 lwip协议实现
lwip/ppp_port lwip协议ppp端口支持
pcap 网络抓包工具
ping ping shell命令实现
sal socket通讯支持
tftp_server tftp服务
ota 固件升级代码
security mbedtls/mbedtls_port mbed TLS的OS适配代码
mbedtls/mbedtl-2.16.8 mbed TLS协议实现
openssl openssl协议
sensorhub include sensor manager头文件
src sensor manager的源码实现
utility 解析工具,含bidireference、curl、fastlz、freetype、harfbuzz、iconv、iniparser、json-c、jsoncpp、libxml2、sqlite、thttpd、tinyxml2
demos agenttiny_lwm2m lwm2m协议 demo
agenttiny_mqtt mqtt 协议demo
ai ai的demo
dtls_server dtls协议demo
fs 文件系统demo
gui gui的demo
ipv6_client Ipv6协议demo
kernel api 供开发者测试LiteOS内核的demo示例代码
include API功能头文件存放目录
language 语言相关组件的demo
lms LMS的demo
media 媒体相关组件的demo
nbiot_without_atiny NB-IoT demo
sensorhub gyro 基于sensorhub传感框架定时读取MPU6050陀螺仪原始数据的demo
trace Trace的demo
utility 解析工具的demo
doc 此目录存放的是LiteOS的使用文档和API说明等文档
driver base LiteOS驱动框架
interrupt LiteOS系统中断接口
timer LiteOS系统定时器接口
uart LiteOS系统串口接口
include components各个模块所依赖的头文件
kernel base LiteOS基础内核代码,包括任务、中断、软件定时器、队列、事件、信号量、互斥锁、tick等功能
debug LiteOS内核调测代码,包括队列、信号量、互斥锁及任务调度的调测
include LiteOS基础内核内部使用的头文件
mem LiteOS中的内存管理相关代码
sched 任务调度支持,包括对多核的调度支持
shellcmd LiteOS中与基础内核相关的shell命令,包括memcheck、task、systeminfo、swtmr等
extended cppsupport C++兼容适配层底层接口
cpup CPU占用率统计接口
include extended目录所需的头文件
lms LMS(实时检测内存操作合法性算法)的库文件
lowpower 低功耗框架相关代码
trace trace事件跟踪,用于实时记录系统运行轨迹
include LiteOS开源内核头文件
init LiteOS内核初始化相关代码
lib huawei_libc LiteOS自研libc库和适配的posix接口
libc LiteOS适配的musl libc库
libsec 华为安全函数库
zlib 开源zlib库
osdepends liteos LiteOS提供的部分OS适配接口
shell src 实现shell命令的代码,支持基本调试功能
include shell头文件
targets bsp 通用板级支持包
CB2201 CB2201(ck802)开发板的开发工程源码包
Cloud_STM32F429IGTx_FIRE 野火STM32F429(ARM Cortex M4)开发板的开发工程源码包
GD32E103C_START GD32E103C_START(ARM Cortex M4)开发板的开发工程源码包
GD32F303RGT6_BearPi GD32F303RGT6_BearPi(ARM Cortex M4)开发板的开发工程源码包
GD32VF103V_EVAL GD32VF103V_EVAL(riscv)开发板的开发工程源码包
HiFive1_Rev1_B01 HiFive1_Rev1_B01(riscv)开发板的开发工程源码包
qemu-virt-a53 Coretex A53的qemu开发工程源码包
realview-pbx-a9 Coretex A9的qemu开发工程源码包
STM32F072_Nucleo STM32F072_Nucleo(ARM Cortex M0)开发板的开发工程源码包
STM32F103_FIRE_Arbitrary 野火STM32F103(ARM Cortex M3)霸道开发板的开发工程源码包
STM32F407_ATK_Explorer 正点原子STM32F407(ARM Cortex M4)探索者开发板的开发工程源码包
STM32F769IDISCOVERY STM32F769IDISCOVERY(ARM Cortex M7)开发板的开发工程源码包
STM32L4R9I_Discovery STM32L4R9IDISCOVERY(ARM Cortex M4)开发板的开发工程源码包
STM32L073_Nucleo STM32L073_Nucleo(ARM Cortex M0+)开发板的开发工程源码包
STM32L431_BearPi 小熊派STM32L431(ARM Cortex M4)开发板的开发工程源码包
STM32L476_NB476 深创客STM32L476(ARM Cortex M4)开发板的开发工程源码包
STM32L496_Nucleo STM32L496 NUCLEO-144(ARM Cortex M4)开发板的开发工程源码包
STM32L552_Nucleo STM32L552 Nucleo(ARM Cortex M33)开发板的开发工程源码包
tools build LiteOS支持的开发板编译配置文件
menuconfig LiteOS编译所需的menuconfig脚本
Makefile LiteOS Makefile
.config 开发板的配置文件,如果用户不重新选择开发板,默认为野火挑战者STM32F429开发板的配置文件

内核

内核架构

Huawei LiteOS基础内核包括不可裁剪的极小内核和可裁剪的其他模块。

极小内核包含任务管理、内存管理、中断管理、异常管理和系统时钟。

可裁剪的模块包括信号量、互斥锁、队列管理、事件管理、软件定时器等。

Huawei LiteOS支持 UP(单核)与 SMP(多核)模式,即支持在单核或者多核的环境上运行。

各模块简介

  • 任务管理

提供任务的创建、删除、延迟、挂起、恢复等功能,以及锁定和解锁任务调度。支持任务按优先级高低的抢占调度以及同优先级时间片轮转调度。

  • 内存管理

提供静态内存和动态内存两种算法,支持内存申请、释放。目前支持的内存管理算法有固定大小的BOX算法、动态申请的bestfit算法和bestfit_little算法。

提供内存统计、内存越界检测功能。

  • 硬件相关

提供中断管理、异常管理、系统时钟等功能。

中断管理:提供中断的创建、删除、使能、禁止、请求位的清除功能。

异常管理:系统运行过程中发生异常后,跳转到异常处理模块,打印当前发生异常的函数调用栈信息,或者保存当前系统状态。

Tick:Tick是操作系统调度的基本时间单位,对应的时长由每秒Tick数决定,由用户配置。

  • IPC通信

提供消息队列、事件、信号量和互斥锁功能。

消息队列:支持消息队列的创建、删除、发送和接收功能。

事件:支持读事件和写事件功能。

信号量:支持信号量的创建、删除、申请和释放功能。

互斥锁:支持互斥锁的创建、删除、申请和释放功能。

  • 软件定时器

软件定时器提供了定时器的创建、删除、启动、停止功能。

  • 自旋锁

多核场景下,支持自旋锁的初始化、申请、释放功能。

  • 低功耗

Run-stop:即休眠唤醒,是Huawei LiteOS提供的保存系统现场镜像以及从系统现场镜像中恢复运行的机制。

Tickless:Tickless机制通过计算下一次有意义的时钟中断的时间,来减少不必要的时钟中断,从而降低系统功耗。打开Tickless功能后,系统会在CPU空闲时启动Tickless机制。

  • 维测

CPU占用率:可以获取系统或者指定任务的CPU占用率。

Trace事件跟踪:实时获取事件发生的上下文,并写入缓冲区。支持自定义缓冲区,跟踪指定模块的事件,开启/停止Trace,清除/输出trace缓冲区数据等。

LMS:实时检测内存操作合法性,LMS能够

检测的内存问题包括缓冲区溢出(buffer overflow),释放后使用(use after free),多重释放(double free)和释放野指针(wild pointer)。

Shell:Huawei LiteOS Shell使用串口接收用户输入的命令,通过命令的方式调用、执行相应的应用程序。Huawei LiteOS Shell支持常用的基本调试功能,同时支持用户添加自定义命令。

  • C++支持

Huawei LiteOS支持部分STL特性、异常和RTTI特性,其他特性由编译器支持。

内核启动流程

  • Huawei LiteOS提供一套自有 OS接口,同时也支持POSIX和CMSIS接口。请勿混用这些接口。混用接口可能导致不可预知的错误,例如:用POSIX接口申请信号量,但用Huawei LiteOS接口释放信号量。
  • 开发驱动程序只能用Huawei LiteOS的接口,上层APP建议用POSIX接口。

POSIX(Portable Operating System Interface of UNIX)是一种用于操作系统的接口标准,它定义了操作系统应该为应用程序提供的接口。POSIX标准的目标是实现源代码级别的软件可移植性,即为一个POSIX兼容的操作系统编写的程序,应能在任何其他的POSIX操作系统上编译和执行,即使这些操作系统来自不同的厂商。

CMSIS(Cortex Microcontroller Software Interface Standard)则是ARM与各个微控制器供应商、工具供应商和软件解决方案提供商共同开发的Cortex微控制器软件接口标准。它的目标是让微控制器和软件供应商能够使用一致的软件结构来开发Cortex微控制器的软件。

POSIX和CMSIS接口都是为了实现软件的可移植性和一致性,但POSIX更关注于操作系统级别的接口标准,而CMSIS则更专注于微控制器软件的接口标准。

参考资料

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
3月前
|
传感器 物联网 网络架构
ENS、IoT设备、X86、ARM
ENS(Enterprise Name Service)是企业名称服务,是一种为物联网设备提供命名和寻址服务的技术。ENS通过为物联网设备分配唯一的名称和地址,使得物联网设备可以被网络中的其他设备和服务所识别和访问。 IoT设备(Internet of Things device)是连接到互联网的物理设备,可以收集和共享数据,用于监测、控制和优化各种业务流程和操作。IoT设备包括各种传感器、执行器、网关和路由器等。
70 2
|
11月前
|
算法 物联网 AliOS-Things
AliOS Things IOT开发板初体验(基于STM32L496VGTx)
AliOS Things IOT开发板初体验(基于STM32L496VGTx)
473 0
|
开发者 SoC
Wujian SoC 平台_IP 集成|学习笔记
快速学习 Wujian SoC 平台_IP 集成
153 0
Wujian SoC 平台_IP 集成|学习笔记
|
AliOS-Things 物联网 开发者
Wifi- nodeMCU 之配置编译下载 alios-things 到 esp8266 实现天猫精灵语音控制 | 学习笔记
快速学习 Wifi- nodeMCU 之配置编译下载 alios-things 到 esp8266 实现天猫精灵语音控制
244 0
Wifi- nodeMCU 之配置编译下载 alios-things 到 esp8266 实现天猫精灵语音控制 | 学习笔记
|
存储 物联网 API
AliOS Things 网络篇之 Wi-Fi 配网|学习笔记
快速学习 AliOS Things 网络篇之 Wi-Fi 配网。
519 0
AliOS Things 网络篇之 Wi-Fi 配网|学习笔记
|
存储 消息中间件 传感器
物联网平台(Link Platform)介绍|学习笔记
快速学习物联网平台(Link Platform)介绍
592 0
物联网平台(Link Platform)介绍|学习笔记
|
人工智能 物联网 芯片
这个土味视频告诉你, AliOS Things 蓝牙Mesh配网有多快!
若问如今最热门的IoT连接技术是啥? 那一定是蓝牙Mesh ! AliOS Things蓝牙Mesh 全新升级后配网速度能有多快? 让这个土味视频告诉你
408 0
这个土味视频告诉你, AliOS Things 蓝牙Mesh配网有多快!
|
机器学习/深度学习 存储 移动开发
AliOS Things 3.3.0 Wi-Fi连网的那些事
接入Wi-Fi网络,是大部分IoT设备联网的第一步。接入Wi-Fi一般需要经历配网和连网两个阶段。
AliOS Things 3.3.0 Wi-Fi连网的那些事
|
算法 物联网 开发工具
AliOS Things 二级bootloader方案介绍
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行的一段代码。
AliOS Things 二级bootloader方案介绍
|
编解码 物联网 Linux
AliOS Things 3.3.0 : A2SA组件介绍
A2SA是Advanced AliOS Things Sound Architucture的缩写,是AliOS Things音频系统服务框架,包括音频驱动层、音频服务接口层以及音频插件管理等。
AliOS Things 3.3.0 : A2SA组件介绍