架构概述

AliOS Things的架构可以适用于分层架构和组件化架构。从底部到顶部,AliOS Things包括:

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

所有的模组都已经被组织成组件,且每个组件都有自己的.mk文件,用于描述它和其它组件间的依赖关系,方便应用开发者按需选用。

结构框图


文件夹结构


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

内核介绍

Rhino 实时操作系统内核

Rhino是AliOS Things内部设计和开发的实时操作系统。它具有体积小、功耗低、实时性强和调试方便等特点。Rhino提供了丰富多元的内核原语,包括缓冲队列,环形缓冲区、定时器、信号量、互斥量、先入先出队列、事件等。

体积小

Rhino为大多数内核对象提供静态和动态分配。为小内存块设计的内存分配器既支持固定块又支持可变块,它还可以支持多个内存区域。

大部分的内核特性,如work queue,和内存分配器,都可以通过修改k_config.h文件进行配置和裁剪。

由于组件可配置和可裁剪,可以让最终编译出的Rhino镜像尽可能小,使其可以被烧录进资源非常有限的设备中。

功耗低

对于物联网设备来说,硬件功率至关重要,因为电量是有限的。如果系统消耗电量过快,它将很快没电。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循环调度策略。对于两个调度策略而言,具有最高优先级的任务都是被优先处理的。

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

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

方便调试

Rhino 可以支持stack溢出、内存泄漏、内存损坏的检测,这有助于开发人员找出棘手问题的根源。结合AliOS Studio的集成开发环境(IDE),Rhino的追踪功能将实现整个系统运行活动的可视化。

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

协议栈介绍

为了帮助设备更容易地连接到云端,AliOS Things通过灵活的方式提供协议栈。

面向IP设备:

  • 为直接连接的SoC提供了测试良好的LwIP协议栈,包括WiFi SoC,MCU+SDIO/SPI WiFi模块等。
  • 为连接了通信模块(如WiFi,NB,GPRS)的MCU提供了SAL
  • 提供uMesh去构建更复杂的网状网络拓扑

对于非IP设备:

  • LoRaWAN协议栈已经集成到系统中
  • 提供BLE标准的API和BLE 协议栈

在不久的将来,LoRaWAN和BLE将被集成。

TCP / IP协议栈(LwIP)

AliOS Things拥有一个基于LwIP V2.0.0 的TCP/IP协议栈,支持IPv4,IPv6,IPv4和IPv6的共存。IPv4和IPv6已经在持续集成(CI)系统中经过良好测试,IPv6也已经在uMesh中被广泛应用和测试。

套接字适配层(SAL)

SAL为 WiFi/GPRS/NB-IoT系列模组提供了标准的Socket功能。特别地,考虑到AT命令是这个场景中最流行的形式,提供了AT Parser来帮助处理。

有了SAL,开发人员可以使用标准的Socket API访问网络,这将减少现有软件组件的集成工作。

自组织网络协议(uMesh)

uMesh是一个具有如下特征的mesh:

  • 无缝支持IPv4 和IPv6
  • RF标准独立,支持WiFi,BLE, 802.11和802.15.4等通信媒介
  • 支持不同通信媒介间的异构组网
  • 支持树状拓扑,网状拓扑和分层树状网格拓扑
  • 支持低功耗特性
  • 使用ID2对设备进行认证,AES-128对数据进行加密

安全性介绍

安全传输层协议(TLS)

继承于mbedtls, 对footprint进行了高度优化

信任框架服务(TFS)

可以对接大部分安全服务(比如 ID²)的框架

网络设备ID(ID²)

可信的IoT设备身份属性

密钥管理(KM)

通过使用硬件的安全功能提供可信的 runtime Root

Ali-Crypto

提供经典算法实现

可信执行环境(TEE)

提供完整的可信执行环境,现可支持C-Sky CK802T,不久的将来可支持ARMV8-M。

中间组件

空中固件升级(FOTA)

FOTA 使设备固件更新容易。AliOS Things可根据硬件配置给出FOTA解决方案,提供端到端的解决方案。

特征:

  • 支持丰富的物联网协议 (Alink,MQTT ,COAP)
  • 支持HTTP / HTTPS / COAP固件下载
  • 支持多bin、delta和A/B更新
  • 提供OTA HAL方便进入端口

uData

uData框架是基于传统Sensor Hub概念,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。

uData框架主要分kernel和framework两层,kernel层主要是负责传感器驱动,硬件端口配置和相关的静态校准,包括轴向校准等;framework层主要是负责应用服务管理、动态校准管理和对外模块接口等。

uData的目标范围服务是物联网商业服务,像无人机玩具、智能路灯、扫地机器人等。传感器驱动程序不仅能提供传感器SDK,还能提供传感器驱动像ALS,气压计,温度,加速度计,陀螺仪,磁力计等。

物联网协议

AliOS Things支持丰富的云端连接协议:

  • Alink:阿里云平台,适用于智能生活; 也包括WiFi配置组件YWSS。
  • MQTT:标准MQTT协议;已和阿里云物联网套件良好结合。
  • COAP:基于UDP的轻量级协议。和COAP FOTA结合便可为NB-IoT设备建立一个只有UDP的系统。

AT 解析器

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

工具

AliOS Studio 集成开发环境(IDE)

作为VS代码插件执行,可提供编辑/编译/调试功能。详情请看

uDevice Center

