Huawei LiteOS 概览

术语

术语名称描述
物联网顾名思义,物联网就是物物相连的互联网。
NB-IoT/LPWANB-IoT是IoT领域一个新兴的技术,支持低功耗设备在广域网的蜂窝数据连接,也被叫作低功耗广域网LPWAN,该项技术是目前华为公司最重要的物联网技术之一。
LiteOS SDKLiteOS 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 APIREST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 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操作系统定制开发的一款工具。它提供了界面化的代码编辑、编译、烧录、调试等功能。

硬件支持

架构系列
ARMCortex-M0
Cortex-M0+
Cortex-M3
Cortex-M4
Cortex-M7
Cortex-A7
Cortex-A9
Cortex-A53
ARM64Cortex-A72
RISC-VRV32
C-SKYCK802

代码

【源码链接】

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的代码目录结构说明

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

一级目录二级目录三级目录说明
archarmcortex_a_rA核架构支持
cortex_mM核架构支持
arm64arm64架构支持
cskycskyv2cskyv2架构支持
riscvrvm32riscv架构支持
buildLiteOS编译系统需要的配置及脚本
compatcmsisliteos提供的CMSIS-RTOS 1.0和2.0接口
componentsaiai(基于mindspore)算子库实现
connectivityagent_tinyagent_tiny端云互通组件,包括公共头文件、示例代码、客户端实现代码、操作系统适配层代码
lwm2mlwm2m协议实现
mqttMQTT开源协议实现
nb_iotLiteOS NB-IoT API
fsdevfsdevfs文件系统
fatfsfatfs文件系统
kifskifs文件系统
littlefslittlefs文件系统
ramfsramfs文件系统
spiffsspiffs文件系统
vfs虚拟文件系统
gui开源LittlevGL图形库
language语言相关组件,含lua
libcjsonc语言json库
log日志等级控制
media媒体相关组件,含libpng、openexif、opus、upup、
netat_deviceAT设备适配层
at_frameLiteOS AT框架API
ifconfigifconfig shell命令实现
los_iperf网络带宽测试工具
lwip/lwip_portlwip驱动及OS适配代码
lwip/lwip-2.1.2lwip协议实现
lwip/ppp_portlwip协议ppp端口支持
pcap网络抓包工具
pingping shell命令实现
salsocket通讯支持
tftp_servertftp服务
ota固件升级代码
securitymbedtls/mbedtls_portmbed TLS的OS适配代码
mbedtls/mbedtl-2.16.8mbed TLS协议实现
opensslopenssl协议
sensorhubincludesensor manager头文件
srcsensor manager的源码实现
utility解析工具,含bidireference、curl、fastlz、freetype、harfbuzz、iconv、iniparser、json-c、jsoncpp、libxml2、sqlite、thttpd、tinyxml2
demosagenttiny_lwm2mlwm2m协议 demo
agenttiny_mqttmqtt 协议demo
aiai的demo
dtls_serverdtls协议demo
fs文件系统demo
guigui的demo
ipv6_clientIpv6协议demo
kernelapi供开发者测试LiteOS内核的demo示例代码
includeAPI功能头文件存放目录
language语言相关组件的demo
lmsLMS的demo
media媒体相关组件的demo
nbiot_without_atinyNB-IoT demo
sensorhubgyro基于sensorhub传感框架定时读取MPU6050陀螺仪原始数据的demo
traceTrace的demo
utility解析工具的demo
doc此目录存放的是LiteOS的使用文档和API说明等文档
driverbaseLiteOS驱动框架
interruptLiteOS系统中断接口
timerLiteOS系统定时器接口
uartLiteOS系统串口接口
includecomponents各个模块所依赖的头文件
kernelbaseLiteOS基础内核代码,包括任务、中断、软件定时器、队列、事件、信号量、互斥锁、tick等功能
debugLiteOS内核调测代码,包括队列、信号量、互斥锁及任务调度的调测
includeLiteOS基础内核内部使用的头文件
memLiteOS中的内存管理相关代码
sched任务调度支持,包括对多核的调度支持
shellcmdLiteOS中与基础内核相关的shell命令,包括memcheck、task、systeminfo、swtmr等
extendedcppsupportC++兼容适配层底层接口
cpupCPU占用率统计接口
includeextended目录所需的头文件
lmsLMS(实时检测内存操作合法性算法)的库文件
lowpower低功耗框架相关代码
tracetrace事件跟踪,用于实时记录系统运行轨迹
includeLiteOS开源内核头文件
initLiteOS内核初始化相关代码
libhuawei_libcLiteOS自研libc库和适配的posix接口
libcLiteOS适配的musl libc库
libsec华为安全函数库
zlib开源zlib库
osdependsliteosLiteOS提供的部分OS适配接口
shellsrc实现shell命令的代码,支持基本调试功能
includeshell头文件
targetsbsp通用板级支持包
CB2201CB2201(ck802)开发板的开发工程源码包
Cloud_STM32F429IGTx_FIRE野火STM32F429(ARM Cortex M4)开发板的开发工程源码包
GD32E103C_STARTGD32E103C_START(ARM Cortex M4)开发板的开发工程源码包
GD32F303RGT6_BearPiGD32F303RGT6_BearPi(ARM Cortex M4)开发板的开发工程源码包
GD32VF103V_EVALGD32VF103V_EVAL(riscv)开发板的开发工程源码包
HiFive1_Rev1_B01HiFive1_Rev1_B01(riscv)开发板的开发工程源码包
qemu-virt-a53Coretex A53的qemu开发工程源码包
realview-pbx-a9Coretex A9的qemu开发工程源码包
STM32F072_NucleoSTM32F072_Nucleo(ARM Cortex M0)开发板的开发工程源码包
STM32F103_FIRE_Arbitrary野火STM32F103(ARM Cortex M3)霸道开发板的开发工程源码包
STM32F407_ATK_Explorer正点原子STM32F407(ARM Cortex M4)探索者开发板的开发工程源码包
STM32F769IDISCOVERYSTM32F769IDISCOVERY(ARM Cortex M7)开发板的开发工程源码包
STM32L4R9I_DiscoverySTM32L4R9IDISCOVERY(ARM Cortex M4)开发板的开发工程源码包
STM32L073_NucleoSTM32L073_Nucleo(ARM Cortex M0+)开发板的开发工程源码包
STM32L431_BearPi小熊派STM32L431(ARM Cortex M4)开发板的开发工程源码包
STM32L476_NB476深创客STM32L476(ARM Cortex M4)开发板的开发工程源码包
STM32L496_NucleoSTM32L496 NUCLEO-144(ARM Cortex M4)开发板的开发工程源码包
STM32L552_NucleoSTM32L552 Nucleo(ARM Cortex M33)开发板的开发工程源码包
toolsbuildLiteOS支持的开发板编译配置文件
menuconfigLiteOS编译所需的menuconfig脚本
MakefileLiteOS 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则更专注于微控制器软件的接口标准。

