热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AliOSThings

架构概述AliOSThings的架构可以适用于分层架构和组件化架构。从底部到顶部,AliOSThings包括:板级支持包(BSP&#x

架构概述

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文件,用于描述它和其它组件间的依赖关系,方便应用开发者按需选用。

结构框图



block_digram | left

文件夹结构




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

内核介绍


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)系统可以被方便地建立。


推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
author-avatar
小猪猫猫晓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有