关于 jetson-customize-pcie
面向 Jetson BSP 开发者的定制技能,用于配置 Tegra264 Thor 和 Tegra234 Orin 的各 PCIe 控制器行为。它根据载板资料和 UPHY 分配数据生成内核设备树覆盖片段,并检查其与另一技能管理的 ODMDATA 是否一致。
主要功能
- 01从板级资料发现 PCIe 拓扑
- 02推导控制器启用状态与通道设置
- 03生成内核设备树覆盖片段
- 04使用 dtc 和 fdtoverlay 验证覆盖
- 05核对与现有 ODMDATA 的一致性
- 06记录运行状态侧车文件
适用场景
- 01UPHY 通道重新分配后配置 PCIe 控制器
- 02排查刷写后插槽未能枚举的问题
- 03调整 PCIe 链路宽度或速度
- 04启用已布线的 PCIe 配套路径
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nvidia/ skills --skill jetson-customize-pcie安装后在 Claude Code 中输入/jetson-customize-pcie确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
BENCHMARK.mdskill-card.mdskill.oms.sigevals/evals.jsonreferences/gotchas.mdprocedure.md详细介绍
自定义 PCIe(每个控制器的状态/通道数/速度)
概述
Tegra264(Thor,[email protected])和 Tegra234(Orin,[email protected])上的 PCIe 分布在多个控制器中,这些控制器与 USB3/MGBE/UFS 共用 UPHY 通道池。每个控制器的运行行为由两个配置面共同决定,缺一不可:
| 配置面 | 目标 | 权威控制项 |
|---|---|---|
ODMDATA pcie@N_status=…(以及 pcie@N_max-link-speed、pcie@N_pcie-mode、pcie@N_clk-scheme、pcie-cN-endpoint-enable) | BPMP DTB 中的 /pcie/pcie@N | UPHY 通道供电、参考时钟门控、控制器侧电源轨 |
&pcieN 上的内核 DT overlay | 内核 DTB 中的 /bus@0/pcie@<addr> | 内核探测、通道宽度、链路速度、RC/EP 模式 |
禁用控制器时若跳过内核 overlay,内核仍会探测已断电的 PHY(dmesg 中出现链路超时)。禁用控制器时若跳过 ODMDATA token,BPMP 会让 PHY 保持启用状态。
由 Agent 决策,而非查表驱动——没有控制器表,也没有 questions.json。每个控制器、通道宽度、原理图布线的插槽,以及权威 DT 节点地址,都要在运行时根据文档、DTB 和载板引脚映射发现。
输出仅为内核 DT overlay 提交。每个控制器的 fragment@N 块会追加到组合自定义 overlay .dts 中,具体方式参见
../../references/bsp-customization-kernel-dtb.md,
然后提交到硬件仓库 bsp_sources/。
/jetson-build-source 负责编译组合 overlay 为 .dtbo,并管理其 Makefile 和 flash-conf 注册。
此技能不得编辑 ODMDATA="..."。 所有 ODMDATA token(pcie@N_status=…、pcie@N_max-link-speed、pcie@N_pcie-mode、pcie@N_clk-scheme、pcie-cN-endpoint-enable,以及 UPHY 侧面的 uphyX-config-N token 和用于清除配置的 UPHY_CONFIG="")均由 /jetson-customize-uphy 在载板 flash-conf fork 上通过一次原子提交写入。此技能使用的 UPHY 侧边栏分配表已经告知操作人员哪些控制器为 okay/disabled 或采用了逐通道配置;此技能只会将该表转换为内核 DT overlay 片段,并验证 overlay 是否与 customize-uphy 已提交的 ODMDATA 一致(第 8 步执行一致性检查——发现不一致时会报告,不会静默修正)。
何时调用
- 用户说“配置 PCIe”“启用 PCIe 控制器”“设置 PCIe num-lanes”“更改 PCIe 链路速度”,或要求切换
pcie@N_statustoken。 - 刷写后某个 PCIe 插槽或 M.2 插槽未枚举,或者链路训练后的通道宽度/速度不正确。
jetson-customize-uphy已运行,并重新分配了 PCIe 控制器之间的通道(例如从uphy0-config-7切换到启用 PCIe C3 的uphy0-config-6);现在需要启用相应的单控制器配置。jetson-customize-mgbe报告 QSFP 路径已布线,但内核未探测其 PCIe 侧配套设备(少见;XFI 配置)。
前置条件:
- 活动配置文件包含
reference_devkit:和custom_carrier:区块。 <source.root_path>/Linux_for_Tegra/.git存在(/jetson-init-source)。/jetson-derive-carrier已运行——载板 flash-conf fork 已加入 overlay 跟踪器。/jetson-customize-uphy已运行——其位于<workspace>/target-platform/<profile-stem>.jetson-customize-uphy.json的 JSON sidecar 决定每个控制器的enable状态。- 已注册或在提示词中提供真实来源文档:Adaptation Guide、Module Design Guide、SoC TRM。
- 存在
custom_carrier:时,必须同时提供documents.custom_carrier_schematic和documents.custom_carrier_pinmux_xls。 若缺少其中任何一项,必须拒绝运行——不能猜测自定义载板上的布线。仅使用参考开发套件的配置文件可跳过此检查。 dtc位于 PATH 中。
流程(摘要)
完整的分步说明请见
references/procedure.md。高级流程:
- 确定当前目标并打开权威文档(包括
<carrier-pinmap>、<ref-dtb>、<uphy-state>)。如果缺少<uphy-state>,则拒绝继续。 - 对比 PCIe 拓扑——开发套件与自定义载板——方法是反编译
<ref-dtb>,并在原理图中搜索PEX<N>_*网络标签。 - 使用
AskUserQuestion(multiSelect)询问要自定义哪些控制器。 - 逐个控制器验证:对
PE<N>_CLKREQ_L、PE<N>_RST_L及可选的PE<N>_WAKE_L,使用引脚映射、原理图和pin_verifier.py进行验证。 - 自动推导每个控制器的方案(根据
<uphy-state>确定enable, 根据 Adaptation Guide 确定lanes/speed,将mode硬性固定为"rc")→ 必须经过确认或自定义关卡。 - 将每个控制器的
fragment@N块(标记为/* custom-bsp: pcie:pcie@<addr> */)追加到bsp_sources/中的复合自定义 overlay.dts。预先运行dtc+fdtoverlay。 通过工作流的预览关卡提交。 不要编辑ODMDATA—/jetson-customize-uphy已在其单次原子性 ODMDATA 提交中写入pcie@N_status=…、pcie@N_max-link-speed、pcie@N_pcie-mode、pcie@N_clk-scheme和pcie-cN-endpoint-enable。 此技能只负责将每个控制器的方案转换为内核 DT overlay 片段。 - (此步骤已并入步骤 6 — 仅生成 overlay。)
- 交叉检查 ODMDATA 与 overlay 是否一致。若某一行存在矛盾,停止并询问用户如何恢复这两次提交。
切勿自行运行
git reset --hard。 - 将运行状态 JSON 旁文件写入
<workspace>/target-platform/<profile-stem>.jetson-customize-pcie.json并生成摘要,然后按照references/procedure.md第 9 步,通过依次发送AskUserQuestion提示来推进后续步骤链。 切勿用打印一行“Next step: …”来代替这些提示。
限制
- 模式硬性固定为 RC。 只有操作人员在步骤 5c 中传入
mode_override="ep"时,才会生成 Endpoint 模式。 enable由系统推导,不会询问。 分配了 UPHY 的控制器必须为okay; 未分配的控制器必须为disabled。- 不修改上游 BSP。 输出仅写入
Linux_for_Tegra/+bsp_sources/。 - overlay 合并预检仅用于健全性检查,并非生产构建。
/jetson-build-source才是权威流程。 - 不负责注册刷写配置中的 overlay。 该工作由
/jetson-build-source步骤 5.0a 负责。
故障排除
- 缺少
<uphy-state>→ 先运行/jetson-customize-uphy。 - 刷写后插槽未枚举 → 检查
dmesg | grep pcie; 重新验证 ODMDATA 中的pcie@<N>_status=okay与 overlay 片段是否一致 (参见references/procedure.md中的步骤 8 表格)。 - 链路训练后的宽度不正确 → 确认
<uphy-state>中的 UPHY 配置分配了预期的通道数;内核片段中的num-lanes必须一致。 compatible不匹配 → 修正复合根节点,而不是片段。UEFI plugin-manager 会在不匹配时静默跳过。- ODMDATA 与 overlay 行矛盾 → 询问用户;不要自动运行
git reset --hard。参见注意事项。 - 常见陷阱 — 请参见
references/gotchas.md(RC 固定、节点地址来源、默认禁用的控制器,以及与jetson-customize-uphy在同一文件中的交接)。
参考资料
references/procedure.md— 完整的九步流程(拓扑差异、计划推导、追加 overlay、ODMDATA 交叉检查、sidecar)。references/gotchas.md— 失败模式 + 不变量(RC 固定、地址来源、BPMP 移交)。../../scripts/pin_verifier.py— 通用 HSIO 引脚验证器(步骤 4)。../../references/platform_template.yaml— 由步骤 1 使用的documents:块。../../context/bsp-customization-workflow.md— overlay 编辑协议 + 提交消息预览门禁。../../references/bsp-customization-kernel-dtb.md— 复合 overlay 文件名 / 骨架 / 追加协议。../jetson-customize-uphy/SKILL.md— 负责 UPHY 通道分配的同级技能;其 sidecar 决定每个控制器的enable设置。../jetson-customize-pinmux/SKILL.md— 步骤 4 调用的同级技能(需操作员确认),用于修复 HSIO 引脚 SFIO 不匹配。../jetson-customize-mgbe/SKILL.md— 面向 MGBE 控制器的同级技能;采用相同的双面(ODMDATA + overlay)模式。../jetson-derive-carrier/SKILL.md— 必须先运行;生成在步骤 6 中编辑的载板 flash-conf 分支。../jetson-init-source/SKILL.md— 生成 overlay 跟踪器和 bsp_sources 仓库,供此技能提交更改。