查看原文
其他

是什么让AIoT开发更便捷?—TencentOS

汪礼超 云加社区 2022-06-14


导语 | 腾讯在物联网领域有着完整的生态链产品布局,其中,腾讯操作系统也是整个物联网生态链重要的一环。本文由腾讯云物联网专家工程师汪礼超在Techo TVP开发者峰会“「物」所不在,「联」动未来——从万物互联到万物智联”上的演讲《TencentOS让AIoT开发更便捷》整理而成,为大家分享了腾讯在物联网领域的两大操作系统产品架构和核心技术布局。


点击可观看精彩演讲视频


一、 TencentOS AIoT整体技术布局


自从温家宝总理在无锡提出了“感知中国”物联网整体战略,物联网在国内开始受到大家关注,但是经过十几年的时间,到2015、2016年物联网都没有得到明显的发展进程。为什么呢?是因为传统物联网发展会受到技术的瓶颈,特别是通信协议。前期,物联网主要是在智能家居领域得到了广泛应用,但是从2016年开始蜂窝物联网技术的快速发展,比如说NB-IoT、LoRa广域物联网技术的推出,导致物联网出现了庞大的业务发展。截止目前,权威的官方数据统计到2020年物联网产业市场份额到了1.8万亿。


在这样的背景下,腾讯也不断在物联网进行物联网布局。腾讯TencentOS的角色是什么样的战略?腾讯TencentOS希望通过技术开源、生态协同的方式做好腾讯IoT底层关键生态一环,希望通过操作系统的加持实现不同物联网终端的互联互通,为云侧做数据引流。如果物联网云平台缺少底层数据接入,那云上的数据模型、AI模型是没有用武之地的,操作系统在这底层主要是帮大家解决互联互通及数据收集的作用。同时希望通过操作系统的底层生态服务好AIoT生态链上的各客户差异化需求,共同推动物联网产业的发展。

 



二、 TencentOS Tiny产品及核心技术


TencentOS Tiny是腾讯针对物联网领域自研的物联网终端实时操作系统,内核是自研的RTOS内核。主要有三个特点:第一,操作系统内核是极致精简的RTOS内核,能实现超低资源占用第二,有高效的管理框架,能实现超低电能消耗第三,操作系统产品架构非常精简,各个模块从内核到组件到应用以及安全框架的支持都是模块化,学习跟入门成本非常低,大家可以基于简洁的架构快速完成终端嵌入式软件开发。



(一)极简内核


TencentOS Tiny操作系统内核包括多任务实时调度、IPC通信、内存管理、时间管理、异常处理等基础内核功能,同时会在RTOS内核上层提供行业通用的CMSIS、POSIX接口。在操作系统内核下层会对硬件进行一定的抽象,也就是说会提供标准的HAL层支持,统一操作系统对硬件的访问,同时操作系统内核也是可裁剪可配置的,可以根据不同的物联网业务需求裁剪操作系统的资源占用。



(二)AT通信模组框架


很多人疑问为什么要单独重点作为核心组件来做AT通信模组框架呢?据我们对行业的调查,2020年起国内物联网连接突破35亿,其中大部分IoT终端是基于无线通信模组完成,这也是很常见的现象。大家很少看到现在还有以太网直接插线的方式实现物联网终端的,除了少数的DTU网关或者DTU协议转化设备,大部分都是基于WI-FI、4G、Cat1、NB-IoT无线终端,无线通信模组产业发展在很大程度上促进了无线物联网终端发展。现在国内有很多知名的无线通信模组厂家,像移远通信、广和通等。腾讯为什么要做这个事情呢?因为行业存在普遍性的问题,模组厂家一多,每一个模组厂家提供的通用性能力不一样,提供的API、调用模组能力的接口也是不一样的。


如何让不同厂家的AT通信模组做到兼容,如何让AT命令处理统一起来,而且在产品供货过程中终端产品涉及到模组更换,更换成本如何降低?更换之后如何确保通信软件的稳定性,如何屏蔽复杂的处理?


针对这样的背景,操作系统内部合成了AT通信模组框架。它有什么优势?TencentOS Tiny提供的AT框架能够屏蔽不同模组之间的复杂通信逻辑,比如说通常情况下要通过微控制器MCU给通信模组发AT comment,回复不是同步的,如果你用串行逻辑去处理的话,效率非常低,你也不知道它对端回来的消息是什么样的,什么时候回来。基于操作系统异步的任务,可以基于多任务方式来处理模组回来的消息,这样复杂的逻辑就被屏蔽在操作系统内部组件里。往上会提供业务层的API,更换模组不需要修改终端的API代码。模组框架支持多模组同时驻网,比如说你的终端设备可能要同时支持WI-FI或者4G Cat 1,可以通过一个组件让两个网络同时在线,业务需要切换网络的时候只需要把默认网络切换掉就可以,这有点类似于服务器上的个人电脑,要从无线网切到有线网的方式是一样的,业务层的联网不会受影响。同时操作系统还会支持腾讯云定制固定API,这个模组里可以内置腾讯SDK(通用SDK),操作系统直接调用通用SDK的API实现快速上云,API数量更少,入云步骤更快。



