| 名称 | 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,所以不受影响。提交消息预览门控在合并提交上只触发一次;警告并跳过的行不贡献,如果包中的每一行都已跟踪则完全省略提交。
发现(单次批处理遍历)
运行一次发现遍历;不要与暂存交错。不要截断列表——扫描目录中的每个候选文件名必须对匹配器可见。head、tail、| head -N、| tail -N和任何其他限制行的过滤器在此步骤中超出范围;使用ls -1/find未裁剪,或对完整输出grep。截断可能导致当匹配文件在截止之后时错误的警告并跳过调用。捕获:
- Flash-conf变量:
DTB_FILE/TBCDTB_FILE/BPFDTB_FILE/PINMUX_CONFIG/PMC_CONFIG/GPIO_CONFIG/GPIOINT_CONFIG。DTB_FILE/TBCDTB_FILE仅为参考捕获,以便overlay连接可以派生overlay文件名的<dtb-stem>——它们永远不被本技能重写。 - BCT
.dts在bootloader/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>SKUelif、tegra<chip>nvpmodel 级联、tegra<chip>nvfancontrol级联。
| 文件/类别 | 发现 | 接受 | Fork规则 |
|---|---|---|---|
| 板flash conf | <real-conf> |
总是 | 文件名sub <carrier-id>-<carrier-sku> → <custom-id>-<custom-sku>。内容sub是针对性的,不是全盘的:仅对本技能派生的变量重写RHS——PINMUX_CONFIG、PMC_CONFIG、GPIO_CONFIG / GPIOINT_CONFIG、MISC_CONFIG、MB2_BCT。其他载板键变量(DTB_FILE、TBCDTB_FILE、SCR_CONFIG、PMIC_CONFIG、DEVICEPROD_CONFIG、PROD_CONFIG、MINRATCHET_CONFIG、UPHY_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+=引用的.dtbo,flash.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-xxxx → p1234-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@0在target-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_FILE、TBCDTB_FILE、SCR_CONFIG、PMIC_CONFIG、DEVICEPROD_CONFIG、PROD_CONFIG、MINRATCHET_CONFIG、UPHY_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,并在验证未命中时拒绝提交;对于多行替换切换到Pythonstr.replace。- “chip: unknown”/回退到
tegra234——模块ID不在目录中;更新目录,而不是在配置文件中覆盖。 - 提交消息预览提示阻止运行——按提交批处理的预期门控;接受、编辑或取消。取消后索引保持暂存以供手动解决。
- 此BSP上缺少强制源文件——该行在摘要中记录为警告并跳过;运行的其余部分仍完成。