开发者学堂课程【阿里云 AIoT 物联网开发实战:AliOS Things 技术分享】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/328/detail/3698
AliOS Things 技术分享(一)
内容介绍:
一、为什么需要嵌入式操作系统
二、物联网操作系统 AliOS Things 介绍
三、使用 AliOS Things 帮助设备快速上云
四、AliOS Things 开发者社区
一、为什么需要嵌入式操作系统
1.嵌入式操作系统的发展历史
三个阶段,第一阶段上世纪70、80年代以功能简单的专用计算机或单片机为核心的可编程控制器,主要是8位机、16位机。无操作系统的嵌入式概念,通过汇编语言对系统进行直接控制,主要是流程的控制,运行结束后清除内存。
随着应用场景的复杂以及嵌入式 CPU 的发展,出现了一批高可靠、低功耗的嵌入式 CPU。此操作系统功能上比较简单,具有一定的兼容性和扩容性,用户界面不够友好。系统主要用来监控系统负载以及监控应用程序运行的状况。
21世纪,随着物联网时代的蓬勃兴起,芯片技术的不断发展。芯片技术与物联网技术相结合,出现新时代物联网操作系统。明确的标准内核精小、效率高,具有高度的模块化和扩展性;支持大的组件,比如文件系统、多任务、网络支持、图形窗口以及用户界面等功能,嵌入式应用软件比较丰富。
2.嵌入式操作系统带来了什么(不用操作系统会出现什么问题)
操作系统是对硬件资源的管理,不用操作系统,单任务的应用,很难完全的利用 CPU 的资源。多任务的操作系统基于实施调动,才能最大限度的利用 CPU 的资源,把应用资源充分的发挥。多核 CPU 被广泛应用,更需要操作系统协调调度。
提升开发效率,降低开发难度。嵌入式操作系统是多任务的情况,每个任务执行自己任务的能力,不需要所有的任务挤在一个线程上,降低了整个任务的开发难度。操作系统提供了丰富的系统 API,系统资源的申请、多任务配合、任务之间的通信,直接调用系统 API。提供丰富的组件资源,拿之即用。
易维护和管理,所有的功能模块按任务组织,每个任务相对单纯,逻辑清晰,代码简单,更易于后期开发和维护。任务之间的交互便捷,不同任务之间通过操作系统进行同步和数据交互。
可移植性高,嵌入式的 MCU 情况多,发展迭代速度块。应用过1、2年需要在新系统上移植,对移植性要求高。操作系统一般对底层的 HAL、API 接口进行标准的封装,兼容业界生态,屏蔽不同硬件带来的影响,可移植性相对较高。
二、物联网操作系统 AliOS Things 介绍
1、AliOS Things 发展历史
2017年11月第一个版本1.1.0,在 Github 开源,用自主可控的知识产权,内核重新写。加了很多组件,包括存储、网络、安全组件。最近的版本是2020年4月发布的3.1.0版本,9月可能发布4.0.0版本。
2、AliOS Things系统架构图
最下面是硬件,主流的物联网芯片。AliOS Things 支持主流的 CPU 架构,比如 ARM Cortex A/R/M、Xtensa、CSky 等,主流的物联网芯片大概支持80多款。上面是自研的实时操作系统内核 Rhino,再上面是提供的统一稳定的 API,兼容 POSIX API 接口。上面是 AOS 通用组件,包括网络组件,比如 jdvrp、蓝牙、Lora、uMesh 协议栈,轻量级图形用户 GUI,文件系统,VFS 以及安全的存储 TEE。最上面是应用组件,包括与阿里云平台连接的 Linkkit SDK,以及与 LV 平台连接的 Link Vision SDK。一方的增值中间件,OTA 升级、语音能力、定位能力、传感器的管理框架。轻量级的计算引擎,包括实时流计算,轻量级的 AI SDK。始于经典,面向整个 IoT
3、AliOS Things面向设备
家庭用的 RPC Camera、冰箱、洗衣机、智能插座,工业方面的机器手臂、面板。设备的共同特点,功能需求相对简单、明确、集中。硬件资源有限,都是受限的设备。运行稳定性要求高,启动时间及实时性要求较高。OS基本支持设备,面向工业、家庭、园区、农业场景。
统一硬件抽象
12类常用硬件抽象,经常用的 GPIO、UART、SPI、I2C、FLASH、RTC、PWM、TIMER 转换。
通用硬件抽象层好处
下面的板卡不一样,但硬件抽象层一样,硬件函数一样。非常方便的使应用开发在各种板卡上不用修改代码,直接使用,极大方便了可移植性。
4、完善的网络支持
物联网操作系统对连网的支持非常强,AliOS Things 支持各种网络连接。
支持局域网连接:WiFi、蓝牙、以太网、ZigBee 等
支持网络协议栈:HTTP/s、MQTT、CoAP、LwM2M 等常用物联网协议
兼容 IPv4/IPv6
支持各种网络 Debug 工具,如 ping/iperf/ifconfig/pktprint 等
提供一整套网络管理框架,可以对 wifi,广域,有线等网络进行管理,实现高效共存
支持 WiFi Mesh 和蓝牙 Mesh 组网,针对蓝牙和 WiFi 的场景
5、统一网络适配层
市面上有很多通信模组,UR 的方式接到 MCU,通过 URT 或 IT 命令通信,将方式抽象为 socket 接口。如下图
上面是 APP,下面是 SAL 框架,API 看到的是标准的 socket 接口。SAL 层将下面的硬件屏蔽,2G 的模块或 WiFi 模块,应用层看到的是标准的 socket 接口,方便用户开发。通信模组不仅提供 socket 功能,还提供高端 MQTT 功能。
MQTT适配层如下
APP 主要针对 MQTT 接口,MAL 层将 MQTT 通信协议的整个细节屏蔽,非常方便开发。原来一个客户用 WiFi 使用 AliOS Things 开发设备,移到户外,直接使用2G模块开发。1天换为2G模块整个产品完成。
6、完整的云平台连接适配
AliOS Things 与 IoT 平台紧密连接,是云端一体大的系统。IoT 平台上的应用是 OS 天生支持的,比如设备管理能力,可在本地和云端管理。OTA 能力,支持很多 OTA 方式,与云端 OTA 管理结合在一起。IoT 安全能力,安全存储、可信设备可信加密等能力与平台有很大关联。文件传输、网关管理能力与阿里云平台一起关联,一直丰富云端的能力与 OS 结合。
7、文件系统支持
标准 POSX 文件/目录操作接口支持,方便用户应用移植
支持多种介质的文件系统(NOR/NAND/SD卡/eMMC),适用众多场景
支持掉电保护、坏块管理、磨损平衡、垃圾回收机制
支持丰富的工具支持(镜像制作、镜像 dump 分析、运行调试、性能测试)
经过不断性能调优,实现 NAND 上读写KB至MB的转变,目前 NAND 实现3-4MB/s的读写速度。
使用通用 HAL 编写驱动,可移植性强
文件系统大的架构图
上面用 POSIX 接口,使用 littlefs 做改造。之前不支持 NAND,现在支持。
8、POSIX标准支持
Unix/Linux 生态都使用标准的 POSIX 接口,AliOS Things 也支持标准的 POSIX 接口。可兼容 Linux 生态,在 Linux 开发系统的组件或软件,很少的代码可移植到 AliOS Things 上。
POSIX 接口由 IEEE 和 ISO 国际标准化组织定义
每个 API 的输入输出、行为、数据结构,头文件名称等都被标准详细定义
整个 POSIX API 应用性非常好,在 Unix/Linux 系统广泛验证,且被广大开发者所熟悉
每个 API 都有标准化的文档详细说明,有标准化测试的说明。
天猫精灵智能音箱项目由 linux 迁移到 AliOS Things,容易迁移。从linux 到 AliOS Things 功能一样,flash 和 ram 需求降低50%,启动时间缩短50%。
RPC 项目,智能摄像头 linux 迁移到 AliOSThings
启动拍照时间由6秒降低到600毫秒,进一步降低功耗。电池待机提升30%。
9、端云一体OTA升级支持
OTA 做非常广的支持,包括高安全性。OTA 有安全固件数字签名,防固件被篡改,抵赖;OTA 安全加密通道,断电保护,断点续传能力;独创乒乓升级自动回滚机制,让 OTA 失败后快速恢复上一个固件,继续 run;压测体系保障可靠性,成功率99.7%以上。
OTA 自研差分升级的算法,压缩率高,压缩率小于30%。比业界平均水平高10~20%。能显著节省下载流量,适合蓝牙等低带宽场景。
支持丰富的 OTA 场景,支持复杂组合芯片升级场景。模组对 MCU升级,网关对子设备升级,手机对蓝牙设备升级。支持 RTOS/Linux操作系统,OTA 支持主流芯片20款以上,模组开发板40款以上做开发和移植情况。
10、AI 框架
包含智能语音应用,可运行本地唤醒算法,比如天猫精灵本地唤醒。可打通云端识别服务。
智能仪表识别,基于 Cortex M4 wifi SOC 实现本地仪表识别,识别速度300mS/字,准确率>98%,RAM=90K.ROM=14K,RAM 空间90K,ROM14K。
AI 框架图如下
11、AliOSThings 组件
基础组件:文件系统 FS、系统信息 SYS、键值对存储 KV、电源管理 LPM、硬件 I/O UART/GPIO/I2C/SPI、模数/数模转换 ADC/DAC、丰富网络协议组件UDP/TCP/HTTP/MQTT 协议,蓝牙 /Lora 协议栈。
高级组件:
连接阿里云平台的 Linkkit SDK、连接 Link Vision 平台的 LV SDK、连接支付宝平台的支付组件 uPay、智能语音组件 uVoice、传感器服务组件 uData、定位服务组件 uLocation外设驱动库、编码/步进/伺服电机/继电器、麦克风/语音录放模块/扬声器、PS2摇杆/电容触摸/按键、TFT彩屏/数码管/三色灯、加速度/陀螺仪/气压计/磁力计、温湿度/颜色/光照强度等
12、使用共享组件
利用 AliOSThings 提供的组件管理工具,用户可以下载或在线拉取生态贡献者提供的应用组件,并安装到本地开发环境中,快速设备开发。
构建自己的组件
自己的组件开发规范,利用 AliOSThings 提供的组件构建工具,用户可以快速构建自己的算法组件或外设驱动组件,组件可放到组件开发平台进行商业化输出,让组件高效的为其他人复用。
13、远程运维工具
进入
点击调式运维
选择一个设备
可通过 command 与用户做远程的交互,输入 help 或 tasklist,可将目前整个设备的 task 打出。
可查看远程的日志情况,修改日志的等级
可查看原始日志内容,将日志保存在本地,拉取 list 情况
远程运维工具非常方便用户通过远程控制台做开发,不需要拿开发板开发。
14、开发维测工具
嵌入式开发与开发 Java、网页很大区别是调试困难,偶线性的 clash问题,非常棘手。做开发维测的工具在设备出现问题时 OS 可接管cpu 的异常向量,对各种死机问题进行处理。
可将现场的信息打印,有很强大的栈回溯能力。
PC 端解析工具可直接将现场二进制的 clash 现场解析,更好让人观看。直接精确到某个函数、某一行出问题的报告输出。
CLI 自查机制,现场 clash 了,现场底层系统可做现场交互。通过 CLI 的方式可查看整个系统的运维状况,包括变量、内存的状况,可方便检测问题。
有一段 demo,在 qemu 上做一个简单的 Hello world!演示程序
console cli-uart init ok, att_pid :0
(cli-uart)# <I>ULOG ulog_fs_init[937]:dir /data/syslog/kernel and /data/syslog/backup/kernel exist
<I>ULOG load_cfg_2_mm[226]: read cfg file line {"working_idx":1}
<I>ULOG load_cfg_2_mm[226]: read cfg file line {"file_idx":1,"start"
:"Jan 01 08:00:00.193","end":""}
<I>ULOG reload_log_argu[616]: log file idx 1
<I>ULOG ulog_fs_init[943]: reload ulog idx 1 off 0 new fd 512
Welcome to Alios Things
plio->control: 0x82b
plio->g: 0xf
lcd init done
hw_mouse_init succesed
nane entry here!
[hk]application_start netmgr init->
proc init. phy region start 0x68000000,len 0x7000000
interpret_ash_script return-2
[Jan 01 08:00:00.181]<D>input: <aos-init> input_core_init successf
ully
[Jan 01 08:00:00.185]<D>WIFI_SERVICE<aos-init>wifi_service_init:1
910
[Jan 01 08:00:00.185]<D>WIFI_SERVICE<aos-init>wifi_service_init:1
922
[Jan 01 08:00:00.185]<I>WIFI_SERVICE<aos-init>wifi_service_init:19
48 memset ap config
[Jan 01 08:00:00.186]<E>WIFI_SERVICE<aos-init> wifi get default m
odule failed.
TJan 01 08:00:00.1867<I>WIFI_SERVICE<aos-init>wifi_service_auto
_reconnect:2493 enable=0
Hello world!
Hello world!
Hello world!
打一个命令 panic,可直接处于 clash 状态,可看到接听器、PC 纸质、当前处于哪个 task 上、Regs、栈回溯信息。
(cli-uart)# pHello world!
anic
!!!!!!!!!! Exception !!!!!!!!!!
crash time :1970-01-01 08:00:09
current task : cli-uart
======coreID: 0=====
Exception Type: Undefined Instruction
kernel space exception
======Regs info=====
C 0x6052BC0C
R 0x605372E4
=====Call stack=====
backtrace:0x6052BC0C
backtrace:0x605372E0
backtrace: 0x605374C0
backtrace:0x60537DDC
backtrace : ^task entry^
信息目前是16进制显示,可通过 python 工具或 PC 端工具做解析,python 脚本做解析
hongye.jhy@localhost:/workspace/johnny/atos$ python./coredu
mp_parser.py log.txt ./out/alios_kernel@vexpressa9-mkkernel/bi
nary/alios_kernel@vexpressa9-mk.kernel.elf
解析后代出具体的函数名,比如 backtrace 在哪个函数里,上层调用是哪个。非常方便解决问题
backtrace: 0x6052BC0C
backtrace:0x6052BC0C
panic_trigger at/workspace/johnny/atos/kernel/core/debug/deb
ug_test.c:79
(inlined by)panic_trigger_stub at/workspace/johnny/atos/kernel/
core/debug/debug_test.c:81
backtrace: 0x605372E0
backtrace:0x605372E0
proc_onecmd at/workspace/johnny/atos/kernel/core/cli_console
/cli.c:191
backtrace:0x605374C0
backtrace:0x605374C0
cli_handle_input at/workspace/johnny/atos/kernel/core/cli_cons
ole/cli.c:333 (discriminator 3)
backtrace:0x60537DDC
backtrace:0x60537DDC
cli_main at/workspace/johnny/atos/kernel/core/cli_console/cl.c:
768
backtrace : ^task entry^
15、AliOS Things 适配的芯片
目前主流的芯片都已经适配,40多个芯片厂商,80-100款芯片都做了适配。适配好后,用户可直接使用,非常方便用户开发。
16、AliOS Things的工具
Aos-cube 构建工具,基于 AliOS Things 自有编译系统的自主构建工具。
支持常用 IDE,支持 KeilIAR 工程的自动生成,方便嵌入式开发。
图形化裁剪工具,包括图形化的配置工具,通过拖拽可配置组件、组件参数。
Alios-studio 图形化 IDE 插件,用户提供免费 IDE 支持,可查看代码、远程下载固件、调试、编译等多种实用功能。目前可颁布调试功能。
Core-dump 系统异常分析工具,方便用户在系统出现问题时快速回潮系统异常发生原因,精确到函数或代码行号级别。
工具一起为 OS 构建好的生态,用户使用非常方便。