语法
全局选项
命令
命令参考
列出 Net(默认)
列出 Lager Box 上全部已保存的 Net。不提供子命令时就是这个默认行为。
只有当至少有一个 Net 具有相应值时,
Script、OpenOCD 和 Purpose 列才会出现。运行 lager nets show NAME 可以看到完整的 purpose 文本。
输出示例:
add
通过指定名称、类型、通道和仪器地址创建一个新的 Net。
NAME- 该 Net 的唯一名称(例如supply1、debug_main)ROLE- Net 类型:power-supply、battery、solar、debug、adc、dac、gpio、scope、logic、eload、uart、usb、webcam、arm、watt-meter、energy-analyzer、thermocouple、i2c、spi。旧的写法supply和batt作为输入别名被接受,并归一化为power-supply/battery—— 保存的 Net 总是带有规范角色。CHANNEL- 通道标识,与lager instruments列出的一致(例如1、AIN0、FIO0、I2C0、STM32F4)ADDRESS- VISA 地址或设备路径,与lager instruments列出的一致(例如USB0::0x0CD5::0x0007::::INSTR)
--box TEXT- Lager Box 名称或 IP--jlink-script FILE- 调试 Net 的 J-Link 脚本文件(保存在 Box 上)--openocd-config FILE- 调试 Net 的 OpenOCD.cfg/.tcl文件(保存在 Box 上)--sda PIN/--scl PIN-i2cNet 的自定义 LabJack 引脚--cs PIN/--sck PIN/--mosi PIN/--miso PIN-spiNet 的自定义 LabJack 引脚--interface A|B|C|D- FT2232H 或 FT4232H 上gpio、i2c或spiNet 的 FTDI 通道。默认是A。请参阅下面的多通道 FTDI 调试适配器。
U3 没有 MIO 引脚。它的
FIO0-FIO3 是固定的模拟输入,因此 Lager 拒绝把它们用于 gpio、i2c 和 spi Net。
U3 的 EIO 和 CIO 线位于它的 DB15 连接器上。
给出引脚选项时,CHANNEL 参数会被忽略 —— 请传 custom。如果所选引脚与另一个已保存的 LabJack Net 重叠,会打印警告,但 Net 仍会创建。
--cs 是可选的:做 3 线 SPI、手动控制片选时可以省略它。
示例:
--jlink-script 选项只适用于调试 Net。用在其他 Net 类型上时会打印警告,并忽略该选项。- Net 名称必须在所有类型中全局唯一
- (角色、仪器、通道、地址)这个四元组必须与某台已连接的仪器匹配
- 通道必须是 Box 为该角色提供的通道之一。运行
lager instruments查看列表。 - 地址必须唯一标识一台设备。请参阅下方的同型号的两台设备。
- 通道绑定遵循下方通道与角色约束中描述的按仪器规则
add 会打印该角色的有效通道,并以代码 1 退出:
FIO0-FIO3 创建 gpio、i2c 或 spi Net 时出现。
通道列表保存在 Box 上。较新的 CLI 对较旧的 Lager Box 会按较旧的列表校验。请运行
lager update 获取最新列表。通道与角色约束
不同的仪器系列把 Net 绑定到通道的方式不同。Lager 把每一台受支持的仪器归入三个类别之一,并在add、add-all 和 TUI 中一致地执行这些规则。
1. 多通道仪器
具有物理上独立的输出/输入的仪器。每个通道都是自己的一路电路,可以承载自己的 Net。
规则: 每个
(仪器, 地址, 角色, 通道) 四元组最多一个 Net。共享 (仪器, 地址, 角色) 但通道不同的两个 Net 没有问题 —— 多通道正是为此而生。
2. 单通道多模式仪器
只有一路物理通道、可以运行在若干模式之一、但不能同时运行多个模式的仪器。角色告诉 Box 要把芯片切换到哪种固件模式。Lager 对这类芯片分两组区别对待。 单路输出仪器(每个角色一个 Net,并给出提示):
规则: 同一颗芯片上每个角色可以保存一个 Net。当该芯片已经有一个 Net 时,
add 会打印这条提示,并保存第二个 Net:
add-all 不会替您挑选角色:它会跳过该芯片并给出警告。
TUI 也不允许您在一批操作中同时选中一颗芯片的两个角色。
模式互斥的芯片(总共只能有一个 Net):
规则: 每个
(仪器, 地址) 最多一个 Net。一旦该芯片上保存了任意角色,其他所有角色都会从 add-all 和 TUI 的可添加列表中消失。要切换模式,请先删除已有的 Net。
这些芯片在 cli/commands/box/nets.py 和 cli/commands/box/net_tui.py 中由 _SINGLE_CHANNEL_INST(Keithley、EA)和 _MODE_EXCLUSIVE_INST(FTDI_FT232H)跟踪。
3. 单角色调试探针
独立的调试器设备 —— 一个探针驱动一个目标 MCU。
规则: 每个
(仪器, 地址) 最多一个 debug Net。
4. 多通道 FTDI 调试适配器
FT2232H(2 个通道:A、B)和 FT4232H(4 个通道:A、B、C、D)在物理上提供多个 USB 接口。通道 A 和 B 带有 MPSSE 引擎;在 FT4232H 上,C 和 D 没有。这一点是按Net 类型而不是按芯片起作用的。
debug、spi 和 i2c 都是 MPSSE 协议,因此只能用 A 和 B。
gpio 以异步 bitbang 方式运行,不需要 MPSSE,四个通道都能用。用户为每个 Net 指定接口。
调试 Net 把通道编码在设备字段中:
@A/@0、@B/@1、@C/@2、@D/@3。没有 @ 后缀的设备默认使用 OpenOCD 接口配置所选的接口(通常是通道 A)。
GPIO、I2C 和 SPI Net 在添加 Net 时通过 --interface 指定通道:
lager nets add 会把该通道作为 params.interface 存进 Net 记录。没有 interface 的 Net 使用通道 A,那也是 FT232H 唯一的通道。Net 管理器 TUI 不会询问通道,因此它添加的这类 Net 都在通道 A 上。
lager nets add 会拒绝该芯片在这种 Net 类型上不具备的通道,并指出哪些通道可用。i2c 或 spi Net 不能使用通道 C 或 D,因为这两个通道没有 MPSSE 引擎。gpio Net 可以使用该芯片具备的任意通道。对于您手工编辑的 Net 记录,Box 侧的驱动适用同样的规则,并且同样接受 A-D 或 0-3。
UART Net 按 tty 路径区分通道。USB 扫描器会枚举绑定到该芯片 USB 序列号的每一个 /dev/ttyUSB<N>。每一个都会作为独立的可添加项出现,因此在 FT4232H 上您最多会看到四个 UART 选项。
规则: 通道是 Net 身份的一部分。调试 Net 按 (仪器, 地址, 通道后缀) 唯一,gpio、i2c 和 spi Net 按 (角色, 仪器, 引脚, 地址, interface) 唯一。因此单颗 FT2232H 可以承载:
@A上的一个debugNet@B上的一个debugNet- 一个
uartNet,位于您没有用于 MPSSE 的那些通道所对应的某个/dev/ttyUSB<N>上 --interface所指定的每个通道上的gpio、i2c和spiNet。同一个引脚号可以在每个通道上各承载一个 Net
debug@A 和 接口 A 上的 spi Net)是用户的责任;Box 目前不校验这一点。
快速判断表
同型号的两台设备
Lager 是根据设备地址、而不是根据型号来判断能否创建 Net 的。包含唯一序列号的地址唯一标识一台设备。同一台 Lager Box 上有两台该型号的设备时,两台都能工作。例如,两台 8 端口 Acroname 集线器可以提供十六个usb Net。
LabJack T7 和 LabJack U3 不报告序列号,因此它们的地址中序列号字段为空。同一台 Lager Box 上的两台 T7 或两台 U3 会报告相同的地址。
Net 无法说明它指的是哪一台,因此 Lager 拒绝创建:
add 会以代码 1 退出。add-all 和 TUI 会用同样的信息跳过这些设备。
lager instruments 会隐藏它们并打印该信息。同一台 Lager Box 上一台 T7 加一台 U3
可以正常工作,因为它们的地址不同。
add-all
为所有已连接仪器的所有可用通道自动创建 Net。这在快速配置一台新的 Lager Box 时很有用。
--box TEXT- Lager Box 名称或 IP--yes- 跳过确认提示
add-all 会为它跳过的每一台设备打印一条警告。它会跳过报告相同地址的同型号两台设备,也会跳过没有任何已保存 Net 的单输出或模式互斥芯片 —— 那种芯片提供多个角色,而 add-all 不会替您选择。
add-batch
从 JSON 文件创建多个 Net,便于高效批量配置。
JSON_FILE- 含有 Net 定义的 JSON 文件路径
--box TEXT- Lager Box 名称或 IP
name、role、channel 和 address。可选的 instrument 键用于指明仪器;不写时,命令会根据地址查出仪器。该命令不读取其他键,因此记录中不能携带 params。若要设置自定义的 LabJack 引脚,请用 lager nets add 配合 --sda/--scl
或 --cs/--sck/--mosi/--miso。
校验:
在保存任何内容之前,命令会把每条记录的通道与 Box 为该角色提供的通道作比较。它会列出所有通道不正确的记录,打印 No nets were saved.,并以代码 1 退出:
- 地址不在当前仪器扫描结果中的记录,例如未连接的仪器
uart记录,因为它的通道是各设备的 tty 路径
assign
把 USB 串口线缆分配给 Box 无法自动识别的已知仪器。
有些仪器没有 USB 控制端口。您通过通用的 USB 转串口适配器,用 RS-232 访问这类仪器 —— 例如接在 Prolific 线缆之后的 Rigol DP711 电源。
Box 只看得到适配器(一个 uart 设备),看不到它后面的仪器。
assign 在 Box 上记录下”这根线缆就是 DP711 的串行线”。此后扫描器就会报告仪器本身:它会出现在 lager instruments 和 TUI 中,您可以像对待任何自动识别的设备那样,用 lager nets add 为它创建 Net。
每根线缆只需分配一次;分配保存在 Box 上,重启和重新插拔之后依然有效。创建 Net 仍然是可以正常重复执行的步骤。
端到端示例(Rigol DP711):
--as-net 时,命令会打印出新仪器对应的完整 lager nets add 调用:
- 分配时线缆必须已插上 —— 它的 USB 身份(厂商/产品 ID)是从在线设备上读取的。
- 已分配仪器的 Net 使用持久的
serial://<vid>:<pid>/serial/<s>(或.../port/<p>)地址,而不是/dev/ttyUSB*路径,因此它们在 tty 重新编号、重启和换端口之后依然有效。 - 线缆被分配之后,它不再作为通用 UART 设备提供 —— 这条串行线属于那台仪器。
有些廉价的 USB 转串口仿制品共用同一个序列号(或者根本没有)。如果
assign 报告匹配到多根线缆,请改用 --port 把分配固定到 Box 的某个物理端口。代价是:把线缆换到别的端口之后,分配就失效了。serial:// 地址的已保存 Net 都会被自动删除,并在输出中报告。把线缆重新分配给另一台仪器时,以及把它的标识从 --serial 改为 --port 时,同样会发生这种级联删除。只有仅修改波特率的重新分配才会保留已有的 Net。
当前可分配的设备: Rigol DP711(单通道 RS-232 电源)。运行 lager nets assign --list 查看您的 Box 支持的目录。
delete
按名称和类型删除某个 Net。
NAME- 要删除的 Net 名称NET_TYPE- 该 Net 的类型(supply、debug、adc、i2c、spi 等)
--box TEXT- Lager Box 名称或 IP--yes- 跳过确认提示
delete-all
删除 Lager Box 上全部已保存的 Net。这是一个危险操作。
--box TEXT- Lager Box 名称或 IP--yes- 跳过确认提示
rename
重命名已有的 Net。
NAME- 该 Net 当前的名称NEW_NAME- 新名称(必须唯一)
--box TEXT- Lager Box 名称或 IP
tui
启动基于终端的交互式界面来管理 Net。TUI 提供查看、创建和删除 Net 的可视化界面。
--box TEXT- Lager Box 名称或 IP
- 浏览全部已连接的仪器及其通道
- 在引导式提示下创建新 Net(+ Add Nets)
- 阅读 Add 界面上的警告和提示。它们集中显示在同一个区块中,Dismiss 按钮可以隐藏该区块。
- 为 LabJack T7 的
i2c或spiNet 选择自定义引脚。该行上的铅笔按钮会打开一个同时编辑 Net 名称和引脚的编辑器。添加该 Net 时也会打开引脚对话框,除非您已经设置过引脚。对话框会显示当前引脚(默认值:I2C SDA=FIO4/SCL=FIO5;SPI CS=FIO0/SCK=FIO1/MOSI=FIO2/MISO=FIO3)。您可以为每个信号选择任意 DIO 引脚,也可以把 CS 设为 none 以使用 3 线 SPI。如果您又选回默认值,该 Net 会恢复默认通道。已被某个已保存 Net 占用的引脚会显示警告 - 用行上的铅笔按钮重命名新建的 Net
- 用 Assign Device 把自定义串行设备(RS-232 仪器)分配给它们的 USB 线缆 ——
这是
assign的交互式版本,包含可选的创建 Net 步骤(--as-net) - 选中一个已保存的 Net,对它执行 Rename、Edit Details 或 Delete。Edit Details 设置 Purpose、Notes 和 Tags,它只改动这三个字段,Net 记录的其余部分保持不变。
- 用 Delete All Nets 删除全部已保存的 Net
- 键盘导航(按
q或Ctrl+C退出)
引脚编辑器只适用于 LabJack T7。您在 TUI 中添加的 LabJack U3
i2c 或 spi Net
使用默认引脚(SPI FIO4-FIO7,I2C FIO6-FIO7)。若要使用 U3 的其他引脚,请用 lager nets add 配合引脚选项。set-script
为已有的调试 Net 附加一个调试脚本 —— JLinkScript 或 OpenOCD 的 .cfg/.tcl。该文件保存在 Box 上,并在连接、烧录、擦除和复位操作中自动使用。
后端(J-Link 还是 OpenOCD)会根据两个信号自动识别:
- 探针的 USB VID,取自该 Net 的
address字段(J-Link →jlink;ST-Link、FTDI、CMSIS-DAP 等 →openocd)。 - 文件本身 —— 先看扩展名(
.JLinkScript→ jlink;.cfg/.tcl/.ocd→ openocd),对没有扩展名的文件或 stdin,则以内容嗅探作为判定依据。
set-script 会以明确的错误拒绝执行,并请您用 --backend 指定其一。
一个调试 Net 同一时刻只携带一个脚本。如果另一个字段已经设置,
set-script 会清除它,并在 stderr 上打印一条黄色提示,这样就不会有内容悄悄消失。
NAME- 调试 Net 的名称SCRIPT_PATH- 脚本文件的路径,或用-从 stdin 读取
--backend [jlink|openocd]- 强制使用指定后端而不自动识别(当探针与文件矛盾时必填)--box TEXT- Lager Box 名称或 IP
remove-script
移除调试 Net 上附加的调试脚本(J-Link 或 OpenOCD)。
NAME- 调试 Net 的名称
--backend [jlink|openocd]- 只移除指定后端的脚本(默认移除已设置的那一个)--box TEXT- Lager Box 名称或 IP
show-script
显示调试 Net 上附加的调试脚本内容。脚本内容写入 stdout,因此 > out.cfg 可以正常工作。形如 # OpenOCD config, 1247 bytes 的一行摘要写入 stderr,它告诉您看到的是哪个后端的脚本,并且不会污染重定向的结果。
NAME- 调试 Net 的名称
--backend [jlink|openocd]- 只显示指定后端的脚本(默认显示已设置的那一个)--box TEXT- Lager Box 名称或 IP
show
显示某个已保存 Net 的全部字段,包括用 describe 设置的用户元数据(purpose、notes、tags)。
NAME- Net 名称
--json- 以原始 JSON 输出--box TEXT- Lager Box 名称或 IP
state
显示每个已保存 Net 的实时硬件状态。Box 读取每台仪器,并为每个 Net 返回一段简短摘要。输出是 lager nets 的分组表格,在 Channel 之后多出一个 State 列。
--box TEXT- Lager Box 名称或 IP--json- 以原始 JSON 输出
没有探测方式的 Net 类型(例如
uart、spi、scope 和 logic)显示 –。
Box 如何读取这些 Net:
- Box 按仪器把 Net 分组,最多同时读取八台仪器。
- 所有仪器共用 8 秒的总预算。预算用尽时,每个没有响应的 Net 都报告
deadline。 - Box 逐个读取 USB 集线器。剩余预算不足 1 秒时它不再读取某个集线器,该集线器的 Net 报告
hub-skipped。 - 一次读取会获取与运行中的测试相同的仪器锁,因此该命令可能需要等待某个测试。
- Box 读取
i2cNet 时会做一次完整的总线扫描。 - 在 LabJack T7 上,一批操作读取全部
gpio、adc和dacNet,并且gpio读取不会改变引脚方向。 - 在 LabJack U3 上,
gpio或adc读取会把引脚设为数字或模拟模式。U3 的dacNet 在 Box 设置过值之前显示–。
–,并按原因把 Net 分组。没有探测方式的 Net 类型属于正常情况,因此脚注不会列出它们。
usb Net 还可能带有一个代码。当同一组中所有 Net 的代码相同时,脚注会多加一行补救建议:
JSON 输出:
--json 打印一个数组,每个已保存的 Net 对应一个对象。每个对象包含该 Net 的全部已存字段,外加以下字段:
没有这个端点的 Box 会打印一条提示,让您更新它。表格仍然会打印,只是每个
State
单元格都是 –。
describe
为已保存的 Net 设置元数据,让 AI 智能体(以及人)理解该 Net 在被测设备上的作用。自 lager 0.24.0 引入;这些字段通过
MCP 服务器用于智能体辅助测试。
--purpose、--notes 或 --tag(或 --clear-tags)中至少要提供一个。
0.46.0 及以上版本的 Lager Box 会通过 HTTP 提供这些字段,因此已接入的控制平面可以同步它们。
NAME- Net 名称
-p,--purpose TEXT- 一句话:该 Net 在被测设备上做什么-n,--notes TEXT- 可选备注(注意事项、跳线位置、示波器探测点)-t,--tag TEXT- 用于分类/匹配的标签(可重复)--clear-tags- 在添加新标签之前移除全部已有标签--box TEXT- Lager Box 名称或 IP
Net 类型参考
调试脚本工作流程
J-Link 和 OpenOCD 调试探针都可以携带一份自定义脚本,用于处理复位序列、时钟初始化、板级信号引脚分配,或其他设备专有行为。 Lager 为每个调试 Net 保存一个脚本 —— 要么是 JLinkScript,要么是 OpenOCD 的.cfg/.tcl,绝不会两个都有。它在连接、烧录、擦除和复位操作中自动应用该脚本。
.lager 配置文件中按项目配置 J-Link 脚本:
set-script)和项目级脚本(通过 .lager 配置)同时存在时,项目级脚本优先。
示例
说明
- Net 名称在所有类型中全局唯一
- 用
lager instruments --box <lager-box>查看可用的仪器和通道 - 第一次配置 Net 时,TUI 是最省事的方式
- 用
add-all可以快速为一台新的 Lager Box 配置合理的默认值 - LabJack T7、LabJack U3、Aardvark,以及 FTDI FT232H、FT2232H 和 FT4232H 适配器都支持 I2C 和 SPI Net
- 调试脚本(J-Link 和 OpenOCD 两者)以 base64 编码保存,并在调试操作期间自动解码
- 一个调试 Net 最多携带一个脚本(
jlink_script或openocd_config);set-script通过在另一个字段已存在时清除它来保证这一点

