前言
2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。
ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。
今天分享第46篇技术报告,由文俊杰整理,题目为:
“Zephyr的POSIX路线图LTSv3”
作者简介

Christopher Friedt是一个富有创造力的团队负责人。在他超过18年的职业生涯中,他已经发布了7款被全球数以百万计的消费者使用的移动电话,发布了数以万计的工业无线设备,并带领4家领先的加拿大科技公司完成了重要的软件重构过程。他是许多开源软件项目的重要贡献者,包括Linux内核和Zephyr实时操作系统。他喜欢在会议上发表关于从虚拟机到软件定义无线电的主题演讲。Chris目前的兴趣在于实时操作系统和推动无线物联网可能性的边界。Chris在Zephyr社区的角色包括LTSv2发布管理者,POSIX&FPGA维护者,并在其他多个领域担任合作者。Chris被列入Zephyr 2020年度十大社区贡献者。
Meta∞如何使用Zephyr?

Meta可扩展视频处理器(MSVP)
为什么需要视频转码ASICs?
Facebook每天处理4亿份视频
功耗、存储、性能
H264的吞吐量提高了9倍
VP9的吞吐量提高了50倍
高质量点播(HQ VOD)的性能提高了6倍
功耗降低了50%
AV1即将推出...

Meta训练和推断加速器(MTIA)
为什么需要人工智能ASICs?
数据流、广告、内容、排名...
DLRM模型:4.5GB到750GB
功耗、存储、性能
比今天的GPU效率提高了2倍
PyTorch 2.0
MTIA@ISCA 2023
Zephyr中POSIX的概述
The Way Back Machine(互联网档案馆)

Zephyr中POSIX的历史

为什么选择POSIX?
可移植性
成熟的API
为10亿设备提供支持
为20亿设备提供支持
为160亿移动设备提供支持
提高可维护性
改善应用程序/libc/工具链接口
提高应用程序/库的可移植性

接口:
用于支持POSIX的任何库代码应该是:
- Zephyr本身的一部分
- 尽可能小以支持接口
必须记住避免分层违规

参考:IEEE 1003.1-2017
PSE51:最小的实时系统配置文件
_POSIX_C_LANG_JUMP, _POSIX_SIGNALS, _POSIX_SINGLE_PROCESS,
_POSIX_THREADS_BASE, _POSIX_CLOCK_SELECTION, _POSIX_FSYNC,
_POSIX_MEMLOCK, _POSIX_MEMLOCK_RANGE, _POSIX_REALTIME_SIGNALS,
_POSIX_SHARED_MEMORY_OBJECTS, _POSIX_SYNCHRONIZED_IO, _POSIX_CPUTIME,
_POSIX_THREAD_PRIO_INHERIT, _POSIX_THREAD_PRIO_PROTECT, _POSIX_TIMEOUTS,
_POSIX_TIMERS
POSIX_DEVICE_IO文件操作,scanf(),vscanf()
POSIX_SINGLE_PROCESS confstr(),*env()
_POSIX_SPORADIC_SERVER(内核?)

可移植性:PSE51_POSIX_SINGLE_PROCESS
sigaction()?, sigaddset(), sigdelset(), sigemptyset(), sigfillset(), sigismember(), sigpending()
alarm(), kill(), pause(), raise(), signal(), sigprocmask(), sigsuspend(), sigwait()
可移植性:PSE51_POSIX_THREADS_BASE
pthread_atfork()
pthread_barrierattr_destroy(), pthread_barrierattr_init()
pthread_barrierattr_getpshared(), pthread_barrierattr_setpshared()
pthread_cleanup_pop(), pthread_cleanup_push()
pthread_equal()
pthread_kill()
pthread_sigmask()
pthread_setcancelstate(), pthread_testcancel()
选项要求:_POSIX_CLOCK_SELECTION
选项要求:_POSIX_SHARED_MEMORY_OBJECTS
mmap()
munmap()
shm_open()
shm_unlink()
Implies_POSIX_TIMERS
影响:每个CPU计数器!
- 设备树布尔属性:cpu-counter
这应该在 Zephyr 层完成,POSIX变成了Zephyr的薄包装层(#19030、#40099),CLOCK_MONOTONIC-> K_CLOCK_MONOTONIC,k_nanosleep() 等等
对于例如802.15.4中的时间同步通道跳频(TSCH)非常相关
设备树中官方选择的Zephyr节点
zephyr,real_time_clock=&rtc0
zephyr,monotonic_clock=&cpu_counter_0


与Intel的最后一刻合作令人难以置信
即将推出...
CONFIG_ARCH_POSIX && CONFIG_POSIX_API
缺失的 POSIX 函数列表及其简单实现:
sysconf(),uname(),sigaddset(),sigdelset(),sigemptyset(),sigfillset(),sigismember(),sigpending(),pthread_atfork(),pthread_barrierattr_destroy(),pthread_barrierattr_init(),pthread_barrierattr_getpshared(),pthread_barrierattr_setpshared(),pthread_cleanup_pop(),pthread_cleanup_push(),pthread_equal(),pthread_kill(),pthread_sigmask(),pthread_condattr_getclock(),pthread_condattr_setclock(),clock_getcpuclockid()