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

Chris Gammell
Chris Gammell是来自北卡罗来纳州达勒姆(Durham, NC)的电气工程师、播客兼设计顾问。他是Golioth的开发者关系主管,Golioth是一家为大规模部署构建基础设施的物联网初创公司。此前,他为客户创建了从连接传感器网络到可穿戴性能跟踪的硬件和固件设计。他还经营The Amp Hour,这是运行时间最长的有关电子产品制造的播客。


文章简介
新用户在使用Zephyr工具链时遇到了困难:这不是想法,而是过去许多培训课程中证实的事实。安装和配置工具链是任何培训开始时的一个技术障碍。虽然有些演讲可能会提出长期解决方案,但本次演讲是关于如何使用现有的Zephyr进行培训。各种各样的用户背景、环境和目标硬件使这成为一个挑战,并继续阻碍新用户的加入。如果尝试在偏远地区培训人员,这些挑战会成倍增加。本次演讲将涵盖为改善培训环境而进行的实验以及发现的最佳实践。其中包括容器化部署、基于浏览器的编译、测试硬件的重要方面、培训文档需求、吸引远程用户的方式等等。作为本次演讲的参会者,您将了解什么对新用户有效、需要注意的潜在陷阱,以及如何培训组织成员成为Zephyr高级用户。
培训人们如何使用Zephyr所涉及到的东西
过去的方法和挑战
一次积极的Zephyr培训经历包含的元素
一个完全远程培训案例研究
替代方案和未来的研究方向
培训的原因
为什么Zephyr的培训如此困难但是我们无论如何都需要进行?发展培训需要时间,管理培训需要人员。如果您想进行培训,最好的培训是一对一的,但这真的十分昂贵,你或许希望拥有其它选项,比如说让一个人培训十个人。而且Zephyr的使用是需要经历一定的学习路线的,如何高效地高效地完成这一学习路线,这就是我们正在进行培训的另一个原因。当然,我正在进行培训的另一个原因是连接到互联网需要Zephyr提供的大量的硬件支持。Zephyr使得我们可以尽可能地获得尽可能多的不同的硬件平台。但是世界上仍然有很多人尚未尝试Zephyr,这是一个理想数目的听众。很多从未使用过Zephyr的硬件工程师和固件工程师都有可能是未来的Zephyr用户。

过去的一些失败培训经验
我们有过两次失败的Zephyr培训经验。一次是发生在2022年的现场企业培训,培训包含八个成员。我们当时正在调整方向,以进一步开发Chocolatey流,这允许Windows用户安装Zephyr工具。期间遇到了一些关于下载问、公司防火墙、权限问题,缺乏使用Windows的经验等等问题。而在2022年的ZDS培训中我们引来了25名培训学员--每个用户都带来了一系列不同的笔记本电脑,Windows,Linux和Mac。我们带来了一个安装了大容量存储的路由器,所有依赖项都下载到文件夹中。用户仍然需要下载工具链。在此我们还是遇到了Python版本、以前安装过Zephyr等等方面的问题。
我们未尝试过的方法
准备笔记本
我们参加过一些培训,培训师会带来几箱笔记本电脑。在每次培训之前,笔记本电脑都要重新安装操作系统,培训师可以提前把准备好的镜像在这些笔记本中进行配安装配置。这样做的好处是用户可以直接访问USB外设,这对嵌入式很重要。缺点是这只能用于现场培训。
使用U盘
对于面对面培训,这种“sneaker-net”的方法可能带来最高的带宽。可以在U盘内安装VMware运行虚拟机,前提是用户可以成功安装主机软件。不过培训者可能不会允许随机的u盘插入他的电脑,并且这不适用于远程培训。
要求学员预装软件
这是一个可爱的想法,但我们生活在现实世界中很难完成这种设想。最好的情况是在培训期间有两组人:一组做培训练习,另一组花费大部分时间安装工具。
关于培训的真理(Truisms)
不假设用户的系统
用户可能带着各种系统和预装的冲突软件到达。您可能将了解到您以前从未听说过的Linux发行版。举个例子,曾经有一名用户在接受培训时因为他的笔记本电脑前一天晚上坏了,所以他带来了他的steam deck并询问能否使用这台机器完成培训。
需要在机器上安装东西的完美数量是零
我们不是一家开发大规模mac/PC软件的公司,所以无论我们安装什么,我们都依赖于其他人的回归测试。如果我们能让人们干净安装他们的操作系统,那将是最佳的情况(完全不现实)。
下载需要时间,即使是在一个设备良好的环境下
Zephyr的安装并不小,尽管它可以使用清单文件和工具链的选择性安装来进行优化。你不知道会议Wi-Fi或远程服务器在任何一天将如何响应。在远程培训时,你的用户将有不同的连接速度,你只能和你最慢的人一样快。
我们的解决方案
Kasm
我们的解决方案是一个叫Kasm的东西。Kasm允许我们在浏览器中创建一个“桌面”,它提供一个完整的Ubuntu桌面,通过浏览器交付。Zephyr工具链可以基于Kasm模板预先安装到Docker容器中的。测试项目和其他工具(VScode,插件)是可用的。从打开链接到try.golioth.io、登录,到点击“编译”需要30秒。

