Jetson载板定制派生Skill jetson-derive-carrier

该技能用于从参考开发套件派生出自定义载板的板级文件集(flash-conf、BCT、nvpmodel等),创建DT overlay完成载板识别并在BSP中注册,使下游定制技能和启动流程落在自定义载板上。关键词:Jetson、自定义载板、载板派生、设备树overlay、BSP定制、Linux_for_Tegra、硬件定制。

硬件定制 0 次安装 0 次浏览 更新于 9/7/2026
名称 jetson-derive-carrier
描述 >- 通过派生载板文件并从参考开发套件搭建DT overlay来引导自定义载板。在jetson-init-source之后使用;不用于模块级或内核DTB更改。
版本 0.0.1
开源协议 “Apache-2.0” metadata: data-classification: public
作者 “Jetson Team” tags: - target-platform - custom-carrier - bring-up - setup domain: meta

jetson-derive-carrier

为在任何customize-*技能上自定义载板自定义首次运行门槛。根据target-platform-contract.md解析活动目标。 如果没有custom_carrier:块,或如果<source.root_path>/Linux_for_Tegra/.git缺失(先运行jetson-init-source),则拒绝。模板文件创建/复制行合并在一个overlay-tracker提交中,并直接复制到自定义载板重命名的目标路径——参考命名的原始文件永远不会暂存(参见Fork计划的本地规则,该规则覆盖了工作流中的标准原始文件+定制拆分);conf链发现遵循按板conf分发。 内核基础DTB派生——载板差异通过DT overlay分层叠加,通过OVERLAY_DTB_FILE连接。

标识符(来自活动配置文件):<chip>来自 reference_devkit.module.id通过目录(未知→警告,回退tegra234);<module-id>/<module-sku>来自reference_devkit.module<carrier-id>/<carrier-sku>来自reference_devkit.carrier<custom-id>/<custom-sku>/<custom-flash-conf>来自custom_carrier<real-conf> = readlink <bsp_image.root_path>/Linux_for_Tegra/<reference_devkit.flash_config>(NVIDIA约定<devkit>.conf<carrier>-<module>-a<rev>.conf;如果不是符号链接,则警告并将顶层视为真实文件并跳过符号链接包装行)。

<custom-id>是自定义载板标记,不一定是NVIDIA风格的pNNNN ID。在短横线形式的文件名和DT compatible字符串中原样使用。当目标文件族使用去p数字标记时,只有当<custom-id>匹配^p[0-9]{4}$时,才派生<custom-id-file-token>NNNN;否则使用<custom-id>不变。不要仅仅因为自定义载板ID不以p开头就拒绝它们。

说明

下面的Fork计划是指令集:一次发现遍历,然后逐行派生按板文件集,每次git commit前以提交消息预览门控。

Fork计划

该技能产生的每次git commit——在overlay tracker(Linux_for_Tegra/)或hardware/源仓库中——都经过提交消息预览门控。 向操作者展示暂存文件列表+建议消息,并要求在每次git commit前接受/编辑/取消;在取消时保持索引暂存以供手动解决。

即使字节未变化也物化重命名派生。 对于每个接受的fork计划行,创建并跟踪自定义载板目标路径;不要因为fork只是重命名/复制或与参考字节相同而跳过缺失目标。这包括BCT派生,如pinmux、GPIO/GPIOINT、padvoltage/PMC、misc和MB2 misc。仅当Acceptance列允许、源是显式警告并跳过缺失、或预期目标路径已跟踪时跳过;在后一种情况下,报告为已派生且不要创建空提交。

