14.1. 固件开发

这些页面面向固件开发者——也就是想要修改运行在 OpenMV Cam 上的 C 代码,而不只是编写 MicroPython 脚本的人。它们涵盖了整个流程:搭建编辑器、安装构建工具链、为每块受支持的开发板编译固件、将你的构建刷写到摄像头上,并使用 J-Link 探针在真实硬件上调试它,以及在 VS Code 中进行单步源码级调试。

学完之后,你应该能够从一台干净的机器开始,构建固件,将其放到摄像头上,在 C 源码中设置断点,并对处理器进行单步执行。

备注

OpenMV 固件是 MicroPython 的一个分支,添加了 OpenMV 机器视觉库、驱动以及开发板移植。源码位于 github.com/openmv/openmv。你在脚本中使用的 Python image / ml / csi 模块就是这个仓库中的 C 代码。

14.1.1. 构建是如何工作的

在开始之前,有两件事值得理解,因为它们解释了下面的每一条说明:

  • 构建由 SDK 驱动。 你不需要自己安装 ARM 编译器、CMake、Python 或 ST 工具。仓库固定了一个确切的 OpenMV SDK 版本(SDK_VERSION 文件——撰写本文时为 1.6.0),而 make sdk 会下载该 SDK 并将其解包到 ~/openmv-sdk-<version>/。随后构建会将 SDK 的 gccllvmcmakepython 以及 ST 工具目录添加到 PATH 的前面。这意味着每个人都使用完全相同的工具链进行构建,且主机端的设置极为简单。

  • 没有原生的 Windows 构建。 工具链和构建脚本仅面向 Linux(x86-64)和 macOS(arm64)。在 Windows 上你需要在 WSL(Windows Subsystem for Linux)内构建,它是一个真正的 Linux 环境——因此一旦安装了 WSL,Windows 用户就完全按照 Linux 说明操作。基于 Docker 的构建和 Linux 虚拟机也是可选方案。

在任何受支持的系统上,高层次的流程始终是:

  1. 安装一个编辑器(VS Code)。

  2. 获取一个类 Linux 的 shell(原生 Linux、macOS,或 Windows 上的 WSL)。

  3. 克隆仓库及其子模块。

  4. make sdk —— 一次性安装工具链。

  5. make -C lib/micropython/mpy-cross —— 构建字节码编译器。

  6. make TARGET=<board> —— 构建固件。

  7. 刷写它(OpenMV IDE 或 dfu-util)。

  8. 可选地,接上 J-Link 并进行调试。

下面的页面会按顺序逐步介绍每一步。