如何加速物联网操作系统开发?Zephyr项目引入JavaScript这样做到的
FlorineDbi
8年前
<p>据统计软件工程师的数量远远大于硬件工程师,而物联网设备需要软件和硬件的高度融合才能实现良好的用户体验。原来只针对硬件工程师的开发环境已经无法满足物联网产品快速开发的需求,因此将web开发环境与物联网操作系统逐步融合成为物联网操作系统提供商首要考虑的问题。为了兼顾物联网设备内存限制的问题和开发者的设计需要,Zephyr操作系统引入了JavaScript。</p> <p>众所周知,JavaScript是一款非常流行的编程语言,目前它已经从最早的桌面web浏览器快速发展到Node.js服务器,它也可以应用于物联网这种小型设备,让设备装上带有JavaScript Runtime的Zephyr实时操作系统(以下称为ZJS开发环境)。ZJS开发环境是基于JerryScript(一个轻量级的JavaScript引擎)和Zephyr实时操作系统开发的。当用户使用该工具编写应用程序时,ZJS开发环境可以向工程师提供Node.js API和JavaScript API子集,其中包括传感器、执行器和通信器。对于那些已经掌握JavaScript技能的开发人员,ZJS开发环境简单易学,可以快速建立原型。</p> <p>ZJS开发环境最初的目标是可以顺畅无阻地在Arduino 101开发板上运行。Arduino 101是基于英特尔X86架构的一款Arduino平台。与Arduino Uno功能相似,在原有的基础上增加了低功耗蓝牙、加速度计和陀螺仪。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/25d9b37b4bc910add3fa4e5d50a54193.png"></p> <p>图1:Arduino 101开发板</p> <p>英特尔让Zephyr结缘JavaScriptZephyr项目是Linux基金会推出的一款开源实时操作系统,它在一系列开发板上支持X86架构、ARM架构和ARC架构处理器,如:Arduino 101、Minnowboard Turbot, NXP FRDM-K64F和Arduino Due。JerryScript是开源的、轻量级的JavaScript引擎,它可以让内存受限的设备执行ECMAScript 5,它支持存储空间小于64KB RAM和200KB ROM的设备,它还在各种开发板上支持X86架构和ARM架构处理器。</p> <p>2016年初,英特尔开始将两种技术结合,试图利用Zephyr操作系统推出一种可以应用于Arduino 101和未来物联网开发板的可替代开发环境,因此将JavaScript引入了Zephyr。目前,Zephyr操作系统可用C语言编程,但是编写程序需要大量的专业知识储备,而JavaScript接口可以让工程师免去大量复杂的编程工作。Zephyr目前也在探索JavaScript在各个层面上的优势,从小型嵌入式设备到大型服务器,从原型到无缝的端到端应用程序。</p> <p>结合以后的开发环境最后定名为带有JavaScript的Zephyr实时操作系统(ZJS开发环境),并且向工程师提供JerryScript开发环境,用户只要添加应用接口就可以实现各种物联网硬件特性,通过工具可以简化开发工作。</p> <p>各种应用可单独执行,占用空间最小化当用户建立一个Zephyr操作系统工程时,用户会先创建一个完整的系统镜像,通过操作系统组件运行单一应用程序,这些组件就是用户在实际中使用的,它可以使系统镜像占用空间最小化。Zephyr操作系统支持执行线程服务、定时器服务、内存管理、同步和数据传输服务,其中每一项都可以选择独立执行,这取决于用户是否需要这项服务。它还为其支持的芯片和板卡提供硬件驱动,如GPIO、ADC、PWM、I2C、SPI总线、UART和低功耗蓝牙。同样,这些硬件驱动也可以独立执行,从而使系统镜像占用的ROM 和RAM 最小。</p> <p>通过对来自JavaScript的代码做简单的数据分析,ZJS可以利用Zephyr操作系统的可配置性建立工程。例如:如果GPIO接口被采用,所需要的驱动程序和相关的ZJS应用代码将会包含到项目中,反之亦然;如果你的项目涉及到所有的驱动程序,那么得到的系统镜像会很大,因此不适用于小型设备,如:添加低功耗蓝牙目前会用到额外的7.2KB RAM和56KB ROM。如果你很在乎系统镜像的尺寸,但必要时也可以限制额外的应用,那么你就可以对尺寸和项目占用空间进行协调平衡。</p> <p>目前,ZJS可以为GPIO,ADC,PWM,I2C,BLE提供应用程序接口,并且可以为带有RGB背光的LCD面板提供简化接口,也支持setInterval/setTimeout 简化的执行子集。另外,ZJS支持物联网开放连接基金会(OCF)规范互操作性,包含相同的JavaScript API,例如在Node.js中提供Iotivity-node模块。未来会支持SPI接口,W3C通用传感器API,以及其它Node.js API开发。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/36a454844ee4b5bfb415f255b9838eeb.png"></p> <p>图2:Arduino 101 开发板上的基于Zephyr 项目的JavaScript实时架构</p> <p>以Arduino 101 开发板为例,英特尔Quark ™ SE处理器在Arduino 101开发板上有两个MCU核:一个是X86架构,一个是ARC架构。要使这两个核的硬件得到充分利用,C语言程序员必须直接做处理。幸运的是,ZJS API可以利用来自JavaScript相同的内容使ARC硬件特性得以实现。在必要时,ZJS API可以无缝地与ARC核心上运行的支持ZJS的image通信。(见图2)</p> <p>Arduino 101包含80KB RAM和384KB 闪存。默认情况下,闪存分配144KB给X86应用,分配152KB给ARC应用。ZJS需要在ARC中将代码最小化,这有利于重新分区,从而给X86应用预留更多存储空间。Zephyr工程师为Arduino固件开发了一个补丁,它可以使用户把程序从144KB的 X86区块迁移到256KB的ARC区块,处理完成然后再迁移回来。这种模式不仅为ZJS提供了足够的运行空间,而且它还提供二进制刷机包,让用户改变或恢复存储更简单。</p> <p>权衡利弊,用户各取所需将JavaScript应用于小型嵌入式设备的优势如下:</p> <ul> <li>很多工程师已经熟悉JavaScript,这意味着它们利用ZJS开发环境进行设计更简单;</li> <li>JavaScript 使用户可以在不同的环境下编程,如PC、云端、移动端和物联网设备上,这些代码可以重用,从而提高工作效率;</li> <li>工程师在这些系统之间使用通用数据交换格式JSON的潜力,这将减少寄送各种开发板的成本;</li> <li>JavaScript也可以在浏览器中打开,更容易进行器件仿真。<br> 对于任何解释语言来说都一样,从做出改变到看到改变的周期很短,JavaScript也是如此。诚然,最初这一优势会因为我们的系统无法体现,因为工程师需要编译Zephyr操作系统,并将其更新到设备上。但我们可以使用 ashell 功能来回收一些这样的好处,这是一个不安全的开发者模式,允许您与设备交互并上传新的 JavaScript 而不重刷。<br> Zephyr计划向工程师提供基于浏览器的IDE,这样工程师就可以在浏览器上通过仿真器进行开发。<br> 然而,在小型资源受限设备中使用JavaScript也有弊端:<br> 占用额外资源。通常本地代码会更快更小,因为JavaScript引擎会消耗一部分系统RAM和ROM,因此在资源严重受限的设备上就减少了留给应用程序的存储空间。例如,工程师熟悉的最小的helloworld.js示例需要大约133KB ROM。大一点的WebBluetooth示例需要199KB ROM和42KB RAM。对比发现,相同的WebBluetooth示例通过C语言完成只需要65KB ROM和18KB RAM(JavaScript包含一个大的头文件,但未必会全都用到)。</li> </ul> <p>处理中断程序复杂。C程序会处理一些简单的中断程序,在这种情况下两者性能差异也十分显著。JavaScript中执行这一逻辑时,待处理事件必须在队列中排队(相当于Zephyr操作系统的进程内容),内容交换后,再回调到JavaScript引擎,最后让本地API工作。</p> <p>JavaScript实时性能不确定。例如,垃圾信息收集可以在正常的活动脉冲中引入停顿。因此,JavaScript可能不适合有严格的实时要求的应用程序,但它非常适用于普通的应用程序。然而,随着Zephyr项目的逐步成熟这类问题会减少。</p> <p>总之,引入JavaScript的Zephyr操作系统系统有利有弊,用户可以根据自身设计需求选择使用,发挥其优势作用,加快项目开发。未来的ZJS会越来越完善,更大程度地满足用户需求。</p> <p>关于Zephyr项目Zephyr 项目是一款小型且可扩展的操作系统,尤其适用于资源受限的系统,可支持多种架构;该系统高度开源,对于开发人员社区完全开放,开发人员可根据需要对该系统进行二次开发,以支持最新硬件、工具和设备驱动程序;该系统高度模块化平台,可轻松集成任何架构的第三方库和嵌入式设备。</p> <p> </p> <p>来自:http://geek.csdn.net/news/detail/133848</p> <p> </p>