#嵌入式设备 #命令行 #命令行工具 #USB设备 #调试 #串行 #bobbin

应用 bobbin-cli

自动化嵌入式开发工作流程的命令行工具

8个版本

使用旧的Rust 2015

0.8.8 2019年6月26日
0.8.7 2019年5月11日
0.8.5 2019年3月11日
0.8.4 2019年2月26日
0.8.0 2017年7月21日

#606 in 硬件支持

MIT/Apache

160KB
4K SLoC

Bobbin-CLI

bobbin-cli是一个工具,旨在通过统一的CLI简化嵌入式设备的构建、部署、测试和调试。bobbin-cli理解Rust的cargo / xargo包管理器,但也可以与Make或其他任何构建系统一起工作。

bobbin-cli具有以下主要功能区域

  • 设备枚举和选择。bobbin-cli识别许多类型的USB调试器和加载器,并允许您为每个项目设置过滤器,以便即使多个设备连接到您的计算机,它也知道要使用哪个设备。

  • 构建管理。bobbin-cli自动使用xargo构建您的项目,并读取命令行参数和您的Cargo.toml文件以自动确定要使用的输出二进制文件。您也可以使用Make,需要指定输出二进制文件路径的参数。

  • 部署。对于受支持的设备,bobbin-cli可以自动使用适当的闪存加载工具(OpenOCD、JLinkExe、bossac或teensy_cli_loader)上传输出二进制文件。

  • 测试和调试。如果可用,bobbin-cli可以自动连接并显示所选设备的虚拟串行控制台。您还可以使用构建阶段生成的输出二进制文件启动OpenOCD和gdb的实例。

有关各种流行开发板的LED闪烁演示集合,请参阅 bobbin-blinky

主机平台

目前支持MacOS和Linux,Windows支持计划中。

支持设备

调试探针

当前支持

  • J-Link - 包括CDC(虚拟串行端口)支持。
  • ST-Link/V2 - 支持V2和V2.1设备,包括CDC(虚拟串行端口)和SWO Trace(可选,需要libusb)。
  • CMSIS-DAP - 包括CDC(虚拟串行端口)支持。
  • DAPLINK - 包括MSD(存储设备)和CDC(虚拟串行端口)支持。
  • TI ICDI - 包括CDC(虚拟串行端口)支持。
  • Black Magic Probe - 包括CDC(虚拟串行端口)支持。

即将推出

带嵌入式调试探针的开发板

以下产品系列中的开发板包含应受支持的嵌入式调试探针。

注意:许多开发板支持OpenSDA,允许安装不同的固件。调试探针可能支持CMSIS-DAP、DAPLINK、J-Link和PEmicro固件变体。请确保升级到最新的固件版本,并确保安装了支持OpenOCD(CMSIS-DAP/DAPLINK)或J-Link的变体。请参阅升级开发板固件

带闪存加载器支持的开发板

以下产品系列中的开发板使用受支持的闪存加载器。

先决条件

构建工具

这些工具必须安装到您的PATH中。

调试器/加载器工具

您必须安装适当的工具,以便用于您希望使用的调试探针/开发板。

  • OpenOCD - 对于STLink、DAPLINK、CMSIS-DAP和TI ICDI调试探针,需要0.10或更高版本
  • J-Link - 对于J-Link调试探针是必需的。
  • Bossa - 对于Arduino和Feather设备是必需的
  • Teensy加载器 - 对于Teensy设备是必需的
  • libusb - 对于STLink SWO Trace支持是必需的
  • dfu-util - 对于STM32 DFU引导加载程序支持是必需的

开发板固件

如果您使用的是带嵌入式调试探针的开发板,请确认您知道安装了什么调试固件,并且它是最新的。请参阅开发板固件

安装

注意:目前仅支持Linux和macOS主机。

从cargo安装

$ cargo install bobbin-cli

从github安装

$ git clone https://github.com/bobbin-rs/bobbin-cli.git
$ cd bobbin-cli
$ cargo install

使用ST-Link SWV Trace支持安装

$ cargo install --features stlink

用法

可执行文件名为bobbin

帮助

您可以通过使用bobbin -h来显示详细的帮助文本。

Bobbin检查

使用"bobbin check"列出所有Bobbin依赖项的版本号。"未找到"将显示如果依赖项不可用。

