AliOS Things 系统架构介绍(二)

简介: AliOS Things 系统架构介绍(二)

开发者学习笔记【阿里云物联网助理工程师认证(ACA)AliOS Things 系统架构介绍(二)

课程地址:https://edu.aliyun.com/course/3112060/lesson/18972

AliOS Things 系统架构介绍(二)

二、AliOS Things系统架构中分层介绍

1、底层硬件支持

下面我们来对架构里面的每一层进行讲解。首先是底层硬件支持方面,底层硬件支持分为三个方面,第一方面是 Soc/MCU支持。SOC是系统的简称。MCU是微处理器的简称。它支持的Soc/MCU 有 cortex系列、Xtensa,RISCV,C-SKY,Renesas,ARM系列,MIPS-I等。这些是AliOS能够支持的芯片。接下来介绍是AliOS Things系统能够在哪些开发板上正常运行。第一个是developerkit,starterkit, bI475e, stm32系列,eml3047,mk系列,atsame54-xpro, imx6sl, imx6dq, lpcxpresso54系列,evkmimxrt系列,frdmkI系列等。以上是能够支持AliOS Things系统正常运行的开发板。


AliOS Things系统能够在哪些传感器上正常运行。加速度计,温度传感器,心跳传感器,红外线传感器(IR),磁力计,RGB,气体传感器(TVOC),温湿度传感器,陀螺仪,气压计,环境光传感器(ALS),压力传感器(PS),紫外线传感器(UV),飞行时间传感器(TOF),二氧化碳气体传感器,甲醛传感器,噪声传感器,大气压力传感器,空气质量传感器,光照传感器,叶面湿度传感器,土壤水分传感器,土壤导电率传感器,土壤酸碱度传感器,雨量计,风向传感器,风速传感器,温湿度变送器,土壤温湿度传感器等比较常见的传感器基本涵盖了各行各业的传感器。以上是AliOS Things系统硬件支持的三部分讲解,接下来是AliOS Things系统第二层系统内核的讲解。


2、自研发内核Rhino介绍

AliOS Things系统使用的是Rhino实时操作系统内核,是阿里自主研究的系统内核,Rhino是犀牛的意思,是Alios Things的核心,Rhino不包括BSP (板级支持包),HAL (硬件访问层),APP (应用层)等,只包括操作系统的核心部分,比如: task(多任务实现),timer (定时器),tick (操作系统滴答),mutex (互斥锁),ringbuf (环形缓存),sched (系统调度),spin_lock (原子锁),workqueue (工作队列)等。Rhino特性

第一个特性是体积小:可根据具体的物联网需求的内核来进行裁剪,去掉不需要的功能模块或增加额外的功能模块,来满足特定的物联网需求,并且最终编译出的Rhino镜像尽可能小,使其可以被烧录进资源非常有限的设备中。

第二个特点是功耗低: Rhino提供了CPU的 ickless idle 模式来帮助系统节约电能和延长使用时间。

第三个特点是实时性: Rhino提供了两个调度策略,是基于优先级的抢占式调度和round-robin循环调度策略。

基于优先级的抢占式调度是当优先级高的调度会抢占其他正在运行的低优先级的CPU运行权限,来优先运行高优先级的程序。等到高优先级运行完后,才会轮到低优先级运行。第二种调度方式是round-robin循环调度策略,它是一种轮形调度方式,在这种调度情况下,高优先级进程就绪时不能够强制正在运行的第一优先级的CPU直接权限,必须等到低优先级运行进程使用完CPU之后,才会轮到它使用。Rhino提供了这两种调度策略,可以根据具体的互联网一个环境需求来选择调度策略,如果是实时性要求比较强的,可以选择基于优先级的抢占调度策略,如果是一般性的就可以选择第二种循环调度策略。


第四个特点是方便调试:结合AlioS Studio的集成开发环境 (IDE),它可以在集成开发环境里很方便的进行代码开发与调试,并且Rhino还具有追踪功能,它能够实现整个系统运行活动的可视化,来帮助我们查看程序的运行状况、它的CPU占用率、内存占用率是否有僵尸进程等,以上就是Rhino特性介绍。