为了解决不同厂商对接模组方面的问题,在操作系统层面建立了模组生态库,如果使用操作系统框架的话,生态里驱动的都是稳定可用的,经过自己长期的业务测试,开发者(特别是中小厂家)如果要做稳定性测试、驱动移植测试会需要很长的时间,基于生态库的长期迭代发展,可以拿回去直接用,工作就省掉了,能给大家节省很多的开发成本。基于这样的AT框架,现在已经支持的生态库里包括WI-FI、ES866、NB-IoT、LoRA、2G、4G、腾讯定制模组,总共超过20款,基本覆盖了主流的通信模组应用场景,往上可以支持标准SAL TCP API、LoRaWAN API、腾讯定制模组的API,可以以非常快速的方式接入腾讯物联网IoT平台。



(三)OTA升级


接下来再给大家介绍物联网智能操作系统经常涉及到的核心技术——OTA升级。会提供通用端侧OTA组件,在终端MCU、物联网芯片场景的资源非常少,在固件升级中要考虑怎么样减少固件升级所带来的资源占用问题,怎么样解决掉电之后的保护问题,如果固件升级比较大的情况下,怎么样确保传输过程中不出现问题?里面一系列的问题会对OTA升级提出更高的挑战。我们开发的OTA组件使用流程非常简单,用户在云端把设备创建之后,编译生成新的固件,导入到新的工具中,可以通过云端下发固件,触发升级,终端收到升级之后下载固件详细的解析,写入OTA temp区域,更新固件之后就进行跳转进行校验引导跳转可以直接实现升级过程了。升级里典型的特征是固件升级的组件支持两种方式全镜像和差分


全镜像相当于更新整个镜像,Boot起来之后直接把全新的镜像替换。差分是解决资源受限的情况,差分包会更小,同时在固件下载的过程中所占用的网络带宽也会更小,升级速度会更快。同时固件升级会提供完整的安全校验,包括断点续传,以及升级完成之后做固件的完整性校验,升级中途掉电如何保护现有的固件不受影响,如果升级的固件有问题怎么样做固件回滚。在云端OTA部署上也提供了差分升级制作工具包,用户可以直接把新老镜像导进去很快地做出差分的固件出来。所有差分升级的源码都是开源的,目前业界所有差分升级的方案都是商用闭源的,而我们是首次源代码开放,当然这里面也有一些功能不够到位,大家可以一起参与开源共建。



(四)低功耗


在TencentOS Tiny操作系统内核层面、外部管理框架层面做了功耗处理,在操作系统内核层面提供了多级低功耗管理Tickless管理框架。普通模式下是周期性的时钟,隔一段时间tick就会起来,系统就会一直运行,tick一起来,MCU就会消耗电能。怎么样让终端在idle状态下自动进入低功耗状态呢?使用非周期的方式Tickless的方式,也就是说物联网终端在不工作的时候直接停掉tick,等到需要唤醒的时候才把tick起来,大部分时候休眠的情况下可以把耗电的组件及内核核心功能关掉,功耗消耗会更低。



(五)物联网安全


操作系统做了完整的安全能力,密钥安全存储做了很多工作,会对设备ID、证书、私钥做处理,针对SE芯片的硬件支持也做了对应的支持,同时配合腾讯云物联网平台实现TID机制。


针对数据传输的安全,会兼容标准TLS和DTLS协议。对于认证也会集成标准的双向设备认证机制,在操作系统所有联网组件里都支持安全能力。同时物联网操作系统相关的安全组件符合《腾讯物联网安全技术规范》,能配合云端实现物联网端到端的安全保障。



(六)elfLoader


在物联网嵌入式终端开发领域,MCU资源受限,嵌入式程序通常会编译成一个完整的固件,操作系统内核跟应用并存。这样,做软件升级、应用修改、灵活部署的时候会遇到问题。动态加载能起到什么作用呢?相当于安卓安装一个APP,这个APP不想用了,把这个APP卸载掉装一个新的APP,嵌入式也可以实现同样的功能。可以把不同的应用编译成不同的bin文件,等我需要的时候再加载引导运行。实现这样的功能需要从编译角度、OS如何加载ELF文件角度做处理,TencentOSTiny提供了对elf文件格式进行加载并执行的组件。优势很简单,可以实现内核跟应用的分离,按需调用节省内存。比如你可能在业务的前一个时间周期需要使用它,用完了之后把内存释放出来再调用另一个,这样可以节省内存,同样可以实现多个APP共用同一套地址空间。使用起来比较简单,需要在应用编译的时候按一定的编译规则编程obj或者共享obj的文件,把文件再拷贝到存储介质,可以基于文件系统,也可以不基于文件系统,放在存储介质也是可以的。再调用elfloader接口把相应的文件load进来就可以了,最后再调用查找符号表,去执行函数就可以了。整个运行完了不需要它了再调用相应的卸载接口,实现动态加载业务APP的能力。