$ bobbin check
      Rust 1.20.0-nightly (83c659ef6 2017-07-18)
     Cargo 0.21.0-nightly (f709c35a3 2017-07-13)
     Xargo 0.3.8
       GCC 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496]
   OpenOCD 0.10.0+dev-00092-g77189db (2017-03-01-20:42)
     JLink V6.15c (Compiled Apr 24 2017 19:07:08)
     Bossa 1.7.0
    Teensy 2.1
  dfu-util 0.9

在报告问题时,请包括"bobbin check"的输出。

Bobbin列表

使用"bobbin list"查看连接到您主机的所有调试探针和开发板。

$ bobbin list
ID       VID :PID  Vendor                   Product                          Serial Number
4c01a4ad 1366:0105 SEGGER                   J-Link                           000621000000
14a7f5da 03eb:2157 Atmel Corp.              EDBG CMSIS-DAP                   00000000EZE000005574
b7e67550 0483:374b STMicroelectronics       STM32 STLink                     0673FF485550755187121723
a3ef65e3 0483:374b STMicroelectronics       STM32 STLink                     0667FF555654725187073723
cb46720d 1cbe:00fd Texas Instruments        In-Circuit Debug Interface       0F007E1A
8c6bbec5 0d28:0204 ARM                      DAPLink CMSIS-DAP                0260000025414e450049501247e0004e30f1000097969900
f95f4aca 0d28:0204 ARM                      DAPLink CMSIS-DAP                0240000034544e45001b00028aa9001a2011000097969900
c2f3dc42 0483:374b STMicroelectronics       STM32 STLink                     0670FF484957847167071621
$

设备ID是USB供应商ID、USB产品ID和USB序列号(如果有的话)的哈希值。"bobbin list"显示设备ID的前八个十六进制数字,而"bobbin info"显示完整的64位ID。

Bobbin信息

要查看设备的详细信息,请使用"bobbin info"子命令。

$ bobbin -d 4c01 info
ID               c2f3dc42b4aadc58b6dfa98ce527dd436e3e4fa5
Vendor ID        0483
Product ID       374b
Vendor           STMicroelectronics
Product          STM32 STLink
Serial Number    0670FF484957847167071621
Type             STLinkV21
Loader Type      OpenOCD
Debugger Type    OpenOCD
CDC Device       /dev/cu.usbmodem141413
OpenOCD Serial   hla_serial 0670FF484957847167071621
$

如果您连接了多个设备,您可以通过使用命令行参数-d来选择特定的设备。bobbin-cli还会在./bobbin/config的YAML配置文件中查找设备过滤器指令。

$ cat .bobbin/config
[filter]
device = "c2f3dc42"

Bobbin构建

bobbin build运行xargo(默认)或make来构建您的应用程序。如果使用xargo,bobbin-cli将通过任何--target、--bin、--example或--release参数进行传递。

完成时,bobbin-cli将在二进制文件上运行arm-none-eabi-size并显示输出。