3、硬件抽象层介绍

下面介绍的是第三层:统一稳定的系统和硬件抽象层,它包括了系统稳定API等API。首先介绍的是系统调用,一是内存管理,内存管理是指软件运行时系统内存资源的分配和使用技术,最主要的目的是如何高效快速的分配,并且在适当的时候释放和回收内存资源,开发者在进行需求开发时,可以使用提供的内存管理API调用来合理、高效,快速的对内种进行分配,并且在适当的时候进行释放和回收内存资源。第二个系统调用是任务管理,现代操作系统都建立在任务的基础上,任务是AiOs Things的一个基本执行环境,有的操作系统也称之为线程(thread)。多任务的运行环境提供了一个基本机制,从宏观上可以看作单个CPU执行单元上同时执行多个任务,从微观上看,CPU快速地切换任务来并发运行多个任务。


AliOs Things实时操作系统支持多任务机制。每个任务都具有上下文(context),上下文context是指当任务被调度执行的时候此任务能看见的CPU资源和系统资源,当发生任务切换的时候,任务的上下文被保存在任务控制块(ktask t)中,这些上下文包括当前任务的CPU指令地址(PC指针),当前任务的栈空间,当前任务的CPU寄存器状态等。


根据例子我们可以知道在单个CPU设备上,CPU它可以像闪电侠一样快速的在多个进程任务间进行切换执行,它的切换速度超过了我们的感知速度,我们感觉所有任务都是同时进行,但是定格到某个时刻,微观上看有且只有一个任务在被CPU执行。当CPU快速执行并运行多个任务时,它是根据任务的上下文进行切换。每一个任务都具有上下文,上下文是指当任务被调度执行的时候,使任务能够看见的CPU资源和信息资源,当发生任务切换时,任务的上下文就被保存在任务控制块里。这些上下文包括当前任务的CPU执行指令,当前任务的所占空间,当前任务器的CPU寄存器状态,CPU进行切换任务时,需要根据任务的上下文来进行切换。以上就是任务管理的系统标准介绍,接下来是定时器的介绍。


定时器中tick一般是作为任务延迟调度的内部机制,其接口主要是系统内部使用。但是对于使用OS的应用软件有时也需要定时触发相关功能的接口,包括单次定时器和周期定时器。


从用户层面来讲,不需要关注底层cpu的定时机制以及tick的调度,用户希望的定时器接口是可以创建和使能一个软件接口定时器,时间到了之后,用户的hook函数能被执行。而对于操作系统的定时器本身来讲,其也需要屏蔽底层定时模块的差异。因此,在软件层次上,对于定时器硬件相关的操作由tick模块来完成,用户只需要使用tick模块提供的功能接口,通过它提供的功能接口来完成相应的功能需求,并不需要知道它底层是具体如何来实现的。


定时器(timer)模块基于tick作为最基本的时间调度单元,即最小时间周期,来推动自己时间轴的运行。 AliOS Things提供基本的软件定时器功能,包括定时器的创建、删除、启动,以及单次和周期定时器。以上就是定时器的介绍。


信号量一般用于解决用户的同步问题,在很多多任务或者多个的操作系统中,往往需要访问共同的一些系统资源,比如办公室的打印打印机是办公室的一个共享资源,大家都可以使用,但是如何保证大家有序的使用,保证大家的打印任务不会发生混乱,有序的完成,就需要有一个机制来解决访问功能资源冲突的问题


共享资源包括软件资源和硬件资源。软件共享资源包括共享内存共享变量、共享队列等等,硬件共享资源包括硬件设备的访问,例如:输入/输出设备。为了避免多个任务访问共享资源时相互影响甚至冲突,需要对共享资源进行保护,有下列几种处理方式:开关中断、信号量(semphore)、互斥量 (mutex)。


开关中断:一般用于单核平台多任务之间的互斥,通过关闭任务的调度,从而达到单任务访问共享资源的目的。缺点是会影响中断响应时间。