三、 TencentOS Edge产品及核心技术能力


TencentOS Edge是腾讯基于Linux内核定制的针对边缘网关和边缘计算终端的自研发行版操作系统。它现在的主要能力会提供边缘容器、AIoT、媒体引擎、网关协议互转组件,以及相关的IoT服务。主要是方便物联网网关及边缘计算的盒子能够快速接入腾讯云物联网平台。


TencentOS Edge是原生支持了腾讯云及腾讯行业应用,集成了腾讯内部TencentOS server(Tinux)版同源内核安全加固,内核版本在腾讯几百万服务器已经运行了十几年的时间,非常稳定可靠的。会集成原有的腾讯运营服务,共享在服务器领域的运营服务。TencentOS Edge操作系统支持多平台,而且支持裁剪快速移植的极小系统,针对边缘场景做针对性的资源裁剪优化。大家不用担心基于Linux版本资源会不会占用非常多,TencentOS Edge相比于TencentOS Tiny,定位就是针对资源丰富的边缘计算平台,并不意味着可裁剪性差、资源占用就一定高。TencentOS Edge也支持定制裁剪。同时,用户组件可以支持定制化,根据业务的需求可以做定制。同时在UI界面也会支持常用的QT等UI组件。



目前TencentOS Edge支持的硬件平台主要分为两大类:一大类是性能比较低的网关级平台,比如说常用的MPU。另一类是高性能边缘计算,比如说支持X86边缘计算盒子。在边缘主控的平台上,会增加对主流外置AI卡的支持,目前支持腾讯自研的AI芯片,还有寒武纪、Intel、英伟达、高通的AI芯片。UI上针对网关和边缘计算提供了不同的UI,还有腾讯自研的GUI界面供边缘网络盒子可以使用。


接下来再介绍一下TencentOS Edge里的网关协议互转组件,这个组件端到端和TencentOS Tiny形成了闭环整体解决方案。TencentOS Tiny上有很多非直联设备,通过工业总线、蓝牙Zigbee网关,TencentOS Tiny管的是节点通信。TencentOS Edge会做网关协议的处理,会涉及到多种协议的互转,有可能你中转节点涉及到蓝牙,到网关之后要通过标准的MQTT协议传出去,需要有组件来做协议的翻译,有翻译大师,告诉你数据怎么传,网关协议互转组件就解决这个问题。用的最多的还是总线协议(工业协议)的互转,在这个层面会配合腾讯云标准的SDK做转化,可以方便地将工业总线数据通过组件转成腾讯云平台可以方便接入的数据。目前主要是总线协议、蓝牙Zigbee、WI-FI、LoRa。针对不同的协议转换,会提供不同的模板配置工具,大家可以针对配置工具自动生成协议互转的代码,减少开发工作量。


接下来讲一下TencentOS Edge在安全领域的研究,Edge层面完成了从Romcode—boot—kernel—rootfs—Application的全链安全信任链。采用了很多跟芯片结合的,比如说ARM上的TEE,IntelSGX的安全芯片能力结合,完成了对密钥安全存储、数据安全可靠的保障,同时网络层面对网络流量也会进行加密传输,内核层面经过公司科恩实验室安全加固,网络服务采用蜜罐保驾护航。TencentOS Edge边缘容器,配合腾讯云IECP边缘服务开发了组件,云端会实现边缘容器服务管理平台对容器进行管理。边缘侧做了什么工作呢?主要将云端的原生能力边缘化,主要提供了边缘容器管理框架Tinykube,通过标准的K8S接口完成相应的调用。基于Tinykube的容器组件,可以将常用的网络协议组件、多媒体组件、人脸识别应用进行容器化。容器化之后就方便在不同的平台进行快速部署。


也可以基于容器化部署跟底层终端操作系统完成匹配,比如终端节点协议传来的数据也可以进入到容器化管理,在整体部署上实现联动机制。目前TencentOS Edge在AI领域做了广泛的支持,TencentOS Edge在内核层默认会集成厂商的原厂驱动,经过长时间稳定性测试及压力测试,目前支持的AI平台包括Intel 的Movidius、寒武纪思元220、英伟达、高通、地平性的AI芯片,也会继续支持更多的加速卡,同时腾讯内部也做了AI芯片的研究,操作系统也在做同步支持。实际的应用场景,搭载了TencentOSEdge腾讯自研边缘计算盒子,是基于X86的架构,支持了边缘AJI算力卡,还支持5G、WI-FI网关、LoRa网关,成本相对偏高,为了会继续在低功耗和低成本领域做进一步探索,也会有ARM版本自研的边缘计算盒子。



