最近我收到了很多关于在使用持续集成系统时,如何为自动化测试容器化环境的问题。如果你不太理解那句话的大部分内容,不用担心,因为我们将深入探讨容器、Docker以及如何在嵌入式环境和硬件在环测试中利用它们。

什么是容器?

关于容器有很多优秀的文章,包括 Docker的这篇 (其中一个最受欢迎的容器运行时引擎)。在构建环境(即嵌入式系统)和测试环境(即硬件在环测试)中使用容器,使我们能够抽象出每次想要启动新机器时的所有繁琐设置。这不仅仅与新的测试机器相关,也与我们在云中扩展操作以构建嵌入式固件有关。

无论你正在运行什么规模的操作,如今许多公司都利用云来减少保留裸机服务器的需要。在DevOps原则中,我们总是希望确保我们编写的任何软件都可以在任何时间、任何地方构建和运行。在云中不断启动新机器并安装编译软件、库和其他软件包并不是很好的扩展方式。这正是容器化变得如此流行的原因。我们可以将我们的构建(或运行时环境)打包成一个非常轻量级的虚拟机,并将其交付给任何机器运行,无论是云还是我们自己的个人电脑。

创建和使用容器

让我们探索如何在你的项目中实际创建和使用这些容器。当我们首次开始创建一个容器镜像时,我们必须从一个现有的“基础镜像”开始。在大多数情况下,某种Linux操作系统的变体,如Debian、Ubuntu或Alpine,就足够了。一旦你创建了你的Dockerfile,你就可以这样引用镜像:

FROM ubuntu:latest

这表明基础操作系统将运行最新的Ubuntu Docker镜像。之后,我们需要安装构建或测试环境所需的任何库。在一个 示例仓库 中,我使用Debian包管理器(Apt)安装了Arduino IDE,然后通过安装Arduino Sam板驱动程序添加了更多层。在特权模式下运行此容器(或传入设备的卷挂载点),我可以在仅包含Docker的全新机器上(即没有IDE或驱动程序)通过命令行编译和上传Arduino草图。

我们可以对连接到我们正在测试的设备的机器做同样的事情。在我整理的 这个Docker容器 中,我安装了运行Analog Discovery 2设备所需的所有依赖项和软件。理论上,我可以在一个全新的机器上启动Docker容器(该机器仅包含Docker),并开始与Analog Discovery 2通信,无需任何麻烦。使用Analog Discovery 2,我可以编写测试来验证我的ADCs、DACs,或向我电路板上的不同芯片发送I2C/SPI命令(以及其他许多功能)。

通过持续集成实现扩展

现在,让我们讨论容器如何增强持续集成系统以提高效率和可扩展性。当我们开始将容器与持续集成(CI)系统结合使用时,真正的魔法就发生了。我们可能拥有数十台,甚至数百台物理测试机,或者能够访问成千上万台云机器用于我们的测试和构建服务器。为了实际扩展,如上所述,我们不能配置每一台随之上线的单独机器。在每次CI运行中提供一个容器,不仅为我们提供了一种系统化、可重复的构建和测试运行方式,而且还使我们免于每次启动机器时都必须重新配置机器(在云中,几乎每次CI运行时都会发生这种情况)。通过利用容器进行嵌入式构建和物理硬件测试,我们为自己和我们的公司提供了一定级别的扩展性,这是前几代人只能梦想到的。

在本文中,我们强调了容器在嵌入式系统开发中的关键作用,特别是对于跨不同类型基础设施保持一致的构建和测试环境。它们与持续集成系统的整合不仅简化了开发过程,还提高了产品的可扩展性和可靠性。随着容器技术的进步,其采用对开发人员来说将变得越来越重要。通过访问一些示例仓库,深入研究并尝试不同的设置,网址为 https://gitlab.com/docker-embedded

在 如何构建自定义GPT操作以与您的硬件对话和 构建AI实验室助手中,我们学习了如何使用生成式AI控制我们的硬件。通过在ChatGPT中使用自定义GPT操作,我们能够赋予ChatGPT不仅能让树莓派上的LED灯闪烁,还能控制实验室仪器并获取数据的能力。这意味着我们可以使用人工智能作为我们的实验室助手,并处理它从我们的仪器中获取的数据。在这篇文章中,我们将更进一步,让生成式AI不仅为我们编写代码,还能在嵌入式目标上执行代码并在此过程中接收反馈。 背景 使用生成式AI编写代码,即使是对于嵌入式系统,也不是什么新鲜事。已经有很多工具在建议或完全从头开始编写代码。最受欢迎的大型语言模型,如ChatGPT、Gemini和Claude,都已经变得相当擅长编写代码(参见 Gemini与ChatGPT:谁写的代码更好进行比较)。我已经写了一年多关于ChatGPT生成代码的文章了(参见 使用ChatGPT进行自动化测试),并宣称这是如今开发的唯一方式。真正的挑战是将AI纳入你的开发循环中。 任何PCB的成功设计和制造都离不开数据管理。每个PCB项目都包含大量有关元件、前端原理图、物理布局和制造文件的数据。PCB设计软件中可能还需要其他未包含的文档。这一切都必须由设计人员进行跟踪和管理,因为使用不完整或过时的数据将导致设计无法按要求执行。 PCB数据管理包括跨越多个领域的需求和设计信息。首先,对最终产品应做什么、其规格和公差以及其操作环境有功能要求。然后是以各种形式(数据表,以电子方式存储在设计工具库中,等等)与每个元件相关的数据。再然后是PCB本身、其材料特性、物理布局和生产要求的数据。最后,设计并不总是从零开始,它们可能需要重复使用以前成功设计的部分作为起点。 设计人员面临的关键问题是: 我是否拥有所需的所有数据? 我的设计数据是否正确且是最新的? 有没有人做了我尚不清楚的更改? 本文将帮助指导设计工程师回答这些问题,并揭示现代工具如何改变专业设计公司和OEM的数据管理流程。 什么是PCB数据管理? PCB数据管理广义上是指印刷电路板的设计