前言
2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。
ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。
今天分享第22篇技术报告,由邹雨欣整理,题目为:
“Zephyr加速测试外部显示器支持的工具”
作者简介
Paul Fagerburg是谷歌ChromeOS团队的嵌入式软件工程师,目前专注于测试自动化的硬件工具。Paul从事嵌入式系统工作超过20年,包括医疗设备、商业航空和工业电源监控和计量。Paul拥有杨百翰大学的计算机科学学士学位和科罗拉多大学博尔德分校的电子工程硕士学位。
文章简介
本次会议将介绍Chameleon,这是一种开源、开放硬件的“显示器模拟器”,可以对使用外部显示器的计算机进行自动测试。演讲将涵盖Zephyr如何加速 Chameleon项目的开发,当供应链短缺导致我们的嵌入式控制器不可用时,Zephyr如何实现快速转型(额外的好处:我们将展示来自开源存储库的代码更改),以及如何集成Pigweed RPC库与我们的Zephyr应用程序使处理器间通信变得简单、无缝。
问题
我们需要进行外部显示器兼容测试,并使用到Chromebooks,这是一个M*N规模的问题,这里的M和N都很大,我们没有实验空间去容纳所有这些显示器。实际上,测试工作是通过人工沿着所有这些显示器的通道插入Chromebook,确保它可以正常工作,紧接着拔下插头转到下一个显示器并再次插入测试。显然这是一个劳动密集型工作,自然也会出现很多人为错误。所以为了解决这个问题,我们创建了一个名为Chameleon的设备。
什么是Chameleon
什么是Chameleon,最简短的答案就是它是一个显示器:它有HDMI和DisplayPort输入,并且可编程式分辨率和帧速率。但是Chameleon和传统的监视器不同之处在于它没有面板,我们将图像捕获到RAM而非在面板上显示视频信号。接着,我们对捕获到的信号进行分析,在我们的实验室测试中使用它来测试互操作性,并以可扩展、可靠和可重复的方式识别图形错误和回归。当然这是嵌入式开源峰会,所以Chameleon是开源的。
下图是硬件的样子,它作为一个独立设备运行(让我们忽略底部的 PCIE 连接器就假装它不在那里)。你从 Chromebook 或其他设备连接它的DisplayPort 和/或 HDMI接口后就会有一个FPGA的单元来处理视频信号,当然加上硅制ARM芯片,运行着的系统以及实验室的网络连接,我们就有了运行 Zephyr 的嵌入式控制器。
在如下框架图中,有一个DUT正在被测试,它具有连接HDMI或者DisplayPort的USB-C接口。如果有一个Display Dongle具有HDMI或者DisplayPort输出,我们就可以直接使用它。这里有一个开关矩阵(Switching Matrix)来路由(route)视频信号,我们有几种不同的编码选项。我们可以选择HDMI解码器或者将内容放到FPGA中进行解码。FPGA使用ARM内核,运行的是Linux内核,在此有一个守护进程接受网络的RPC调用;而EC(Embedded Controller)运行的是Zephyr系统,它用来处理电源、视频流路由、监控电压电流以及控制HDMI解码器。
Zephyr加速Chameleon开发
Chameleon已经使用STM32F103作为嵌入式控制器,Zephyr能够支持它。我买了一个Eucleo评估板,实验测试过程中,它启动得非常快,而且能够正常工作。
处理器间通信变得很容易
Linux系统需要向EC发送命令和查询,EC控制视频流切换和HDMI解码器IC,监控电压和电流传感器等。我们在Linux系统和EC之间只有一个UART连接。
如果你曾经在在Chrome操作系统上完成过主处理器和嵌入式控制器之间的通信的任何工作,您会ec commands.h,它同样存在于Linux内核当中。将两个文件在内核中的同步带来了一些必须要处理的额外限制。ec commands.h限制了指令和结构,
串行连接的原始字节
从AP侧的结构体中组装消息
解析消息并提取EC侧的结构体成员
RPC——从Linux到EC,当我听到RPC,我首先想到的是Pig weed系统,它是一个嵌入式目标构开源集合,我们只要引入所需要的库,这些库大多数是独立的。例如Pig weed有一个日志子系统,不过我们使用的是Zephyr的日志子系统。
服务器是更强大的系统,所有客户端都会来询问一台服务器,在下图中,EC实际上是服务器,接受Linux 系统发出的请求。这里我们有一个get video params调用,它被编码到 Protobuf 中,我们对其进行 HDLC编码并通过 UART发送它,这个调用被传送到HDMI驱动程序以获得有关流的信息,然后将详细信息打包回Protobuf中以进行响应,并通过线路返回。
我们有一个针HDMI解码器的服务,获取视频参数的方法,响应中有很多不同的字段,其中一些对于调试非常有用,还有诸如获取 tmds时钟之类的东西、获取像素时钟和颜色格式的自定义枚举等等。整个定义都在我们的开源存储库中。
我们必须对固定大小的缓冲区进行一些修改,然后将其添加到 cmake 中。在您完成了基础工作之后,事情就会变得很简单。
它是如何工作的呢?我之前的方法是不断编译,根据编译失败的信息复制到header和source文件中。在此我们有一个更好的办法,RPC编译器会生成一堆代码,我们聚焦于build/v3.protos/ nanopb_rpc/proto/ v3.rpc.pb.h,查看_pw_rpc_compile _generated _service _stubs。本节提供了此文件中的RPC服务的存根实现。可以引用或复制以下代码并填充,作为RPC服务实现的起点。于是我们就启动了RPS服务,这十分简单,并且不需要很多代码。
Pigweed提供了一些很好的参考,在模块中有一些你所需要的全局变量或静态变量,只需要通过注册一个服务(service)并运行就完成了。
Zephyr帮助从供应链短缺中迅速复苏
在过去的一段时间里一些自然灾害影响到了某个半导体公司以及一些其它事件影响到了IC供应链。“关键部件的交货时间已经飙升至一年多。我们鼓励您至少提前一年下单(如果可能的话,最多预订两年)”。F103没有准确的交货时间,只能等待分配,而F103的价格在二级市场跳到84美元,这是不可接受的。非常感谢ST帮助我们确定了H743是一种几乎与引针兼容( almost-pin-compatible)的替代品,其成本与F103类似,并且令人开心的是Zephyr支持H743/H753。
但是我们需要如何处理我们已经写好的固件呢?此时我们已经有了一个非常大的代码体,其中的多少需要去掉或者重写呢。或许你们在更换处理器时遇到过这样的情况时会不断检查重写,这是一个非常让人头疼的事情。但是事实上这仅仅花了我们大约两个小时来完成所有所需的更改,具体如下。
我们焊接几个木桩引脚,并使用跨接线来连接正确的UART,使用JTAG进行code flash(未展示),结果是它可以基本正常运行。这向我们表明,我们可以继续对硬件进行更改。
我们替换一块板子为H753重新完成了我们的工作。它们之间的引脚排列几乎相同,有一些小的差异,所以我们在升降机和引脚做了一些跳线,然后加载我们的代码并运行了测试,它成功了,我们很高兴,因为供应链的意外带给该项目的是灭绝级别的灾难。因为如果我们无法获得微控制器且无法更改,这个项目就会流产。
我们用新的控制器构建了硬件的下一个版本,并将其部署在我们的测试实验室中,与公司内部的早期采用者一起进行测试,我们正在继续开发功能,并且已经在实验室中运行了几个月的测试,这是一份内部测试报告,显示了我们正在运行的不同测试。
谈谈开源
提到开源,每个人都知道它很棒,但不是每个人都愿意开源。所以有时我们不得不在我们的项目中包含闭源,我们有一个特定芯片的驱动程序,之前这个芯片供应商希望对代码保密,所以我们遵守该协议对其进行闭源。好消息是该供应商最近决定将其开源,于是我们将把这些代码带入我们的开源存储库。我们感谢供应商决定开源代码,但如果您的供应商不愿意这样做,你需要修改build,从第二个存储库中提取你拥有的封闭源存储库。
我的为Google工作的build可以很好地执行,但是对公司之外的其他人来说,它是不完整的。对于开源社区来说,它无法完整使用,因为他们没有这段代码或者相关链接。为了解决这个问题,当时我们在开源代码中制作了新版本的RPC方法。
因为现在供应商同意了开源代码,我们必须在make 文件或通配文件名中做一些额外的工作。我们最终得到了两个版本的 RPC 方法。系统通过检查它是否是封闭源代码,然后在build中使用它,如果它不在那里,我们将使用这些 RPC method的未实现(unimplemented )版本。
以下是Chameleon所做的代码和链接,原理图和PCB布局即将发布。
致谢
向所有使Chameleon成为可能的人表示认可,其中许多人全职为Chameleon工作,其他人也工作之余提供了帮助,在关键领域提供了技术指导。