Zephyr 2022开发者大会演讲文档概览

Creative Commons
本作品采用知识共享署名

本文记录Zephyr 2022开发者大会演讲文档阅读的内容。

今年是Zephyr第二次开发者大会, 从9号开始接近一个月时间零零碎碎的将有的演讲文档都过了一遍,这里做一下分类和记录。

一共52个演讲/会议主题,其中3个没有文档,其它的都简单的过了一遍,记录的内容有以下问题

  • 对感兴趣和熟悉的技术内容多关注一些,但理解上不一定准确,欢迎指正讨论
  • 演讲的知识面跨度太大,分类不够准确

所有的文档在sig-Zephyr中https://gitee.com/openeuler/zephyr-cn/tree/master/slides/zephyr_developer_summit/2022
由于我的文档是早期从ZDS的网页下载,命名不规范,为了方便大家和本文记录对应,下面链接内的文件名是和后文的小结名是一一对应的:
链接:https://pan.baidu.com/s/16gVb4EWL4EU7q9oOOk1UYA
提取码:ak9j

数据统计:

1 入门指导

Lauren-Murphy-New-DevEnv-ZDS2022.pdf 开发者环境 Intel

Zephyr编译环境搭建,
VSCode下Zephyr环境的搭建,涉及插件
Zephyr开发流,repo结构管理
编译方法和编译流程/结果说明
Zephyr调试简介

Zephyr_Devicetree_Mysteries_Solved.pdf Zephyr设备树的使用 Nodic

理解Zephyr设备树在C中宏表达的基础知识。
说明Zephyr设备树节点如何对应到C中的宏。
遇到设备树的编译错误时如何debug

HOWTO_Get_Your_Zephyr_Patches_Merged_ZDS_2022.pdf 为Zephyr贡献代码或文档 Nodic

向Zephyr git仓库贡献的规则,详细的说明了要如何进行提交,和提交的注意事项,遇到问题的解决方法

mastering-zephyr-driver-development.pdf Zephyr 驱动程序开发相关 Nodic

开发zephyr驱动的必备知识:
Zephyr设备驱动模型:模型接口简介
设备树: 设备树的组成和使用说明,如何在C中访问设备树,基于实例的API
Kconfig
Cmake
增加一个驱动的示例,如何使用新增加的驱动示例。包括设备树,绑定文件,Kconfig,Cmake的写法,标准接口利用,驱动代码写法。目录树外驱动,新驱动接口定义

Tutorial: Hands-on with Zephyr-based IoT Hardware - Data Goes in, Data Comes Out, Data Goes Up - Chris Gammell & Mike Szczys, Golioth (Pre-registration Required + Fee)

Zephyr使用训练,无文档

2 新功能

ZDS_Dynamic_Module_Loaing_Chen Peng.pdf 动态模块加载 Intel

对比静态链接和动态链接的差异和优缺点,说明Zephyr中动态链接实现的原型:
ELF解析:将PT_LOAD的段拷贝到内存
内存分配:为动态模块提前保留内存
符号重定位:不同的架构有不同的重定位方式,Zephyr只使用GOT重定位,以简化重定位过程。
-shared –fPIC –fno-plt分别对应“产生DYN”,产生位置无关代码不使用PLT.
GOT: 全局偏移表:用于查找在其他模块中定义的符号的地址
https://github.com/zephyrproject-rtos/zephyr/pull/41700

RTIO.pdf RTIO: 异步实时IO,流式block传输API定义和使用 Intel

异步实时IO,说明现有IO/DMA的问题,RTIO引入后的好处.
RTIO引入后需要对现有驱动的实现进行改造

LE_Audio_Specification_and_Zephyr_Implementation_AsbjornSabo_EmilGydesen_v1.pdf 蓝牙音频,LE Audio Nodic

LE Audio介绍:功能特性&规格
多声道同步,新的Codec LC3
Zephyr LE Audio实现情况和示例
实现https://github.com/zephyrproject-rtos/zephyr/tree/main/subsys/bluetooth/audio

lc3库https://github.com/zephyrproject-rtos/liblc3codec

CHRE.pdf 上下文中心运行时环境 Google

上下文中心运行时环境 https://source.android.com/devices/contexthub
nanoapps运行到zephyr上
CHRE一个框架,在zephyr可以运行执行nanoapps,nanoapp基于事件驱动,用于处理传感器事件等。
介绍说明CHER框架
Zephyr内还没有真正的将传感器硬件核CHER结合

ZDSUSBCPowerDeliveryOverview.pdf USB Type-C供电和Zephyr USB Type C路线图 Google

供电概览,USB-C供电介绍. Zephyr中USB-C stack的介绍和使用方法
https://github.com/zephyrproject-rtos/zephyr/pull/45601
3.2才会release

