AliOS Things物联网操作系统

  19年8月29日,当飓风Dorian将袭击美国东海岸时,Elon Musk宣布远程通过网络,解除飓风可能经过区域用户的Tesla低配版车型的电池容量限制,使单次充电能行驶更长的里程。这是物联网领域的一个用例,这两年随着计算能力和网络连接成本越来越低,越来越多的设备具备接入网络的能力,使得物联网的发展在迅速加快。

  阻碍物联网发展的几个因素还包括成本,设备软硬件差异大和协议不统一。随着设备/服务提供商和消费者都越来越认可智能化提供的价值,产业规模在迅速扩大,推动了技术发展,规模效应也进一步降低了成本。硬件上芯片厂商通过SoC的方式集成更多周边器件,软件上通过平台对设备差异进行屏蔽,结成标准联盟等都促进了设备的互联互通。

  另外,算力在边缘端设备的增强,让过去广泛使用单片机的产品开始使用微处理器,微处理器上运行操作系统,让设备可以集成复杂的功能,网络协议和算法。阿里巴巴,腾讯都相继推出了自己的物联网操作系统,操作系统是智能化改造的平台和基础。今天就聊下阿里巴巴的物联网操作系统AliOS Things

  衡量物联网嵌入式操作系统的重要指标包括:

  1.轻量级:编译出来的固件(Firmware)小,小的固件意味着存储所需Flash空间小,做OTA升级时需要传输的数据少(更快的升级速度,良好的用户体验和无线环境下的更低失败率)。通常这些操作系统的内核会比较简单,且通过配置和编译选项(makefile等)拥有可裁剪的内核/子系统,

  2.资源消耗少:包括CPU,Flash,内存等资源,通常物联网设备的CPU资源因为功耗和成本考虑,在选型时不会预留很大的buffer。Flash和内存大小一般在几Mbytes。很多系统当内核和平台必需的模块运行起来后,可供应用使用的内存不到几百KBytes。

  3.低功耗:对于无外接供电使用电池的设备来说低功耗尤其关键。一些物联网设备一块电池使用时间长达数年。CPU往往是功耗的最大用户,通常通过处理器睡眠或在不同应用场景调节CPU的频率来降低功耗。

  4.新接入设备的速度:易于移植和接入系统是构建生态的重要基础,提供SDK将平台的差异化部分剥离出来,提供通用的组件,标准的接口和协议,减少重复开发。

  5.良好的设备抽象:屏蔽底层设备的差异,将设备的能力抽象成服务开放。

  6.安全:提供加密算法库等组件。

  AliOS Things是阿里巴巴推出的面向IT领域的轻量级物联网嵌入式操作系统,适用于多种设备类型,如物联网设备、手机、平板电脑、电视、车载系统等。主要特点如下:

  1.应用与内核隔离:分别运行在不同的权限模式,应用不能直接访问内核空间和其他应用空间,单个应用崩溃不会导致系统崩溃,提升了稳定性;应用通过系统调用获取内核服务,通过IPC与其他应用通信;内核可独立编译、链接和更新;可同时加载运行多个应用,并动态加载与卸载。

  2.组件可配置和可裁剪:模块被组织成组件,每个组件有自己的.mk文件,用于描述它和其它组件间的依赖关系,方便应用开发者按需选用,方便裁剪。

  3.Rhino内核:AliOS Things的实时操作系统内核叫做Rhino,它的核心模块包括缓冲队列,环形缓冲区、定时器、信号量、互斥量、先入先出队列、事件等。这一块的实现和其它操作系统差别不大。

  4.支持多种协议:LwIP(IPv4&IPv6),蓝牙BLE,LoRaWAN,HTTP,HTTPS,CoAP,LwM2M,MQTT等。协议的支持对设备接入网络至关重要。

  5.调度策略:基于优先级的抢占式调度和round-robin循环调度策略,通过tick中断触发检查任务队列中的优先级,选择下一个运行的任务。

  6.网络安全:支持包括TLS,TFS, TEE在内的安全组件。

  7.低功耗模式:支持CPU的tickless idle 模式。

  8.OTA升级:支持差分升级,断点续传,HTTPS下载固件。

  9.文件存储:支持KV健值对存储,RAMFS,VFS。

  10.Log机制:Log可以输出到文件,UDP,或者云端。

  以下是AliOS Things的系统架构图:

  AliOS Things 系统架构

  其设计原则遵循了以下几个要求:

  1.模块自包含(Self-Contained):减少模块对外部模块的依赖,实现模块间的解耦

  2.运行时插件化(Pluggable):根据参数定义动态检查接口依赖和调用

  3.软件层次设计(Layered Design):系统整体被划分成四个层次,自顶而下分别为应用/算法层(AIL)、应用开发层(ADL)、硬件管理层(HML)、硬件适配层(VSL),禁止下层模块反向依赖上层模块,确保软件系统能按层次演进

  从底部到顶部包括:

  •   板级支持包(BSP):主要由SoC供应商开发和维护
  •   硬件抽象层(HAL):比如WiFi和UART
  •   内核:包括Rhino实时操作系统内核、Yloop, VFS, KV 存储
  •   协议栈:包括TCP/IP协议栈(LwIP),uMesh网络协议栈
  •   安全:安全传输层协议(TLS),可信服务框架(TFS)、可信运行环境(TEE)
  •   AOS API:提供可供应用软件和中间件使用的API
  •   中间件:包括常见的物联网组件和阿里巴巴增值服务中间件
  •   示例应用:阿里自主开发的示例代码,以及通过了完备测试的应用程序(比如Alinkapp)

  目录结构:

目录 描述
board 评估板(如STM32L496G-Discovery)
build 编译框架,模块可以根据需要编译进最后的产品代码,起到了系统可定制化的目的
device 连接MCU/SoC的外设,比如支持使用AT命令的WiFi系列模组
app 代码示例,通过了完备测试的应用程序(比如Alink)
framework IoT 通用组件
include 系统头文件
kernel 包括Rhino和协议栈
platform 芯片架构支持的相关文件
security 包括TLS,TFS, TEE在内的安全组件
tools 命令行界面(CLI)和用于建立远程设备中心的testbed工具
utility IoT通用软件库,比如 cJSON
test UT测试用例

  接下来介绍AliOS几个重要特性的实现:

  低功耗Tickless Idle模式:对于物联网设备来说,硬件功率至关重要,因为电量是有限的。如果系统消耗电量过快,它将很快没电。系统的主要供电是CPU,当CPU睡眠的时候,系统通常是处于低功耗状态的,Rhino提供了CPU的tickless idle 模式来帮助系统节约电能和延长使用时间。

  通常情况下,当CPU没有执行操作时,它将执行一个处理器指令(对于ARM来说的WFI,对于IA32位处理器来说的HLT),进入低功耗状态。此时,CPU寄存器的信息被保存,系统的tick clock interrupts会在每个tick时刻唤醒CPU。

  为了比正常模式节省更多的电量,Rhino为CPU提供了tickless idle模式。当操作系统检测到有一个固定时间(多个ticks或更长时间)的空闲后,它将进入tickless idle模式。系统做好中断配置,并把CPU置于C1模式,那时system tick clock中断不再被触发,system tick的计数也将停止。CPU会保持低耗电状态直到tickless idle时间结束。然后,当system tick timer interrupt再次被触发时,唤醒CPU从C1模式回到C0模式,为ticks计算好补偿时间并继续计数。

  任务调度:Rhino提供了两个调度策略,基于优先级的抢占式调度和round-robin循环调度策略。对于两个调度策略而言,具有最高优先级的任务都是被优先处理的。这也是绝大部分RTOS系统采用的调度策略。

  基于优先级的抢占式调度器会在遇到比当前运行的任务具有更高优先级任务时抢占CPU。这意味着,如果出现一个任务比当前任务具有更高优先级,内核将立即保存当前任务的context,并切换到高优先级的任务的context。因此,内核保证CPU总是优先处理优先级最高的任务。

  round-robin调度器通过时间片来为各任务分配CPU资源。在一组具有相同优先级的任务中,每个任务都会被安排运行一个固定的时间长度,或者说时间片,之后CPU将处理下一个任务。所以,在一个任务阻塞之前,其他任务不能抢夺到处理器资源。当时间片失效时,系统将运行该优先级就绪队列中的最后一个任务。

  调试:Rhino 可以支持stack溢出、内存泄漏、内存损坏的检测,操作系统还提供了对stack的backtrace功能。

  Yloop 事件架构:Yloop是AliOS Things的异步事件框架。借鉴了libuv及嵌入式业界常见的event loop,综合考虑使用复杂性,性能,及footprint,实现了一个适合于MCU的事件调度机制。Yloop提供了一套机制来统一调度管理IO(主要是socket),定时器,执行函数和事件。

  每个Yloop实例(aos_loop_t)与特定的任务上下文绑定。主任务以外的任务也可以创建自己的Yloop实例。多Yloop实例也可以被创建,其中每个instance都被绑定到一个单一的任务。

  键值对存储(KV):KV组件是AliOS Things中一个以Key-Value方式进行持久化存储的轻量级组件,主要为基于Nor Flash的小型MCU设备提供通用的Key-Value持久化存储接口。它的优势和特征包括:

  •   更少的擦写次数来延长flash的使用寿命
  •   电源安全,没有中间状态将存在
  •   方便使用,关键码值支持二进制格式数据
  •   最低支持Flash的大小是8KB

  Log 机制:各模块通过调用ulog()函数将log发送到queue中,log task从queue中接收log,并决定是打印到文件中,udp还是传到云端。通过使用mutex来锁log的生成,避免多任务的竞争,因此要避免在中断中使用该接口。

  空中固件升级(FOTA):FOTA(Fireware Over-The-Air) 可以对设备进行远程升级。特别提下,嵌入式系统升级时往往有3种方式,一种是出厂的固件放在Flash A区,程序固定从B区启动,每次下载的固件都存放到B区,当B区的固件损坏无法启动的时候,系统使用A区的固件启动。第二种是A区和B区交替使用(乒乓升级),如果固件下载到B区,后续程序从B区启动,下次升级固件存储到A区,程序从A区启动,这个好处是可以保证总有可用的固件,避免升级失败变砖,且可以回滚到之前的固件版本。第三种是固定从A区启动,下载的固件覆盖原A区的固件,这种升级存在失败系统变砖的风险。使用第一和第二种方式都可以,我不推荐第三种方式。AliOS Things支持第二种和第三种方式。

  特征:

  •   支持多种物联网协议 (Alink,MQTT ,COAP)
  •   支持HTTP / HTTPS / COAP固件下载
  •   支持多bin、delta和A/B更新

  AliOS Things Flash分区

  云端连接协议:支持通过Alink连接阿里云平台,用于智慧生活。支持标准的MQTT协议。支持COAP(基于UDP的轻量级协议),和COAP FOTA结合为NB-IoT设备建立一个只有UDP的系统。

  AT 解析器:AT解析器提供了处理AT命令连接通信模块的框架。AT解析器可处理串行流解析;回调OOB可以处理模块的特殊AT命令。与SAL一起使用,应用程序甚至可以在AT模块中使用BSD socket。.

  参考:

  https://github.com/alibaba/AliOS-Things

  https://github.com/alibaba/AliOS-Things/wiki

  欢迎给我留言,一起探讨技术问题。

上一篇:智能语音机器人在58同城校园招聘中的应用

下一篇:2019中国物联网大会通知