$ bobbin build
   Compiling blue-pill v0.1.0 (file:///home/bobbin/bobbin-blinky/blue-pill)
    Finished dev [optimized + debuginfo] target(s) in 0.50 secs
   text	   data	    bss	    dec	    hex	filename
    152	      0	      4	    156	     9c	target/thumbv7em-none-eabihf/debug/blue-pill
$

Bobbin加载

bobbin load 运行 bobbin build,然后,如果成功,使用所选的调试器或加载器将二进制文件加载到设备上,如有需要,使用 objcopy 转换为适当的格式。您可以包含 --target、--bin、--example 或 --release 参数,这些参数将被传递给 bobbin build

bobbin load 将解释构建参数以及 Cargo.toml 文件,以确定二进制文件的路径。

$ bobbin load
   Compiling blue-pill v0.1.0 (file:///home/bobbin/bobbin-blinky/blue-pill)
    Finished dev [optimized + debuginfo] target(s) in 0.13 secs
   text	   data	    bss	    dec	    hex	filename
    152	      0	      4	    156	     9c	target/thumbv7em-none-eabihf/debug/blue-pill
     Loading target/thumbv7em-none-eabihf/debug/blue-pill.hex
    Complete Successfully flashed device
      Loader Load Complete
$

某些设备需要手动干预才能进入引导加载程序模式;您应该在运行 bobbin load 之前这样做。

注意:许多调试器和加载器需要额外的配置

  • OpenOCD:当前目录中必须存在配置正确的 openocd.cfg 文件。bobbin 将添加适当的 OpenOCD 命令行参数以选择特定的设备。
  • J-Link:您必须通过 --jlink-device 命令行参数或在 .bobbin/config 文件中指定设备类型。
  • Teensy Loader:您必须通过 --teensy-mcu 命令行参数或在 .bobbin/config 文件中指定设备类型。

Bobbin 运行

bobbin run 运行 bobbin load,然后,如果成功,打开连接设备的串行控制台以显示输出。使用 Control-C 来终止此控制台查看器。

如果所选设备没有关联的串行端口,则将跳过此步骤。

您可以使用 --console 参数手动指定串行设备,或使用 --noconsole 如果您根本不想运行控制台查看器。

注意:串行查看器当前硬编码为 115,200 波特

如果 bobbin-cli 使用 SWO 跟踪支持编译,您可以使用 --itm 参数来显示 ITM 输出而不是运行串行控制台。您还需要传递 --itm-target-clock 参数与目标时钟速度。

$ bobbin run
   Compiling blue-pill v0.1.0 (file:///home/bobbin/bobbin-hello/blue-pill)
    Finished dev [optimized + debuginfo] target(s) in 0.13 secs
   text	   data	    bss	    dec	    hex	filename
    152	      0	      4	    156	     9c	target/thumbv7em-none-eabihf/debug/blue-pill
     Loading target/thumbv7em-none-eabihf/debug/blue-pill.hex
    Complete Successfully flashed device
      Loader Load Complete
     Console Opening Console
Hello World 1
Hello World 2
Hello World 3
^C
$

Bobbin 测试

bobbin test 运行 bobbin run,然后解释串行输出,寻找表示测试进度和完成的标签。

$ bobbin test
   Compiling frdm-k64f v0.1.0 (file:///home/bobbin/bobbin-boards/frdm-k64f)
    Finished dev [optimized + debuginfo] target(s) in 0.61 secs
   text	   data	    bss	    dec	    hex	filename
   6252	    428	    408	   7088	   1bb0	target/thumbv7em-none-eabihf/debug/frdm-k64f
     Loading target/thumbv7em-none-eabihf/debug/frdm-k64f
    Complete Successfully flashed device
      Loader Load Complete
     Console Opening Console
[start] Running tests for frdm-k64f
[pass] 0
[pass] 1
[pass] 2
[pass] 3
[pass] 4
[done] All tests passed
$

bobbin test 识别 [start]、[pass] 和 [done] 标签,并以返回代码 0 退出。它还识别 [fail]、[exception] 和 [panic] 标签,这将导致它以返回代码 1、2 或 3 退出。所有其他输出都将被忽略。

如果行与行之间有超过 5 秒的延迟或整个测试完成需要 15 秒,测试运行器将以返回代码 1 退出。将来,这些超时将是可配置的。

其他子命令

bobbin reset 重置目标设备。

bobbin halt 如果支持,则停止目标设备。

bobbin resume 如果支持,则恢复目标设备。

bobbin console 使用所选设备的串行端口以 115,200 的速度启动控制台查看器会话。

bobbin itm 使用所选设备启动 itm 查看器会话。

bobbin screen 使用所选设备的串行端口以 115,200 的速度启动 screen 会话。

bobbin openocd 使用所选设备启动 openocd 会话。

bobbin jlink 使用所选设备启动 JLinkGDBServer 会话。

bobbin gdb 使用当前目标二进制文件作为可执行文件启动 GDB 会话。对于原生支持 GDB 的调试探针,此命令将直接连接到设备;对于使用 OpenOCD 或 JLinkGDBServer 的调试探针,您必须手动使用 target remote :3333 或在 .gdbinit 文件中。

指定二进制目标

如果您不使用 xargo / cargo 作为构建管理器,您可以选择将输出二进制路径作为第一个未标记的参数。例如

$ bobbin run build/blinky.elf

将使用 build/blinky.elf 作为运行的目标二进制文件。

$ bobbin test build/blinky.elf

将加载并测试 build/blinky.elf。

配置

选择设备

如果您连接了多个调试探针,您可以告诉 Bobbin 在每个目录级别使用哪个设备。Bobbin 将在 .bobbin 目录 (.bobbin/config) 中查找 TOML 配置文件。

要选择特定设备,创建一个带有 "device" 键的 [filter] 部分,该键包含设备 ID 的前缀。例如,

$ bobbin list
ID       VID :PID  Vendor                   Product                          Serial Number
f95f4aca 0d28:0204 ARM                      DAPLink CMSIS-DAP                0240000034544e45001b00028aa9001a2011000097969900
8c6bbec5 0d28:0204 ARM                      DAPLink CMSIS-DAP                0260000025414e450049501247e0004e30f1000097969900
cb46720d 1cbe:00fd Texas Instruments        In-Circuit Debug Interface       0F007E1A

$ mkdir .bobbin
$ cat > test
[filter]
device = "f95f4aca"
$ bobbin list
ID       VID :PID  Vendor                   Product                          Serial Number
f95f4aca 0d28:0204 ARM                      DAPLink CMSIS-DAP                0240000034544e45001b00028aa9001a2011000097969900

OpenOCD

当使用 OpenCD 调试探针/开发板时,您必须在项目目录中有一个 openocd.cfg 文件,该文件提供调试器和正在使用的设备的正确配置。

例如,对于 FRDM-K64F

$ cat openocd.cfg
source [find interface/cmsis-dap.cfg]
source [find target/kx.cfg]
kx.cpu configure -event gdb-attach { reset init }

如果您只连接了一个此类调试探针,则应能够运行 "openocd" 并成功连接到设备

$ openocd
Open On-Chip Debugger 0.10.0+dev-00092-g77189db (2017-03-01-20:42)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.
Info : add flash_bank kinetis kx.flash
adapter speed: 1000 kHz
none separate
cortex_m reset_config sysresetreq
Info : CMSIS-DAP: SWD  Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : CMSIS-DAP: FW Version = 1.0
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : MDM: Chip is unsecured. Continuing.
Info : kx.cpu: hardware has 6 breakpoints, 4 watchpoints
^C
$

Bobbin 将使用额外的命令行参数调用 OpenOCD,指定要打开的设备的 USB 串行号。

J-Link 调试探针需要指定目标 MCU 的设备标识符。您必须通过使用 --jlink-device=<JLINK-DEVICE> 命令行参数或将 jlink-device 键添加到 .bobbin/config 文件的 [loader] 部分来指定此信息

[loader]
jlink-device = "S32K144"

您可以在 J-Link - 支持的设备 查看设备列表。

Teensy Loader

teensy_loader_cli 需要一个额外的命令行参数 --teensy-mcu=<MCU>,该参数告诉它正在使用的确切 MCU。您需要将 teensy-mcu 键添加到 .bobbin/config 文件的 [loader] 部分中

[loader]
teensy-mcu = "mk20dx256" # Teensy 3.2
[loader]
teensy-mcu = "mk64fx512" # Teensy 3.5
[loader]
teensy-mcu = "mk66fx1m0" # Teensy 3.6
[loader]
teensy-mcu = "mkl26z64" # Teensy LC

使用 'teensy_loader_cli --list-mcus' 查看支持的 MCU 列表。

BOSSA

如果您使用的是 bossac 1.9 或更高版本,或者 1.8 及更高版本的 M4 板,您可能需要指定启动闪存的偏移地址。这是因为默认情况下 bossac 将从地址 0x0000 开始闪存,这可能是您的锁定引导加载程序所在的位置。

这些值似乎适用于 Adafruit M0/M4 设备及其 UF2 引导加载程序,如 Feather M0/M4、Circuit Playground Express 和 NeoTrellis M4

  • 对于 M0 设备,使用 --offset 0x2000
  • 对于 M4 设备,使用 --offset 0x4000

您也可以在 .bobbin/config 文件的 [loader] 部分中指定此信息

[loader]
offset = "0x2000" # M0
[loader]
offset = "0x4000" # M4

有关 UF2 引导加载程序和 BOSSA 的更多信息,请参阅 Adafruit 的 UF2 引导加载程序详情 页面。

依赖项

~14MB
~261K SLoC