四、 TencentOS 开发者生态


值得一提的是,TencentOS Tiny早在2019年9月份就已对外开源,到目前为止已经获得了广泛的开源影响力,当时发布的时候一周上了全球Github热榜的第二名,目前的star数量5100+,fork数量1300+,远超行业竞品。也有非常多的外部开发者,包括微信群、QQ群、社区开发者累计超过4000+。在硬件支持上,支持了主流物联网MCU,包括主流的STM32、NXP、瑞兴恒方LoRa等,腾讯出品了五款官方定制套件。



在芯片领域物联网市场占有率非常高的MCU厂商基本都覆盖了,通信模组领域也有非常多的合作伙伴,还有终端项目的合作伙伴,在腾讯内部的iGrow 智慧农业有广泛应用,前段时间被央视重点报道了,微信支付终端也有落地场景,包括腾讯微瓴智慧建筑、QQ family及外部充电桩合作伙伴。

 

接下来讲一下第三方开发者的贡献,TencentOS Tiny作为开源项目,有非常多的外部开发者参与,希望对此感兴趣的开发者也可以往社区贡献相关的代码及项目的创意。每年为了支持开发者也做了非常多的线上及线下活动,从2019年7月的全网公测,到2021年做腾讯的校园培训计划,前前后后已经有十几次的线上线下开发活动,过程中涌现了非常多的开发者优秀作品,比如说比较有意思的作品,像撸猫的用TencentOS技术做了撸猫方案,屏显方案、甲醛监测、智能浇水方案等。针对开发者在持续探索,希望给开发者贡献更多技术开发能力,官方出了很多解决方案:


TencentOS Tiny提供了LoRa OpenCPU的方案,和意法半导体、瑞兴恒方联合发布的产品。外面的展台大气微环境监测系统就有应用到LoRa开发平台。希望基于这样的成熟可参考方案,提供开发者做出更多的相关行业技术。未来希望继续拓展到AI领域,在端侧AI也有一些应用场景,比如说低成本人脸识别、低成本语音唤醒,在MCU场景也会有一些机会,接下来我们会推出全新出AIoT的评估版,评估版可以做更多的端侧AIoT探索,核心主控升级到NXP的跨界MCURT1062,会支持最高500万的摄像头,支持音频输入能力。



相信基于这样的开发平台发布出去,会有更多的开发者能够做出更多有创意的物联网方案和产品。这是开发者联合ARM和Google开发的MCU边缘AI应用原型,在某一个节点上使用TencentOS Tiny以及ARM CPU能力,做了行人检测的案例,是非常创客的,虽然比较简陋,但是软件栈和领域的探索非常完整,这是开发者能动性的体现,希望未来有更多的开发者基于我们的操作系统做更多的探索。


TencentOS Edge边缘AI应用,在腾讯智慧行业有广泛应用,基于TencentOS Edge主要提供边缘容器跟视频编解码,在这个领域会把监控摄像头实时采到的数据做边缘处理,结合业务需求把相关数据传到云端做综合推理。现在在智慧水务的场景中,它的检测是有一些难题的,河流水位在很长一段时间是不变化的,很难采到有效的样本。针对这种情况结合TencentOS Edge以及对边缘的处理能力,解决了河流水流反光、波动波,识别到比较准确的水位数据,水位识别精度能达到1厘米,现在的吞吐量在18.7fps,并且数据在持续优化。目前基于TencentOS Edge的边缘应用已经在两个省水利厅进行试点,接下来将进行进一步的部署。


TencentOS Edge目前是内部在商用,还是希望能够贡献给更多的开发者,大家一起支持整个行业的发展。计划在今年Q4到明年Q1期间把TencentOSEdge发行版全面开源,支持到多种弹性平台,比如说ARM、X86、网关平台,同时会提供边缘容器灵活部署,逐渐实现云-边-端一体化的应用分发、运维管控,支持更多的安全容器方案。同时会提供自研UI,新增界面,包括键盘鼠标的主题,致力于简化边缘操作系统的安装过程。



 讲者简介


汪礼超

腾讯物联网专家工程师

腾讯物联网专家工程师,负责TencentOSTiny/Edge项目规划和架构设计。



 推荐阅读


超专业解析!10分钟带你搞懂Linux中直接I/O原理

碳中和的入口与出口,数字化建设该如何完成?

基于Protobuf共享字段的分包和透传零拷贝技术,你了解吗?

深度解读!新一代大数据引擎Flink厉害在哪?(附实现原理细节)




👆点击视频号观看峰会精彩瞬间



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存