Zephyr近期的变更,为LTS版本做准备

Zephyr近期的变更,为LTS版本做准备
2018年06月06日 15:37 笨笨小虎队

新的一周来临,开发者们是否发现了Zephyr的更新呢?关注Zephyr的工程师们一定看到了这两个重要变更:

• e15a4923 ci: 清理ccache时清理功能缓存;

• e7509c17 release: 将版本移至1.12.0-rc1;

下面我们就具体讲一讲Zephyr的更新进展。在5月21日发布功能冻结之前以及v1.12.0-rc1添加标签之前,有300多个补丁合并(如果你不熟悉Zephyr的发布流程,有关这些术语的更多详细信息,请参照wiki上的Development-Model页面)。

v1.12最初是第一个长期支持版本LTS的候选。然而,第一个LTS的发布由于各种原因被推迟了,包括正在进行的工作:

网络堆栈的架构更新;

设备驱动API稳定;

迁移所有开发板以便使用设备树(Device Tree);

除了在Zephyr的GitHub问题中使用LTS标签追踪其它问题外,同时安排了一个在线会议以便进一步检查和讨论最终LTS版本需要的内容;详情在接下来一两天内将发布。

一些线上时间表已经可用,比如:在issue 7591中可以追踪的网络架构的更新,将作为v1.14中的主要新功能来完成:

(Source: Zephyr Networking Status May 2018, a presentation given to Zephyr’s Technical Steering Committee by Andrei Laperie of Intel).

重要更改

OpenAMP:

合并OpenAMP(以及其libmetal依赖)以启用基于信息的跨核通讯。这包含BSD-3-Clause和BSD-2-Clause许可证。在samples/subsys/openamp中有使用示例。

新的Zephyr SDK:

Zephyr SDK v0.9.3版本已经发布。Linux用户可以使用更新的安装指令进行升级。

无效存储(NVS):

长期运行推送请求为添加新的持久性数据的存储机制已经合并。新的非易失性存储器子系统可替代现有的FAT和NFFS文件系统,以及从MyNewt RTOS移植到Zephyr的闪存循环缓存(FCB)。

更多细节,请参照NVS子系统文档。

这似乎与前一期新闻中讨论的存储API更新匹配良好,后者引入了对存储后端的更多摘要。

k_call_stacks_analyze()弃用:

k_call_stacks_analyze() API被弃用。建议用户切换到使用k_thread_foreach(),可能需要重新实现或者为每个线程的转储例程(dumping routine)调用一个堆栈用例。

用户空间改变

大量与用户空间相关的功能和优化被合并。新的API被合并用于来自特殊存储池的存储管理。主要功能是k_mem_pool_malloc() 和 k_mem_pool_free()。这通常允许来自用户空间的内核对象的动态分配。

当一个对象失去所有的权限时,现在可以调用基于每个内核对象类型定义的清理函数。针对动态分配用户空间对象,这被用作自动化资源释放的框架。

新的API针对用户空间分配添加,释放各种类型的内核对象:

• 对管道:k_pipe_alloc_init()/k_pipe_cleanup()

• 对消息队列:k_msgq_alloc_init()/k_msgq_cleanup()

• 对堆栈对象:k_stack_alloc_init()/k_stack_cleanup()

用于允许用户空间访问队列的其它API,包括: k_queue_alloc_append()/k_queue_alloc_prepend()

• k_fifo_alloc_put()

• k_lifo_alloc_put()

k_poll Polling API现在也可以从用户模式访问。

当你在arch/下定义的翻译单元中调用来自特权代码的系统调用时,优化被合并,这避免了执行user/supervisor边界检查。

从用户空间访问k_object_access_revoke()已经被撤销,从而关闭了一个漏洞,一个线程不适当地撤销另一个对内核对象的访问。用户空间线程可以使用k_object_release()撤销访问他们自己的对象。

TCP TIME_WAIT配置变更:

在连接关闭期间,配置Zephyr TCP堆栈在TIME_WAIT状态中维持的时间长度,现在通过单个CONFIG_NET_TCP_TIME_WAIT_DELAY选项进行管理。这替代了以前的CONFIG_NET_TCP_TIME_WAIT和CONFIG_NET_TCP_2MSL_TIME选项,使用旧选项的应用程序需要升级。

特征

架构

仍然支持Arm v8-M内核,支持在Cortex-M23中的安全故障处理,以及其它内存访问权限检查的幕后工作。

Arm的目标中有一个新的CONFIG_PLATFORM_SPECIFIC_INIT可用。启用后,用户必须提供一个_PlatformInit例程,该例程启动之前会在其它任何事情发生之前被调用。

增加使Zephyr图像运行在一个基于NXP LPC的 SoC上的支持,以启动从Cortext M0+内核(为从属内核添加板卡支持,作为lpcxpresso54114_m0)。

蓝牙

Mesh外壳现在支持最近合并的持久性存储机制。

设备树和驱动程序

Zephyr现在支持汽车控制器局域网(CAN)协议,该协议在include/can.h中被指定。新的API是用户空间感知的。为基于QMSI (Intel Quark)的设备添加了GPIO绑定,为quark_se_c1000_ss添加了节点。