信号量: 通过配置信号量的数目来表示可用资源的数量,多个任务共享资源时,需要先检查信号量的值,如果值大于0,表示有共享资源可用,则该任务获得资源进行使用,如果信号量的值等于0,则表示没有资源可用,那么任务就需要按照优先级排序等待需要等待到其他任务使用完这个资源,将资源释放出后,这些任务才能继续运行,这种方式的缺点是存在高低任务优先级反转的问题。比如当低优先任务获取了资源,这时高优先级任务就绪了但没有资源可用,就必须等待。按照正常逻辑是高优先级任务就绪了,就必须马上去运行。但是一旦使用信号量,他们之间的优先级就反转。

互斥量,我们可以把互斥量理解为一把锁,当锁锁上后,别人就不能访问这个共享资源,使用完后把锁释放,别人才又可以使用这把锁,这就是互斥量的一个使用场景。所以使用互斥量的情况下单次只有一个任务能获取该互斥量,获得CPU网站资源运行。以上就是三种多用户对共享资源进行访问时的处理方式


互斥信号量( mutex )的获取是完全互斥的,即同一时刻,mutex 只能被一个任务获取。而信号量( sem )按照起始 count 的配置,存在多个任务获取同一信号量的情况,直到count减为0,则后续任务无法再获取信号量,当 sem 的 count 初值设置为1,同样有互斥的效果。 信号量的值就是资源可用数,count变为0表示没有资源可用,任务只能等待,所以当信号量的值为1的时候,它就有互斥的效果。只有1和0两种情况,使用后就0,不能继续使用,释放出来重新为1,才可以使用,只能一个人用这种情况下,为了解决优先级反转问题,高优先级的任务获取 mutex 时,如果该 mutex 被某低优先级的任务占用,会动态提升该低优先级任务的优先级等于高优先级,并且将该优先级值依次传递给该低优先级任务依赖的互斥量关联的任务,以此递归下去。


当某任务释放 mutex 时,会查找该任务的基础优先级,以及获取到的互斥量所阻塞的最高优先级的任务的优先级,取两者中高的优先级来重新设定此任务的优先级。总的原则是,高优先级任务被mutex阻塞时,会将占用该mutex的低优先级任务临时提高;mutex释放时,相应任务的优先级需要恢复。这就没有破坏任务高优先级设置的初衷,解决了优先级反转的问题。


消息队列,多任务系统中,任务间互相同步等待共享资源,我们一般会使用信号量,如果需要互斥,则使用互斥量。而任务间互相收发消息则可以使用消息队列。消息队列(queue)使用类似信号量的机制进行任务间的同步,并使用环形缓冲池(ring bufer)来进行消息的队列缓冲管理,以达到任务间收发消息的阻塞和通知管理。


Queue的实现目的在于任务间互相收发消息。一般如果有信号量机制,用户就可以自己实现一套任务间的阻塞和通知收发功能,其本质在于接收方通过信号量的获取来开始接收消息,发送方通过信号量的释放来通知接收方处理。接收任务在无消息时被阳寒,消息到来时被唤醒处理Queue就是基于这样一种类信号量机制来进行消息的收发。其既包含消息的缓冲队列,又包含了消息的通知机制。

工作队列,在一个操作系统中,如果我们需要进行一项工作处理,往往需要创建一个任务来加入内核的调度队列。如果要进行不同的事务处理,则需要创建多个不同的任务。任务作为Cpu调度的基础单元,任务数量越大,则调度成本越高。