Nordic Semi Development Kits
毋庸置疑的是,用户仍然有本地编程的需求以及使用调试工具进行专业的操作。为了利用板上调试器和跨平台的nRF Connect for Desktop,我们转而使用Nordic Semi Development Kits。我们同样拥有一个标准的串行接口,但是不能直接将Kasm容器连接到DKs。

Document
我们拥有一个基于Docusaurus的完整培训文档网站(training.golioth.io)

Training Site
书面说明对于使人们免于每次都向培训师那里得到指导是很重要的。它还能鼓励人们在事后再去看培训材料(training.golioth.io总是可用的)

远程工具(gather.town)
我们需要一种方法,在不打扰其他人的情况下,远程为受训者提供个性化的帮助。gather.town是一个基于邻近的视频工具,在远程培训期间的个性化帮助。它赋予你一个角色,你可以将其移动到不同的“区域”,与不同群体的人交谈。当发生错误时,视频和屏幕共享至关重要。

演示视频
视频地址:https://youtu.be/PvvCqM-zox0?si=_-uArMkd6_Q4Uhk7
成功案例
小型远程培训
一群友好的硬件工程师加入了我们,完成了我们新的远程培训。我们使用的MagTags(基于Expressif ESP32-S2)当时仍然没有USB-CDC,所以没有直接串行输出。这是在我们将VScode引入浏览器之前。总的来说,我们的培训仍然过于“Linux-y”。

大型远程培训
这是我们第一次大规模培训的尝试。我们大约有30个人来参加,这开始使我们单独帮助别人的能力变得紧张起来。

在2022年的Hackaday Superconference上,我们有30个人亲自参加了培训。这就是上文我提到的有人带着Steam deck出现的地方(它确实有效!)在本地使用Python工具加载二进制文件仍然是一个困难(因为人们带来了各种Python/操作系统)。

远程培训
在我们最近培训中,我们改用了Nordic的硬件,达到了更高的编译/编程成功率。这些新的内容更侧重于RTOSes和Devicetree的基础知识。但是最大的问题是培训时间太短(2小时)。而公告窗口短意味着物流/运输问题。

未来培训
我们预计将此次培训的时间改为3小时,让人们有更多时间处理硬件。我们不是预审资格的人,所以有可能有些人没有经验。我们将参加迄今为止最大的培训小组(60人),全部远程培训。

可能会变得更好的事情
“盗梦空间”效应
在窗口中使用窗口可能会让用户感到困惑。将Kasm设置为全屏会有所帮助,但它仍然要管理很多窗口。在过去,在主机和远程机器之间复制和粘贴是很棘手的(随着Kasm的更新版本得到了改进)。

网络仍旧重要
我们正在将VNC从远程盒传输到主机。带宽在Kasm内是可调的,但仍然可能受到影响。使用共享Wi-Fi进行现场培训可能会使网络紧张。Kasm解决方案更适合远程培训。
二进制文件不匹配大多数嵌入式工作流
就像几年前Arm的mBed在线编译器一样,没有本地上下文进行调试。在远程机器和主机之间传输并不是最优的,特别是因为我们依赖文件名/时间戳来确保它们正在安装正确的下载版本。
学员最终不会在他们的机器上安装工具链
在培训结束时,用户并没有在他们的本地机器上安装工具链,这是一个缺点。我们希望他们能受到启发去经历这个过程,但还有额外的设置来在本地重现他们的体验。
其他选择/未来的实验
Microsoft Codespaces / GitPod
重新尝试使用nRF的本地工具连接VScode

用Wokwi进行远程操作
Wokwi是一个在线硬件模拟器,它也有一个模拟的Wi-Fi网关到开放的互联网(? !)
我们已经在web平台上使用Zephyr测试了ESP32二进制文件
Wokwi还编写了与设备的硬件交互程序,这使得它具有很强的可扩展性
在浏览器中有一个测试版调试器

本地docker / devcontainers
把它放在这里,因为它保证有人把它带来,但我认为它不坚持“最小化本地安装”
VScode(和插件)通常在主机系统上标准化安装,但docker是相当复杂的(即。如果出现问题,我们如何排除故障?)
关于使用Zephyr开发容器的精彩演讲:https:// www.youtube.com/ watch?v = qQdjW25D -bM
致谢及联系方式