为RTC以及基于RTCs的NXP Kinetis和QMSI添加设备树绑定。为KW41Z和quark_se_c1000_ss添加SoC支持。

为mimxrt1050_evk和lpcxpresso54114将LED和按钮定义迁移到设备树的补丁合并工作还在继续。对argonkey开发板上传感器的设备树支持也进行了合并,同时还进行了em_starterkit 设备树优化,以及LSM6DSL传感器和Kinetis看门狗绑定。NXP MCU 设备增加了使用了新的稳定的看门狗API的驱动程序,为K64 and KW2XD提供SoC支持。

为NXP Kinetis SoC增加了USBD (USB device)和USBFSOTG (USB full-speed On-the-Go)支持。STMicro nucleo_f413zh也启用USB支持。

对WINC 1500网络控制器的WiFi支持合并。该芯片可用于通过SPI添加网络。这是在v1.12开发周期合并的新WiFi API的第一个用户。使用CONFIG_WIFI_WINC1500的支持已经启用。

为ILI9340显示增加了一个驱动程序。

外部库

OpenThread 库版本碰到db4759cc,以吸引一些错误匹配。

Atmel WINC1500 驱动程序已经合并为该芯片上启用WiFi的一部分。这是一个BSD-3-Clause许可HAL。

内核

在一个非常重要但是希望大部分是幕后的变化,调度程序被重写了。

新的k_thread_foreach() API已经合并,它允许线程迭代。这需要启用CONFIG_THREAD_MONITOR。现有线程的创建和终止在例程执行时通过irq_lock()进行阻止。

现在,include / misc / rb.h中的红黑树实现具有RB_FOR_EACH()和RB_FOR_EACH_CONTAINER()宏,用于遍历红黑树节点和包含它们的结构。

POSIX兼容层具有其他文件系统支持API。引入POSIX头文件定义了将POSIX名称适当映射到Zephyr特定文件系统API的宏。包括对open()、read()、write()、close()和friends等基本系统调用的支持,并且还允许如rename()、stat()和mkdir()之类的目录操作。更多信息,请参照include / posix中的标题。

现在还支持POSIX互斥APIs。

Miscellaneous:

为单链接列表类型添加了新的API,该类型允许在每个节点中存储两个标志,其通过依赖4字节指针对齐。详细信息请参照include/misc/sflist.h。

网络

LWM2M子系统现在支持将资源标记为可选项。如此标记的任何资源都不会由核心LWM2M子系统初始化; 应用程序必须使用lwm2m_engine_set_res_data()和lwm2m_engine_get_res_data()来初始化。这也允许LWM2M服务器通过CREATE操作对这些资源进行远程管理。它还使未来的工作在BOOTSTRAP操作遇到可选资源时表现不同。作为这些更改的一部分,整个LWM2M内核和支持的IPSO对象中的各种对象资源都被标记为可选。

802.15.4子系统现在支持资源地址过滤,以及当OpenThread在使用时执行能量检查扫描。

示例

新示例包括:

•RPL边界路由器应用程序:samples / net / rpl_border_router

•WiFi外壳示例:samples / net / wifi

•OpenAMP使用示例:samples / subsys / openamp

•MCUX IPM邮箱示例:samples / subsys / ipc / ipm_mcux

•96Board ArgonKey示例:samples/boards/96b_argonkey

•CAN示例:samples/can,在stm32f072b_disco上进行测试

脚本

Flash、调试和调试服务器处理程序现在使用一个名为“west”的新元工具。这仍然是一个幕后的变化; 预计在v1.12发布之前的进一步工作将为该工具添加文档。

测试:

为Zephyr的测试案例添加描述、清理和其他改进,以继续在更高级别的测试管理系统中使用它们。

Bug修复

大量驱动程序清理和错误修复进入,影响到各种设备。作为v8-M的一部分工作,各种Arm特定的修补程序进入。

新的CONFIG_BT_MESH_IVU_DIVIDER进入,它解决了重新初始化初始向量的相关问题。各种其它蓝牙清理和修复都进入其中,包括移除已经弃用的API和未使用的变量以及文档修复。

许多修复和附加的Doxygen描述进入了测试示例。网络修复包括用于TLS警告的网络应用修复,源IPv4地址选择,禁用TCP的构建修复,以及字节顺序处理; 以太网MAC地址设置; LWM2M端口处理修复; 丢弃无效数据包;和几个ICMPv6修复程序。样本中添加了各种构建修复,错误处理和Kconfig依赖关系管理改进,k_call_stacks_analyze()删除等。

欢迎开发者们来社区进行功能完善,Zephyr在不断更新,我们也会将这些更新及时反馈给开发者,以便于大家进行产品开发。

关于Zephyr

Zephyr 项目是一款小型且可扩展的操作系统,尤其适用于资源受限的硬件系统,可支持多种架构;该系统高度开源,对于开发人员社区完全开放,开发人员可根据需要对该系统进行二次开发,以支持最新硬件、工具和设备驱动程序;该系统高度模块化平台,可轻松集成任何架构的第三方库和嵌入式设备。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部