和AliOS Studio一起,它为开发者提供了一个远程和多设备的调试环境。借助backbone测试平台框架,基于真实硬件的持续集成(CI)系统可以被方便地建立。

AliOS Things相关推荐

  1. AliOS Things lorawanapp应用介绍

    摘要: 文本旨介绍AliOS Things的lorawanapp的示例,完成一个LoRaWAN网络的构建和数据传输,并通过该示例让大家对AliOS Things有一个初步的了解. 点此查看原文:cli ...

  2. WIN10系统上,新建AliOS Things项目

    全局掌控 确定新项目的目录 用VSCode新建项目 重新打开SDK目录 简单修改新项目的模板 编译,烧写,查看结果 AliOS Things 的Yloop调度 新项目的目录 我们将从Git上面下载的源 ...

  3. AliOS Things v1.2.0新特性

    为什么80%的码农都做不了架构师?>>>    摘要: 经过AliOS Things团队及合作伙伴的努力,AliOS Things v1.2.0发布了,除了支持恩智浦半导体LPC54 ...

  4. AliOS Things KV组件的写平衡特性

    摘要: KV组件的写平衡(磨损平衡)特性就是通过异地更新.垃圾回收等策略来平衡flash介质各个存储区块的磨损程度,以避免某些"特定"存储区块因过度使用而形成坏区,从而延长flas ...

  5. AliOS Things 硬件抽象层(HAL)对接系列2 — SPI driver porting

    HAL层(Hardware abstraction layer) 的目的是为了屏蔽底层不同芯片平台的差异,从而使驱动层上面的软件不会随芯片平台而改变.AliOS Things定义了全面的HAL抽象层, ...

  6. 开放下载!《AliOS Things快速开发指南》

    简介:<AliOS Things快速开发指南>手把手教你从环境准备到线上.线下开发调试,更有两大典型场景实践等你参与.你的物联网开发从这里开始!快来get新技能吧~ AliOS Thing ...

  7. 为你的AliOS Things应用增加自定义cli命令

    在日常嵌入式开发中,我们经常会用串口命令来使设备进入某种特定的状态,或执行某个特定的操作.如系统自检,模拟运行,或者进入手动模式进行设备点动.linux下有强大的shell工具,可以让用户和片上系统进 ...

  8. 英特尔、联发科、展讯等开始支持开源的物联网轻量化操作系统AliOS Lite

    操作系统AliOS Lite Chaos 12-21 11:03 在 12 月 20 日的云栖大会北京峰会上,阿里宣布即将开源 AliOS Lite,此前面向 IoT 领域的轻量级物联网嵌入式操作系统 ...

  9. AliOS Things v1.1.1新特性

    今年杭州云栖大会上,AliOS Things正式发布,10月20号在github上开源v1.1.0版本.经过AliOS Things团队及合作伙伴1个多月的努力,很高兴有些更新可以和大家分享. Ali ...

  10. 自行车也能做智能升级?AliOS以想象力为智慧出行带来新体验

    春暖花开的季节,骑车出街无疑成为了不少人的最佳选择. 而就在最近,AliOS发布的一则视频让人眼前一亮--自行车居然也能实现智慧驾驶?据悉,视频中介绍的这款"即贴即用"的移动便携式 ...

最新文章

  1. 10款在线格式转化应用
  2. Linux内核的Oops
  3. 蓝牙耳机和蓝牙鼠标相互干扰_蓝牙耳机推荐:编辑亲测后中肯评价五大爆款蓝牙耳机...
  4. php一句话图片木马过滤_php一句话图片木马怎么解析
  5. 热备份路由选择协议(HSRP)
  6. 集成电路883和883b有什么区别
  7. 企业微信小程序_小程序开发工具及真机调试_host配置及代理
  8. 【转】JavaScript eval处理JSON数据 为什么要加括号
  9. 台式电脑键盘字母乱了_电脑键盘的详细介绍,想懂点电脑必看
  10. 实例--[QSerialPort]串口通信_vortex_新浪博客
  11. linux机器光口和电口的区别,易天光通信SFP电口模块和10G SFP+电口模块介绍
  12. 通信原理(第七版)常见公式
  13. 怎么调整图片大小?这三种方法一定能帮到你
  14. 计算机与音乐整合的教学设计,信息技术与学科教学整合音乐课教学设计  2010年10月  田赞禄...
  15. SequoiaDB巨杉数据库许建辉:夯实数据库根科技,提升企业数智化转型的“人效”和“能效”...
  16. 2021-09-29 关于间断点相关题目的总结
  17. 小白不知道raw批量转换jpg怎么转?分享好用的方法
  18. Java常见面试题(JVM)
  19. Algorithm1
  20. 我的世界服务器物品栏mod,[娱乐|机械]Item Lore Stats —— 自定义物品[附带强化][1.7-1.10]...

热门文章

  1. 【观察】英特尔:视频行业最佳“合伙人”
  2. window10家庭版安装docker记录
  3. 计算机科学内容基础,计算机科学的基础pdf
  4. [WC2008]游览计划
  5. APP下载链接在微信内打不开显示已停止访问该网页怎么办?
  6. python itchat实现微信自动回复
  7. 智博联反射波测桩分析软件 V141125专业版
  8. js 获取移动端设备类型及系统版本号
  9. Linux中find命令基本使用方法
  10. 支付系统 java_PaySystem