参考资料

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
华为LiteOS开发手册是一本详细介绍华为轻量级操作系统(LiteOS)开发的手册。该手册提供了全面的开发指南和技术文档,使开发者能够了解如何使用LiteOS进行嵌入式系统开发。 首先,手册介绍了LiteOS的基本概念和架构。LiteOS是一种高度精简的操作系统,专为物联网设备而设计。它具有低内存占用、高性能以及快速启动等特点,能够满足物联网设备对资源的高效利用需求。 其次,手册详细阐述了LiteOS的核心功能和开发环境配置。开发者可以从手册中学习如何在不同硬件平台上搭建LiteOS开发环境,并掌握操作系统的基本设置、任务调度、内存管理等关键功能。 此外,手册涵盖了LiteOS的丰富的开发工具和API文档。开发者可以通过手册学习如何使用华为提供的开发工具,例如LiteOS Studio和LiteOS Builder,来进行开发、调试和编译等操作。同时,手册还提供了对主要API的详细解释和示例代码,方便开发者快速上手。 最后,手册还介绍了LiteOS应用开发的一些最佳实践和经验分享。开发者可以在手册中找到关于节能优化、安全性、网络通信、应用程序设计等方面的指导和建议,以确保开发的物联网设备具备高性能、可靠性和安全性。 总的来说,华为LiteOS开发手册是一本详尽而实用的指南,能够帮助开发者快速掌握LiteOS的开发技能。无论是初学者还是有经验的开发者,都可以从手册中获得有关LiteOS开发的全面指导和帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TrustZone_Hcoco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值