Proposal_For_I3C_SW_Support_In_Zephyr_RTOS_ShashankPrashar_v2.pptx I3C和I3C在Zephyr的情况 Samsung

什么时I3C, I3C和I2C/SPI的对比
为Zephyr增加I3C驱动

proposing_common_phy_framework_in_zephyr_v4.pdf Zephyr的通用PHY框架 Samsung

PHY 中的大多数都有一个单独的驱动程序,并进入到 Zephyr 代码库中。,提议创建一个 PHY 框架,将所有 PHY 驱动程序保存在一个地方,并提高代码的可重用性和可读性。 提议的 PHY 子系统将遵循类似 Linux 的 PHY 框架,并提供 API,控制器驱动程序可以使用这些 API 来初始化、取消初始化、启动和关闭正在使用的 PHY。
将带有phy的驱动,分离为contoller和pyh两部分,phy的驱动只控制phy。提供phy驱动框架。

SMP RISC-V.pdf Zephyr支持RISC-V的情况 Antmicro

Zephyr中SMP的历史和现状及展望。
RISC-V上SMP的实现介绍。

Logging_in_multicore_environment_KrzysztofChruscinski_v1.pdf 多核环境的日志系统 Nodic

介绍多核Log系统的架构,实现考虑的技术细节。
其它核通过IPC传输log消息到同一个核,由该核调用后端输出

3 架构修改

ZDS22-AndyRoss-Linkers.pdf Zephyr使用的链接技巧 Intel

链接基础知识
Zephyr链接做了什么动作:
主要问题:为了ISR table, 内核对象,线程index产生,DTS device handle,做了三次链接。
链接-> dump符号->生成代码->再次链接
改善方法:
使用Python提前做,如何和现状平稳过渡。
LTO。

usb_support_zds2022.pdf Zephyr对USB的支持,Host/Device的支持。USBIP演示 Nodic

新的USB device Controller驱动和协议栈
新增USB host Controller驱动API,USB host stack实现中
已实现MAX3421E
USB stack 测试:使用USBIP模拟controller驱动

zephyr-pinctrl.pdf Zephyr Pinmux控制机制 Nodic

Zephyr 3.1之前不同的平台有不同的pinctrl方式,3.1开始引入了统一的pinctrl模型,新加入的平台必须使用pinctrl模型。将不同vendor的pinctrl差异都管控在device tree中
新的Pinctrl可以定义pin状态,运行时能在不同的状态下切换,设备树中可以指定default和sleep状态,用户也可以自定义状态。
Pin配置:
引脚复用和参数配置(上下拉,驱动模式,翻转速度)
含有强制的标准属性 pincfg-node-group.yaml,pincfg-node.yaml
设备树中使用分组还是基于节点由使用者决定,不同的vendor商使用的方法不一样。
Pinctrl驱动API说明。
Pinctrl演示:设备树书写和Pinctrl驱动使用
动态的Pinctrl说明和演示,只有未初始化的设备才能使用

Daniel DeGrasse- Zephyr SD Presentation.pdf Zephyr NXP

SD驱动架构修改,目前已经支持设备树节点挂载

4 其它语言

2022-06-08-non-c-zephyr-A.pdf Zephyr上使用非C语言. Rust & Zig Linaro

Zephyr上使用非C语言的尝试:
Rust和Zig都是可能,目前的做法是将Rust和Zig都用自己的编译器编译,由于ABI各GCC编译出来的Zephyr是兼容的,因此将Rust和Zig编译的结果作为外部lib和Zephyr做链接。
https://github.com/tangybbq/non-c-on-zephyr

以上只是一些简单尝试,更重要的是要用zephyr为这些非C语言封装标准库,文中也说明了处理的想法
https://github.com/tylerwhall/zephyr-rust

Lua in Userspace.pdf 用户空间运行Lua Entropic Engineering

说明为何要引入脚本语言–设备部署后运行时可配置
比较python和lua.
lua移植到Zephyr的用户模式运行,修改的关键点和依赖。
使用lua的好处
https:/ /gitlab.com/prv-labs/zephyr-lua-demo

5 多核异构&虚拟化

Zephyr_DevSummit22_DMilea_v1.1.pdf 虚拟化, Zephyr对virtio的支持 Wind rever

异构芯片上通过虚拟机跑多操作系统
Virtio+OpenAMP
Zephyr对Virtio的实现(qemu_cortex_a53, MMIO only):
https://github.com/danmilea/zephyr 在main branch
说明了实现的注意事项

presentation.pdf 嵌入系统上使用虚拟化实现安全系统。在 Arm 平台上的 Xen Hypervisor 中使用 Zephyr 作为控制域 EPAM Systems

