前言
2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。
ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。
今天分享第52篇技术报告,由王中甲整理,题目为:
“Zephyr中的POSIX支持”
作者简介
Alexey Brodkin是Synopsys(新思科技)的高级工程师,从事与ARC处理器相关软件的开发工作。他加入Zephyr社区已经5年了,并在Synopsys负责与Zephyr相关的工作,同时也是一名Zephyr大使。
文章简介
本文介绍了Zephyr中提供的POSIX支持。Zephyr Project是一个开源的实时操作系统(RTOS)项目,旨在为嵌入式设备提供高度灵活可靠的操作。POSIX,可移植操作系统接口,则是一套定义了操作系统接口的标准。文中探讨了Zephyr RTOS中的POSIX支持,包括它提供的POSIX API和功能。开发人员可以利用POSIX标准中定义的许多常见功能和工具来开发应用程序。这些功能包括线程管理、进程间通信、文件系统访问等等。文中还介绍了两个POSIX支持的实际用例。这些用例将展示如何利用Zephyr RTOS的POSIX功能来开发各种应用程序。通过本文,读者将了解Zephyr Project在嵌入式设备开发中的重要性,以及如何利用其POSIX支持来提高开发效率和应用程序的可移植性。
Zephyr中POSIX支持
Zephyr RTOS介绍
特点概述:
Zephyr是一个基于内核的实时操作系统(RTOS),具有模块化的架构:
硬件抽象层(Hardware Abstraction Layer,HAL):HAL层提供了对硬件的抽象接口,使得应用程序可以与硬件进行交互,而不需要了解硬件的具体细节。它包括对处理器、外设、传感器等硬件的抽象和驱动程序。
底层接口(Low-level API):架构层(包括电源管理、中断处理、故障管理和缓存管理)、内核(负责处理任务调度、中断处理、内存管理、设备驱动程序等关键功能)、底层操作系统服务(zephyr提供了一系列底层功能和服务,用于支持实时操作系统的基本操作和功能)。
上层接口(High-level API):设备与其他设备、网络和云服务进行通信和交互。网络连接(Wi-Fi、以太网和蓝牙等)、低功耗连接(BLE、Zigbee等)和IoT协议支持。
POSIX介绍
POSIX(Portable Operating System Interface)是一个可移植操作系统接口的标准。它是IEEE Std 1003.1标准,最初只用于UNIX系统。POSIX定义了一系列应用程序编程接口(API),用于在源代码级别实现可移植性。POSIX最早发布于1988年,最新版本于2018年发布。它提供了一种标准化的应用程序环境配置文件(AEP),用于实现实时和嵌入式应用程序的支持。通过遵循POSIX标准,开发人员可以编写与POSIX兼容的源代码,从而实现在不同的操作系统和平台上的可移植性。这使得开发人员能够更轻松地将应用程序从一个操作系统移植到另一个操作系统,而无需对源代码进行较大的修改。
在嵌入式系统中,POSIX标准提供了许多便利:
可移植的跨平台库
同一应用程序在多个平台上运行
操作系统/执行环境独立性
POSIX.13对实时和嵌入式应用程序的支持:IEEE Std 1003.13-2003是一个针对实时系统的标准,提供了对嵌入式应用程序的支持。该标准定义了几个实时系统配置文件,分别为PSE51、PSE52、PSE53和PSE54。
PSE51:最小实时配置文件(Minimal real-time)适用于资源受限的嵌入式系统。它提供了最基本的实时功能,包括任务调度、中断处理和简单的同步机制。
PSE52:实时控制器配置文件(Realtime controller)适用于需要严格的实时控制的系统。它提供了精确的任务调度、硬实时响应和实时数据处理能力。
PSE53:专用实时配置文件(Dedicated real-time)适用于需要高度可预测性和可靠性的实时系统。它提供了更强大的实时功能,包括任务优先级管理、严格的时间限制和实时资源管理。
PSE54:多用途实时配置文件(Multi-purpose real-time)适用于需要同时支持多种实时应用的系统。它提供了灵活的任务调度、多任务并发和多种实时通信机制。
Zephyr RTOS中的POSIX支持
支持C语言特性:abs(), calloc(), free()等
支持线程的基本特性:pthread_attr(),pthread_cancel(), pthread_create(), pthread_detatch(), pthread_cond(), pthread_mutex_()等。
信号:abort()等。
设备IO支持:fprintf(), fputc(), fputs(), fwrite(), open(), perror(), printf(), putc(), puts(),read(), vfprintf(), vprintf()等。
与传统 POSIX 的限制和区别:
支持POSIX的Zephyr RTOS实例
嵌入式实例:Civet Web
Civet Web主要用C语言编写并使用:
第三方应用程序:EEMBC CoreMark Pro
EEMBC CoreMark Pro是一款第三方应用程序,它是由嵌入式微处理器性能评估联盟(EEMBC)开发的。它是一种基准测试工具,用于评估嵌入式系统的性能。
POSIX 兼容应用程序移植到 Zephyr RTOS的步骤:
CMakeLists.txt:
prj.conf:
预填充 argc & argv[]:
执行核心测试:west build -b qemu_arc_hs core -t run:
总结
自2017年以来,Zephyr团队一直在持续开发和改进Zephyr操作系统的POSIX支持。这项工作是根据实际应用程序的需求进行的,目标是提供足够多的POSIX功能,使应用程序能够在Zephyr上运行。Zephyr中的POSIX兼容层已经具备了很多功能,可以执行许多与POSIX标准相关的操作。这包括线程、进程、文件系统、信号处理等。通过使用POSIX接口,开发人员可以更轻松地将现有的POSIX应用程序移植到Zephyr平台上。然而,POSIX也存在一些缺点。首先,POSIX标准涵盖了广泛的功能,但并不是所有功能都适用于嵌入式系统。因此,在嵌入式环境中使用POSIX可能会导致一些不必要的资源消耗。其次,POSIX接口可能不够高效,特别是对于某些实时要求较高的应用程序。