载板PS端测试流程

1. 登录载板

在终端执行:

ssh petalinux@192.168.1.106

首次连接时核对载板身份后输入 yes,随后输入登录密码。这里的 192.168.1.106 是记录中的PS管理网口地址;不是下面配置的PL采集UDP地址。地址变化时修改此处。

SSH登录成功后,在载板终端执行:

sudo -i
cd /run/media/BOOT-mmcblk0p1/software/DDAQ_V1_1_SDK

2. 检查软件并加载驱动

首次准备软件时执行:

sha256sum -c SHA256SUMS.txt
chmod +x ./ddaq_cli

记录中两个驱动及 ddaq_cli 校验通过。配置YAML被编辑、状态YAML被重新生成后,会与原始校验值不同;应确认差异来自这些预期修改。

先检查是否已经加载:

lsmod | grep ddaq
ls -l /dev/ddaq*

尚未加载时执行对应命令,已经加载的驱动无需重复加载:

insmod ./ddaq_ctrl_drv.ko
insmod ./ddaq_dma_drv.ko bd_count=64 bd_size=1310720 timeout_ms=1000
ls -l /dev/ddaq*
./ddaq_cli debug dma all

应能看到 /dev/ddaq_ctrl/dev/ddaq_dma。记录中的初始DMA状态为 IDLEfree_bd=64dma_error=0

仅在需要重新加载驱动且采集程序已退出、设备无使用者时执行下面的卸载命令,再执行上面的加载命令。它们不属于每次采集的必要步骤:

rmmod ddaq_dma_drv
rmmod ddaq_ctrl_drv

3. 查看或修改配置

查看当前配置文件:

./ddaq_cli config show

也可直接查看原文件:

cat ./ddaq_config.yaml

有两种配置方法,按本轮修改范围选择:

3.1 按当前整份 YAML 写入所有配置

ddaq_config.yaml 包含 acquisition、五张子卡的 pga.cardsnetwork.board / network.host。先查看并确认整份文件中的值,尤其是本轮使用的子卡、两端网络地址及通道掩码。需要修改多个字段时可先备份,再用载板现有编辑器修改 YAML:

cp -p ./ddaq_config.yaml ./ddaq_config.yaml.bak
./ddaq_cli config show

修改完成后,依次校验、完整下发并核对硬件读回:

./ddaq_cli config validate
./ddaq_cli config apply --timeout-ms 5000
./ddaq_cli autocompare all
./ddaq_cli status

期望看到 validation=PASSconfig_apply=PASScompare=MATCHmismatch_count=0validate 仅检查文件,不会写入硬件;apply 才会按采集、网络、五张子卡 PGA 的顺序下发整份配置。若 apply 返回 PARTIAL 或失败,先检查具体失败字段;此前成功写入的部分可能仍已生效,不能当作全部成功。

也可指定另一份完整 YAML,例如 ./ddaq_cli config validate --file ./candidate.yaml./ddaq_cli config apply --file ./candidate.yaml --timeout-ms 5000。使用外部文件时,只有全部 PASS 才会更新默认 ddaq_config.yaml

3.2 只修改指定参数

set 适用于临时调整少量参数,并会下发该参数及更新配置文件;不必因单个参数修改而先手工编辑整份 YAML。复现记录最终使用的采样率、总点数和 blob 大小:

./ddaq_cli set sample_rate <目标采样率>
./ddaq_cli set total_samples <本轮单次采集任务目标总采集采样点数目>
./ddaq_cli set sample_points <本轮每个blob的采样点数>

命令成功后可用 ./ddaq_cli get sample_rate all 等命令核对 rawactive,检查原始配置参数信息是否在载板上完成配置,再运行 ./ddaq_cli autocompare all。第 7 节列有每个参数的单项设置格式。

4. 设置上位机 UDP 目的地址与载板地址