虚拟化介绍, Xen介绍
多个DomU非特权域只能同一个一个Dom0特权域访问硬件
启动后Dom0授权DomD访问硬件,Dom0只做管理控制工作,Dom0要求薄。
将Zephyr作为Dom0运行:提高系统启动时间•减少资源消耗•降低系统整体复杂性•功能安全免受干扰
https://github.com/zephyrproject-rtos/zephyr/blob/main/arch/arm64/core/xen
https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/xen
https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/serial/uart_hvc_xen.c
https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/serial/uart_hvc_xen_consoleio.c

https://github.com/zephyrproject-rtos/zephyr/blob/main/boards/arm64/xenvm/doc/index.rst

Xen在Zephyr中遇到的问题:
licensing冲突
静态配置
PR review慢

Zephyr作为Dom0控制域的开发现状

6 模拟器/Native

ZDS-2022–From Zephyr’s structured data to traceable and testable open hardware (1).pdf 通过硬件环境进行全面且可操作的描述,让软件开发和测试脱离硬件 Antmicro

Zephyr的设备树, yaml描述,以及repo的组织可以清晰的描述出硬件信息。
renode通过模拟硬件,可以在无硬件的环境下进行软件的开发和测试,模拟不同的SOC/硬件为软件在硬件上的快速切换提供可能。Renode提供了>160种板,可以直接通过Google Colab offers free cloud machines运行,能够通过perfetto traces进行分析数据
https://zephyr-dashboard.renode.io/renodepedia/boards/mimxrt1064_evk/

Renode’s Zephyr Dashboard: Simulating 130+ Zephyr Platforms - Michael Gielda & Peter Zierhoffer, Antmicro

Renode模拟平台上 Zephyr的情况
无文档

20220609-zds-supporting-native-posix-on-macos.pdf macOS上Zephyr native_posix的支援 Meta / ASIC FW

为什么需要native_posix
Zephyr的native_posix是如何工作的
Linux和Mac-OS可执行文件格式比较
如何实现的Mac-OS下native_posix

7 测试

Aastha_grover_Twister_ZDS2022.pdf 贡献者如何使用Twister Test Runner Intel

Twister简介,说明Twister的使用方法,如何添加测试用例,如何使用测试用例。如何通过硬件测试,如何多目标测试等。

ZDS22MPerkowskiT.pdf 基于pytest的新测试框架Twister V2 Nodic

Twister V2 介绍
现状及缺点
改进方法(基于pytest)
V2现状及展示

Zephyr testing @google.pdf Zephyr单元测试和模拟器在Google的情况 Google

Google如何使用Zephyr的测试框架,进行测试驱动开发。
定API->写测试->实现
涉及:ZTEST 测试框架使用,模拟的外设

PaltsevEvgeniy_ZephyrDeveloperSummit_pbv8.pdf 为不同的平台建立测试 Synopsys

Zephyr在不同的平台下建立测试需要考虑的内容,例如SMP和非SMP

8 云应用

Zephyr_DevSummit22_Leveraging Cloud Technologies for Zephyr.pdf 利用云技术开发和运营Zephyr

利用容器便捷搭建Zephyr开发环境
WSL2中编译通过usbipd-win烧写
在树莓派中运行的容器进行编译和通过树莓派向MCU烧写,远端的云通过ssh控制树莓派
利用Pipeline容器做CI
通过云操作控制zephyr设备

zds2022-logging-over-contrained-channels-slides.pdf Zephyr日志压缩后通过COAP上云

golioth为Zephyr增加了一个log后端,可以将zephyr的日志传送保存在云端,其它client可以从云端查看分析日志。
说明了log传输选择的数据格式和网络协议。

End to End IoT projects with Zephyr.pdf 端对端物联网设备开发示例

介绍物联网端到云用到的技术,以及Zephyr提供的对应功能&API

Laird Connectivity & Memfault

Memfault - Laird Connectivity Zephyr Dev Summit Template V1.pdf 整合Memfault/Laird 和Zephyr, 将OS信息上云
基于nrf connect SDK(base zephyr)的无线网关介绍
需要远程调试的原因
Memfault的功能介绍,Zephyr上导入&配置Memfault

9 应用案例

Towards an Industry-Standard EC.pptx.pdf 基于Zephyr的笔记本电脑EC, 让笔记本一直在线

笔记本上EC概念/功能介绍
EC 行业标准
Google EC在Zephyr上的愿景和规划

slides.pdf Zephyr上使用C++20

从一个嵌入式应用场景的需求分析如何开发软件。从单线程到多线程再到状态机三种不同实现方式的实现和比较。
C++20实现状态机的优点。

ZDS2022 - Zephyr for Embedded Controllers.pdf Zephyr在Chromebook上作为EC的演示

什么是EC,Google chromeOS EC的现状
为什么要将EC切换为Zephyr
Google贡献了:
Hierarchical状态机Framwork
USB-C 电源管理协议栈
CHRE:新的传感器框架