工作队列(workqueue) 机制简化了基本的任务创建和处理机制,一个工作队列(workqueue对应一个实体task任务处理,工作队列下面可以挂接多个工作实体,每一个work实体都能对应不同的处理接口。即用户只需要创建一个工作队列,则可以完成多个挂接不同处理函数的工作队列。其次,当某些实时性要求较高的任务中,需要进行较繁重钩子处理时,可以将其处理函数挂接在工作队列(workqueue中,其执行过程将位于工作队列的上下文,而不会占用原有任务的处理资源。


另外,工作队列还提供了工作的延时处理机制,用户可以选择立即执行或是延时处理。所以我们在需要创建大量实时性要求不高的任务时,可以使用工作队列来统一调度,或者将任务中实时性要求不高的部分延后处理将实时性要求高的立即处理。


硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,隐藏特定平台的硬件接口细节,为操作系统提供虚拟硬件平台。进行硬件操作时,直接使用硬件抽象层提供的接口来对硬件进行操作,底层具体的操作不需要了解。功能代码与具体的硬件无关,可以在多种平台上进行移植。


封装的一些接口有对GPIO的接口封装、对UART接口封装、SPI的接口分装、I2C的接口分装、FLASH的接口分装、PWM的接口分装、TIMER的接口分装、WDG的接口分装、RTC、ADC、DAC、RNG等不同底层驱动的接口分装。


4、组件概要介绍

AliOS Things系统中集合组件:

第一个是键值对存储模块例如(键值对:(“AlarmTemp”:50》这一形式),前面是键后面是值的形式,通过键就可以直接访问,不需要关心底层是具体如何存放和对应。

第二个是命令行交互模块,类似 Linux shell 的交互工具,可以在模块上输入相应的命令或自己定义的命令。

第三个是虚拟文件系统,提供了一种对具体文件系统类型的一个抽象,可以将多个具体的文件系统接口统一起来,用户可通过虚拟文件系统屏蔽各个底层具体文件系统的操作接口、数据类型差异。

第四个是OTA,主要是升级模块,支持APP的整体升级和某个模块的部分升级。

第五个是阿里云物联网平台连接,将SDK直接集成到设备上,通过使用其提供的SDK就可以直接接入到阿里云 I0T 物联网平台,快速实现云端一体开发。

第六个是Socket 组件,主要实现网间不同虚拟机或不同计算机之间的通信,没有Socket 组件就不能实现网间的通讯。

第七个是BLE host 组件,支持符合蓝牙 4.0/4.2/5.0核心协议规范的 蓝牙 host 软件协议栈。

第八个是MODBUS 组件,是一种主从式协议用于串行通信,即主站发起通讯,从站响应。主设备可以与一个或多个从设备通信,通过窗口进行通信。

第九个是BLE Mesh 组件,蓝牙Mesh网络是一种多对多通信网络,使节点设备之间可以相互通信,具有覆盖范围大、功耗低、安全性高、入网灵活、支持大规模节点设备等特点。

uData,是一个面对 I0T 的感知设备处理框架,是一个传感器管理架架。

uData 主要分 kernel 和 ramework 两层:

kermel 层主要是负责传感器驱动和相关的静态校准,包括轴向校准等。

ramewok 层主要是负责应用服务管理、动态校准管理和对外模块接口等。

uLog是一个日志系统,在AioS Things 中承担各个组件的日志记录和输出。

MAL组件,是MQTT Adapter Layer 的简称。MAL 组件将外部扩展模组中提供的 MQTT 协议,通过 AT 或其他命令的方式为用户转换为 AliOs Things 系统中提供的统一 MQTT 协议API,提高用户应用程序的可移植性和硬件无关性。


SAL组件,是Socket Adapter Layer的简称。AliOS Things 中 SAL 套件是针对 MCU+外部通信模组的方式,提供标准Socket接口服务,SAL 套件提供AT 命令到 Socket 标准接口的转换。借助 SAL 套件,用户不用感知底层通信方式和介质,可以使用标准 Socket 接口进行应用开发,使上层应用具有更好的可移植性,开发时不需要担心底层是Wi-Fi、2G或4G,直接使用标准Socket 接口进行应用开发即可,具体底层Wi-Fi、2G或4G如何转换是SAL 套件的工作。


AT 组件,提供了MCU 与外接通信模组间基于 AT 命令的基础通信能力,是物联网应用场景中不可或缺的模块之一。基于该组件,用户只需要关注 AT 指令的语义,无需关心AT 指令的收发过程,简化外接模组的AT 通信驱动的开发,可直接使用其AT命令。


HTTP 组件,HTTP 是一款用于传输超文本的应用层协议。AliS Things 的网络协议栈包含了HTTP 组件,提供HTTP 客户端标准能力。开发者可以通过HTTP组件提供的API,快速实现设备端与 HTTP 服务端的数据交互。


COAP 组件,主要使用 RESTful 服务框架,通过统一的资源标识、统一的操作接口、可自描述的消息,实现物联网设备端与服务端所需交互。Breeze,是阿里云loT针对蓝牙设备,提供了一套基于蓝牙BLE链接轻量级安全Breeze方案,可以实现APP-设备-云的完整链路.


GUI,图形用户界面,可以在低配置的设备里不安装GUI,在高配置智能化装备中安装GUI来提升用户的体验。

 

本节知识总结

1.AliOSThings系统整体架构介绍

2.AliOsThings系统架构中分层介绍

1.硬件支持

2.自研发内核Rhino介绍

3.硬件抽象层介绍

4.组件要介绍


随堂思考:

1、HAL的作用?

HAL是硬件抽象层,位于操作系统内核,与硬件电路之间的接口,其目的在于将硬件抽象化,隐藏特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可以再多平台上进行移植,上层使用相关功能是,也可以调用HAL层接口来保证APP的通用性。

2、简述信号量的作用

信号量主要用于多个用户共同访问共享资源时,使其合理有序的访问共享资源。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
8月前
|
存储 传感器 人工智能
AliOS Things 系统架构介绍(一)
AliOS Things 系统架构介绍(一)
198 0
|
传感器 存储 人工智能
3_3_AliOS Things 操作系统架构|学习笔记
快速学习3_3_AliOS Things 操作系统架构。
330 0
3_3_AliOS Things 操作系统架构|学习笔记
|
安全 网络协议 物联网
AliOS Things 技术架构
AliOS-Things 是一款由阿里巴巴开发的轻量级物联网操作系统。架构可以适用于分层架构和组件化架构
8863 0
|
安全 物联网 网络安全
AliOS Things自组织网络安全认证架构概述
AliOS Things自组织网络(uMesh)结合阿里云Link ID²设备身份认证平台为物联网嵌入式设备提供了自主安全认证授权接入无线mesh网络的解决方案,并且兼容IEEE802.1X端口控制访问协议和EAP(RFC3748)扩展认证协议,提供了一种灵活可扩展的安全认证机制框架。
4497 0
|
物联网 Linux
【AliOS Things学习笔记】为你的AliOS Things应用增加自定义cli命令
怎么才能在RTOS系统中,通过 串口shell控制LED的开关。
3586 0
|
AliOS-Things 物联网 编译器
使用HaaS Studio开发AliOS Things C/C++应用
本文章将介绍使用HaaS Studio 进行AliOS-Things C/C++应用开发。
使用HaaS Studio开发AliOS Things C/C++应用
|
传感器 存储 移动开发
使用AliOS Things快速构建温度计应用 |《AliOS Things快速开发指南》
本文是基于AliOS Things 3.1快速构建温度计的应用场景。涉及AliOS Things组件开发,构建AliOS Things用户项目,AliOS Things HAL API使用,向AliOS Things中添加并使用组件。用到的硬件设备有半导体开发板、温度传感器、数码管显示器。
使用AliOS Things快速构建温度计应用 |《AliOS Things快速开发指南》
|
域名解析 移动开发 数据可视化
使用 AliOS Things 3.0 快速构建用户应用 BlinkAPP
AliOS Things 3.0版本于去年9月份在云栖大会正式发布,在新版本中带来了全新的应用开发框架,帮助用户快速构建自己的应用。使用户可以更专注于自身应用的开发。本文将已BlinkAPP为例,为大家演示如何快速使用应用开发框创建项目并完成应用代码编写。
912 0
使用 AliOS Things 3.0 快速构建用户应用 BlinkAPP
|
物联网 AliOS-Things 机器人
AliOS Things 3.0 应用笔记:摄像头配网 + 钉钉群通知 + 天气显示
距离 AliOS Things 3.0 上线已经有一段时间了,新版的 AliOS Things 3.0 体验感到底如何呢?本文将为大家详细讲解其应用实例,我们分别从运行流程、效果展示、操作流程以及源码讲解四个方面进行了阐述。
1700 0