模板文件创建/复制行合并为一个overlay-tracker提交,且参考命名的原始文件永远不会暂存 所有在overlay tracker中物化新(模板派生)文件的行——板flash-conf、flash-conf符号链接、MB1 BCT(pinmux、GPIO/GPIOINT、padvoltage/PMC、misc)、MB2 BCT(misc)、BPMP DTB(当选择时)、nvpmodel、nvfancontrol——直接复制<bsp_image.root_path>/Linux_for_Tegra/<rel>/<reference-name><source.root_path>/Linux_for_Tegra/<rel>/<custom-name>,并在暂存前应用任何内容编辑。参考命名的(以<carrier-id>-<carrier-sku>键的)文件名永远不会在overlay tracker中暂存或提交——只跟踪自定义载板重命名的文件。这覆盖了提交批处理中的标准原始+定制拆分。 所有这些行落在单个overlay-tracker提交中,添加: (i) 自定义载板命名文件在目标路径且内容已应用,(ii) flash-conf符号链接,以及(iii)重命名flash-conf内部针对性的flash-conf内容重写PINMUX_CONFIG / GPIO_CONFIG / GPIOINT_CONFIG / PMC_CONFIG / MISC_CONFIG / MB2_BCT(以及选择BPMP DTB时的BPFDTB_FILE)。编辑现有上游文件的行——nvpower.sh补丁——以及overlay连接(OVERLAY_DTB_FILE+=追加到刚创建的flash-conf派生,按提交批处理视为时间上不同的阶段)保持每个行自己的独立提交。DT overlay骨架提交在bsp_sources/hardware/,而不是overlay tracker,所以不受影响。提交消息预览门控在合并提交上只触发一次;警告并跳过的行不贡献,如果包中的每一行都已跟踪则完全省略提交。

发现(单次批处理遍历)

运行一次发现遍历;不要与暂存交错。不要截断列表——扫描目录中的每个候选文件名必须对匹配器可见。headtail| head -N| tail -N和任何其他限制行的过滤器在此步骤中超出范围;使用ls -1/find未裁剪,或对完整输出grep。截断可能导致当匹配文件在截止之后时错误的警告并跳过调用。捕获:

  • Flash-conf变量:DTB_FILE / TBCDTB_FILE / BPFDTB_FILE / PINMUX_CONFIG / PMC_CONFIG / GPIO_CONFIG / GPIOINT_CONFIGDTB_FILE / TBCDTB_FILE仅为参考捕获,以便overlay连接可以派生overlay文件名的<dtb-stem>——它们永远不被本技能重写。
  • BCT .dtsbootloader/generic/BCT/.dtsi兄弟文件位于上一层的bootloader/——而不是并排。
  • nvpmodel: nvpmodel_<module-id>_<module-sku>*.conf。nvfancontrol: nvfancontrol_<module-id>_<module-sku>_<carrier-id>_<carrier-sku>.conf
  • nvpower.sh锚点用于(a)–(d):<carrier-id> cvb分支、 <module-id>-<module-sku> SKU eliftegra<chip> nvpmodel 级联、tegra<chip> nvfancontrol级联。