通过下述指令完成上位机 host 和载板 board 的 MAC、IP、子网掩码、网关和 UDP 端口设置。每条命令只设置一个字段,执行前逐项替换为现场真实、互不冲突的地址;两端若直接位于同一二层网络,IP 应在相应子网内。

./ddaq_cli set net host mac <目标mac地址>
./ddaq_cli set net host ip <目标ip地址>
./ddaq_cli set net host netmask <目标子网掩码>
./ddaq_cli set net host gateway <目标网关>
./ddaq_cli set net host port <目标UDP端口>

./ddaq_cli set net board mac <载板mac地址>
./ddaq_cli set net board ip <载板ip地址>
./ddaq_cli set net board netmask <载板子网掩码>
./ddaq_cli set net board gateway <载板网关>
./ddaq_cli set net board port <载板UDP端口>

载板源地址和目的地址分别查询:

./ddaq_cli get net board all
./ddaq_cli get net host all

5. 启动采集测试(当前为实时传输与 DMA 流盘绑定版本)

本版本记录中的 ./ddaq_cli start 绑定DMA流盘,必须提供 --out指明采集数据流盘存储地址。这是包含载板本地文件写入的采集流程,不是纯UDP启动命令。后续会更新为纯UDP采集流程和流盘解耦的方式,届时可在上位机直接抓包或接收数据。

启动前运行 ./ddaq_cli autocompare all./ddaq_cli status,确认配置匹配、未在采集,并核对实际采样率、点数与掩码。然后检查实际挂载位置和容量:

mount | grep DDAQ_NVME
df -h /run/media/DDAQ_NVME-nvme0n1

确认NVMe已挂载到上述目录,再创建数据目录:

mkdir -p /run/media/DDAQ_NVME-nvme0n1/data

先在上位机开启Wireshark抓包或接收程序,再在载板执行以下命令。此处沿用记录中成功的命令格式,使用时间戳区分每轮文件名:

DDAQ_OUT_FILE="/run/media/DDAQ_NVME-nvme0n1/data/udp_test_$(date +%Y%m%d_%H%M%S).bin"
./ddaq_cli start --out "$DDAQ_OUT_FILE" --verbose --timeout-ms 1000 --stop-timeout-ms 5000

父目录必须存在;无需提前创建 .bin 文件。记录中的路径错误来自:创建的是BOOT分区的 data,但 --out 指向NVMe分区的 data

单次采集完成后查看:

./ddaq_cli status
./ddaq_cli debug dma all
ls -lh "$DDAQ_OUT_FILE"

记录中成功结果为 status=COMPLETEreason=shot complete、最终 state=IDLE,且DMA错误和溢出为0。

6. 导出载板状态文件

在载板SDK目录执行:

./ddaq_cli state --out ./ddaq_state.yaml
cat ./ddaq_state.yaml

成功提示为 [OK] state written to ./ddaq_state.yaml。每次配置后可以重新导出;上位机解析数据应使用与该次采集对应的状态文件。

7. 常用配置指令速查

以下为格式示例,参数值应按本次试验目标更换;set 要在非采集状态执行。每类命令执行后建议用对应的 get ... allconfig showautocompare allstatus 检查,不把“命令退出成功”单独当作端到端采集成功。

7.1 采集参数

./ddaq_cli set sample_rate 100000
./ddaq_cli set total_samples 102400
./ddaq_cli set sample_points 5
./ddaq_cli set sample_coef 1
./ddaq_cli set capture_mode shot
./ddaq_cli set job_id 1
./ddaq_cli get all

sample_rate 为每秒采样数;total_samplesshot 模式目标点数;sample_points 是 PL 业务接口的采样点参数,当前记录用于 blob 测试;sample_coef 为采样系数,示例 1capture_mode 可选 shotstream。这些数值均是示例,不应在未核对采集任务时整段照抄。

7.2 实时传输和流盘通道掩码

