在终端执行:
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
首次准备软件时执行:
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状态为 IDLE、free_bd=64、dma_error=0。
仅在需要重新加载驱动且采集程序已退出、设备无使用者时执行下面的卸载命令,再执行上面的加载命令。它们不属于每次采集的必要步骤:
rmmod ddaq_dma_drv
rmmod ddaq_ctrl_drv
查看当前配置文件:
./ddaq_cli config show
也可直接查看原文件:
cat ./ddaq_config.yaml
有两种配置方法,按本轮修改范围选择:
ddaq_config.yaml 包含 acquisition、五张子卡的 pga.cards 和 network.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=PASS、config_apply=PASS、compare=MATCH、mismatch_count=0。validate 仅检查文件,不会写入硬件;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。
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 等命令核对 raw 与 active,检查原始配置参数信息是否在载板上完成配置,再运行 ./ddaq_cli autocompare all。第 7 节列有每个参数的单项设置格式。
通过下述指令完成上位机 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
本版本记录中的 ./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=COMPLETE、reason=shot complete、最终 state=IDLE,且DMA错误和溢出为0。
在载板SDK目录执行:
./ddaq_cli state --out ./ddaq_state.yaml
cat ./ddaq_state.yaml
成功提示为 [OK] state written to ./ddaq_state.yaml。每次配置后可以重新导出;上位机解析数据应使用与该次采集对应的状态文件。
以下为格式示例,参数值应按本次试验目标更换;set 要在非采集状态执行。每类命令执行后建议用对应的 get ... all、config show、autocompare all 和 status 检查,不把“命令退出成功”单独当作端到端采集成功。
./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_samples 是 shot 模式目标点数;sample_points 是 PL 业务接口的采样点参数,当前记录用于 blob 测试;sample_coef 为采样系数,示例 1;capture_mode 可选 shot 或 stream。这些数值均是示例,不应在未核对采集任务时整段照抄。
rt_mask0~rt_mask4 分别对应子卡 0~4 的 UDP 实时传输通道;rm_mask0~rm_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 收包数。
先读取,再按 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。
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 testpmd 的 show port info 0 核对,不应填管理网口 eno1 的 MAC。改完执行 ./ddaq_cli autocompare net;若需要重新按整份 YAML 下发,回到第 3.1 节。更换 PL 源 IP 后,如现场设备有 ARP/交换机缓存,需重新核实链路与到达情况。
| 现象 | 处理 |
|---|---|
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插件快速发布