如何将现有的EC过渡到Zephyr
过渡到Zephyr后如何测试

LAAS-CNRS & University of Toulouse

Zephyr_BoF_OwnTech_V1.pdf Zephyr在电力电子方面的应用。OwnTech项目演示
电力电子简介,为什么要数字化电力电子。
如何将物联网的抽象API方法与数字电源控制器的硬件加速灵活性相结合?
数字化电源控制的现状
数字电源电子的需求:实时,外设,通信。
SDPE协议栈
硬件设计说明,搭配Zephyr。
前后端说明。

Secure and Massive IoT Device Factory Provisioning.pdf 物联网设备的安全配置

介绍如何对物联网设备进行配置和配置分类及特定,介绍lwM2M中与配置设备相关的内容,说明Zephyr中整合的情况。

what-chip-shortage-how-we-use-zephyr-for-truly-modular-hardware.pdf 模块化硬件Aludel

透过设备树的overlay解决硬件变动的问题

zephyr-heart-internet.pdf

Zephyr加速物联网开发,向Zephyr生态系统以外的人说明为什么他们应该采用该平台,并将困难与其他RTOS解决方案进行对比
介绍了Zephyr支持的device/vendor/传感器/shields。网络内容,modems内容,通讯连接,网络协议,网络应用协议,安全内容,并给出链接

One Code Base, Multiple Targets - Jared Wolff, Circuit Dojo LLC - ZDS 2022.pdf 同一代码库在不同目标上使用 Circuit Dojo

演示在相同的外设情况下相同的软件代码在不同的板子上执行。Circuit Dojo
只需要修改west提货单,提取不同的SDK,修改设备树和配置文件适配不同的板子

10 认证,质量与安全,项目管理

ZDS2022-Building_Traceability_For_Design_And_Testing_In_Zephyr_Enjia_Mai.pdf 建立Zephyr设计和测试的可追溯性 Intel

项目需求,设计,测试的可追溯管理。涉及文档和测试的生成。

Zephyr Quality Testing BoF.pdf Zephyr的质量和测试流程 NXP

现场讨论会,和测试/质量相关
https://zephyr-dashboard.renode.io/
https://github.com/zephyrproject-rtos/test_results
https://stats.zephyrproject.org/

Tools_and_Methodologies_to_test_compliance_with_IEC61508_AndreyMadan_NeilLandmead_v1.pdf IEC61508标准,Zephyr使用Parasoft C/C++test Parasoft & Lattix

功能安全标准:IEC61508
静态代码分析(Parasoft C/C++)
单元/模块测试
代码覆盖率
需求跟踪

Keynote: The Power of Consistency - Anas Nashif, Principal Engineer and Architect, Intel Zephyr社区管理

无PDF

Zephyr_DevSummit22_Architecting_IoT_Product_Line-Scoping.pdf 构建物联网产品线,Zephyr生态 Legrand

产品线工程和管理,已经PLE在Zephyr生态的应用

2022-06-08-Zephyr-SBOM.pdf 软件材料清单(SBOM)标准Software Package Data Exchange Boston Technology Law

说明Zephyr目前SPDX现状,生成方法,生成脚本,和改进方向。
SBOM(Software Bill of Materials):包含用于构建软件的各种组件的详细信息和供应链关系的正式记录.
SPDX(Software Package Data Exchange):用于交流软件材料清单信息的开放标准,包括组件、许可证、版权和安全参考. ISO/IEC 5962:2021

11 生态&基础建设

ZDS-2022-Nordic-keynote.pdf Zephyr SDK集成和管理

将Zephyr作为Nodic SDK的基础,使用Zephyr OS功能作为基础设施, 包括其构建管理和测试系统
https://zephyrproject.org/leveraging-open-source-software-in-your-software-development-kit-nordic-semiconductors-experience-with-the-zephyr-rtos/

华为 & OpenEuler

The_meetup_between_zephyr_and_openeuler.pdf
OpenEuler介绍
openEuler Embedded介绍
SIG-Zepyr介绍
Multi-OS Mixed Criticality: OpenEuler + Zephyr多核异构, AMP通讯

Infineon

Bringing Infineon’s Low Power, Connected and Secured PSoC™ 6 Microcontrollers to Zephyr® V2.pptx.pdf 英飞凌PSoC6导入Zephyr
介绍PSoC™ 6 Wi-Fi BT芯片

12 其它

MattCS ZDS Keynote 2022.pptx.pdf 各自由软件基金会的物联网OS社区数据对比报告 Bitergia

IOT开源软件的数据分析,软件之间和Zephyr内的情况

Open Source NVMe AI Accelerator Platform with Zephyr - Karol Gugala, Antmicro

Zephyr通过NVMe 接口执行异构CPU上的ML
无文档