rt_mask0rt_mask4 分别对应子卡 0~4 的 UDP 实时传输通道;rm_mask0rm_mask4 分别对应 DMA 流盘通道。每个掩码是 32 位数,0xffffffff 开启该卡的全部 32 个掩码位,0x00000000 全部关闭。下面只开启子卡 0~3 的全部实时通道,并只将子卡 0 的数据流盘;应按实际插卡和测试目的更改:

./ddaq_cli set rt_mask0 0xffffffff
./ddaq_cli set rt_mask1 0xffffffff
./ddaq_cli set rt_mask2 0xffffffff
./ddaq_cli set rt_mask3 0xffffffff
./ddaq_cli set rt_mask4 0x00000000
./ddaq_cli set rm_mask0 0xffffffff
./ddaq_cli set rm_mask1 0x00000000
./ddaq_cli set rm_mask2 0x00000000
./ddaq_cli set rm_mask3 0x00000000
./ddaq_cli set rm_mask4 0x00000000
./ddaq_cli get rt_mask0 all
./ddaq_cli get rm_mask0 all

单通道位掩码可写成 0x80000000,但具体位与物理通道的对应关系须按 FPGA 设计核对。关闭 rm_mask 的通道不会写零占位数据,不能仅凭文件长度推断 UDP 收包数。

7.3 PGA 子卡参数

先读取,再按 PGA 实际增益编码填写八个 32 位增益字:

./ddaq_cli get pga 0 all
./ddaq_cli set pga --target 0 --channels 32 --gain 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000
./ddaq_cli get pga 0 all

--target 可取 0~4,--channels 可取 0~32。--gain 必须是八个无空格、逗号分隔的 32 位字;此处的全零仅演示语法,不代表“某个确定增益倍率”。若需设为指定倍率,应先按硬件的 PGA 编码表计算这八个字,再执行命令。不要直接把倍率数字(如 2)填作整组 --gain

7.4 载板网络与目标上位机网络

board 是载板 PL 发包端,host 是接收端。每条命令只设置一个字段。下列地址用于展示语法,执行前逐项替换为现场真实、互不冲突的地址;两端若直接位于同一二层网络,IP 应在相应子网内。

./ddaq_cli get net board all
./ddaq_cli set net board mac 02:00:00:00:00:01
./ddaq_cli set net board ip 192.168.1.128
./ddaq_cli set net board netmask 255.255.255.0
./ddaq_cli set net board gateway 192.168.1.1
./ddaq_cli set net board port 1234
./ddaq_cli get net board all
./ddaq_cli get net host all
./ddaq_cli set net host mac 6c:b3:11:21:c5:37
./ddaq_cli set net host ip 192.168.1.100
./ddaq_cli set net host netmask 255.255.255.0
./ddaq_cli set net host gateway 192.168.1.1
./ddaq_cli set net host port 8010
./ddaq_cli get net host all

命令行字段名是 port,而 YAML 中字段名是 udp_port。上位机 host.mac 应填实际接收口的 MAC;如使用 VFIO,可由 DPDK testpmdshow port info 0 核对,不应填管理网口 eno1 的 MAC。改完执行 ./ddaq_cli autocompare net;若需要重新按整份 YAML 下发,回到第 3.1 节。更换 PL 源 IP 后,如现场设备有 ARP/交换机缓存,需重新核实链路与到达情况。

8. 常见报错对应检查

现象 处理
BOOT目录 Permission denied SSH登录后在载板执行 sudo -i,再进入SDK目录。
vim: command not found 本镜像没有vim;优先用已验证的 ddaq_cli set 修改对应字段。
--out FILE is required 当前 start 命令要求输出文件。
/dev/ddaq_dma 不存在 检查并加载 ddaq_dma_drv.ko
输出文件路径不存在 检查实际挂载点,并创建与 --out 完全一致的父目录。
compare=MISMATCH 非采集状态下检查YAML、执行完整apply,再比较;若仍不一致保留具体字段输出。
SSH Broken pipe 重新SSH连接,再执行 sudo -i、进入SDK目录并查询状态;不要据此直接认定采集成功或失败。

本文章使用limfx的vscode插件快速发布