文件/类别 发现 接受 Fork规则
板flash conf <real-conf> 总是 文件名sub <carrier-id>-<carrier-sku><custom-id>-<custom-sku>。内容sub是针对性的,不是全盘的:仅对本技能派生的变量重写RHS——PINMUX_CONFIGPMC_CONFIGGPIO_CONFIG / GPIOINT_CONFIGMISC_CONFIGMB2_BCT。其他载板键变量(DTB_FILETBCDTB_FILESCR_CONFIGPMIC_CONFIGDEVICEPROD_CONFIGPROD_CONFIGMINRATCHET_CONFIGUPHY_CONFIG、动态OVERLAY_DTB_FILE+=)必须保持参考值——它们的文件不在此派生,全盘sed会把它们指向不存在的文件。DTB_FILE / TBCDTB_FILE特别说明:基础DTB不派生;overlay行追加新的OVERLAY_DTB_FILE+=行代替。BPFDTB_FILE:可选额外提交。绝不触碰<chip><module-id>xxxx
Flash-conf符号链接 无条件 总是(如果<real-conf>不是符号链接则跳过) 新符号链接<custom-flash-conf> → flash-conf派生
MB1 BCT pinmux PINMUX_CONFIG + #include跟随¶ 总是 重命名规则†
MB1 BCT GPIO GPIO_CONFIG/GPIOINT_CONFIG + #include跟随¶ 总是 重命名规则†
MB1 BCT padvoltage PMC_CONFIG + #include跟随¶ 总是 重命名规则†
MB1 BCT misc MISC_CONFIG + #include跟随¶ 总是 重命名规则†
MB2 BCT misc MB2_BCT + #include跟随¶ 总是 重命名规则†
内核DTB + 源DTS (仅参考——见头部) 从不派生 基础DTB保持参考。不在overlay tracker中复制原始二进制;不在bsp_sources/hardware/中派生源DTS。载板差异完全位于DT overlay中(下一行)。
DT overlay骨架(新建) 无条件 总是 创建<source.root_path>/hardware/nvidia/<chip>/nv-public/overlay/<chip>-<custom-id>-<custom-sku>+<module-id>-<module-sku>.dts(骨架‡);在hardware/中提交,推送到origin
每目录Makefile注册 <source.root_path>/bsp_sources/hardware/nvidia/<chip>/nv-public/overlay/Makefile 总是 在最后一个字面命名dtbo-y +=条目之后追加dtbo-y += <chip>-<custom-id>-<custom-sku>+<module-id>-<module-sku>.dtbo(在$(addprefix $(makefile-path)/,$(dtbo-y))前缀块之前——插入dtbo-y += $(old-dtbo)之后会静默丢失.dtbo)。相同位置敏感习惯用法和片段如合成槽的Makefile补丁在../jetson-build-source/references/composite-registration.md#makefile-patch-idempotent-position-sensitive。在hardware/中提交。没有此行,nvidia-dtbs永远不会产生下一行OVERLAY_DTB_FILE+=引用的.dtboflash.sh会因缺少文件而在刷写中途中止。
Overlay连接 无条件 总是 OVERLAY_DTB_FILE+=",<chip>-<custom-id>-<custom-sku>+<module-id>-<module-sku>.dtbo"追加到flash-conf派生(额外提交)
nvpmodel配置 rootfs/etc/nvpmodel/nvpmodel_<module-id-num>_<module-sku>.conf 总是 文件名:追加_<custom-id-file-token>_<custom-sku>
nvfancontrol配置 rootfs/etc/nvpower/nvfancontrol/nvfancontrol_<module-id-num>_<module-sku>_<carrier-id-num>_<carrier-sku>.conf 总是 文件名:替换载板部分(如果源仅模块键,追加_<custom-id-file-token>_<custom-sku>
nvpower.sh补丁 rootfs/etc/systemd/nvpower.sh 总是 原始+单个定制提交,4处插入:(a) cvb级联elif [[ "${machine}" =~ "<custom-id>" ]]; then cvb="<custom-id-file-token>"在参考之前;(b) 在模块SKU分支内设置machine="<module-id>-<module-sku>-<custom-id>-<custom-sku>";© 复合机器键的nvpmodel级联分支 → conf_file= nvpmodel派生;(d) cvb键的nvfancontrol级联分支 → conf_file= nvfancontrol派生
BPMP DTB 预构建于bootloader/generic/<BPFDTB_FILE>(备用命名:无p前缀,xxxx SKU) 可选 y/N,默认N——模块级,通常与参考共享 派生二进制:原始 + 文件名sub -<carrier-id-num>--<custom-id-file-token>-(内容不变)。在flash-conf派生上额外提交重写BPFDTB_FILE为重命名二进制。

#include跟随。 扫描每个捕获的.dts中的#include "..."指令任意位置(NVIDIA BSP将它们放在BCT节点体内);载板键包含加入派生列表。 停止一层。

重命名规则。 载板键源(例如…-p3834-xxxx-p4071-0000.dts)→ 文件名sub <carrier-id>-<carrier-sku><custom-id>-<custom-sku>;在同一个定制提交中重写flash-conf变量(例如PINMUX_CONFIG)为重命名文件名。模块部分原样保留——如果原始有p3834-xxxx,派生保留p3834-xxxx;如果原始有p3834-0008,派生保留p3834-0008。绝不要自己固定模块SKU。载板SKU位置的任何其他xxxx通配符同理(例如p4071-xxxxp1234-xxxx)。模块键源(例如…-p3767-dp-a03.dtsi)→ 追加_<custom-id-file-token>_<custom-sku>(下划线形式)或-<custom-id>-<custom-sku>(短横线形式)一个额外提交在flash-conf派生上重写变量(例如PINMUX_CONFIG)为加后缀的名字。默认不替换内容;如果内容包含字面载板id-sku自引用则提示。

Overlay骨架。 DT插件overlay(/plugin/;)带一个fragment@0target-path = "/";在__overlay__内设置model = "<custom_carrier.name> carrier board"compatible = "nvidia,<custom-id>-<custom-sku>+<module-id>-<module-sku>", "nvidia,<chip>"nvpower.sh机器收窄读取compatible

编辑验证

每次sed/补丁后重新grep。sed在未命中时静默no-op;退出码0不证明什么。多行替换:使用Python str.replace(old, new),不要使用多行sed(对空白漂移脆弱,静默no-op)。验证未命中时拒绝提交。

摘要。 打印每个仓库的派生(计数+提交SHA)、BPMP-DTB决策、警告并跳过行(此BSP上缺少强制源文件——不要使运行失败)、overlay路径已写。

示例

操作者可能使用的触发短语:

派生自定义载板
引导自定义载板
从参考开发套件派生载板

活动配置文件中技能期望找到的最小custom_carrier:块:

custom_carrier:
  id: p1234            # 任何标记;不必是NVIDIA pNNNN风格
  sku: 0000
  flash_config: p1234.conf
name: Acme Custom Carrier

目的

为新的载板定制按板文件集,使下游customize-*技能、nvpower.sh和引导链落在自定义载板而不是参考开发套件上。基础DTB保持参考;载板差异位于DT overlay中,因此针对新参考BSP重新派生只需重新运行本技能。

先决条件

  • target-platform-contract.md解析的活动配置文件,带有custom_carrier:块(id、sku、flash-conf、友好名称)。
  • source.root_path/Linux_for_Tegra/.git已初始化——先运行/jetson-init-source;如果overlay tracker缺失,本技能拒绝。
  • bsp_image.root_path/jetson-init-image填充,以便可以解析参考flash-conf符号链接。
  • reference_devkit:已填充(模块+载板),以便重命名规则有要替换掉的载板id/sku标记。

限制

  • 内核基础DTB及其源DTS派生——载板差异必须通过OVERLAY_DTB_FILE连接的DT overlay分层叠加。
  • BPMP DTB派生是可选(默认关闭)。大多数载板更换共享参考BPMP DTB;仅当板载电源/时钟拓扑不同时才选择。
  • Flash-conf内容替换是针对性的,不是全盘的。本技能不派生的变量(DTB_FILETBCDTB_FILESCR_CONFIGPMIC_CONFIGDEVICEPROD_CONFIGPROD_CONFIGMINRATCHET_CONFIGUPHY_CONFIG、动态OVERLAY_DTB_FILE+=)保持参考值——重写它们会指向不存在的文件。
  • 自定义载板ID不需要遵循NVIDIA pNNNN风格;仅当ID匹配^p[0-9]{4}$时才派生去p数字标记。
  • 不自定义模块级文件。对pinmux、时钟、风扇曲线、nvpmodel、PCIe、UPHY、USB、MGBE或相机差异使用相关的jetson-customize-*技能。

故障排除

  • 拒绝“无custom_carrier:块” ——在活动配置文件中声明该块后重新运行;技能不会推断它。
  • 拒绝“Linux_for_Tegra/中缺少.git” ——overlay tracker未初始化。先运行/jetson-init-source
  • <real-conf>不是符号链接” ——NVIDIA约定是<devkit>.conf符号链接到<carrier>-<module>-a<rev>.conf;如果顶层是真实conf,技能警告、将其视为真实并跳过符号链接包装行。不是错误。
  • sed报告成功但编辑缺失——sed在未命中时静默no-op。技能在每次补丁后重新grep,并在验证未命中时拒绝提交;对于多行替换切换到Python str.replace
  • “chip: unknown”/回退到tegra234——模块ID不在目录中;更新目录,而不是在配置文件中覆盖。
  • 提交消息预览提示阻止运行——按提交批处理的预期门控;接受、编辑或取消。取消后索引保持暂存以供手动解决。
  • 此BSP上缺少强制源文件——该行在摘要中记录为警告并跳过;运行的其余部分仍完成。