| 名称 | jetson-customize-camera |
| 描述 | >- 在Jetson Thor或Orin定制载板上,通过从树内传感器DTSI呈现内核设备树叠加层来启用MIPI/GMSL摄像头传感器。不要用于UPHY通道分配或ODMDATA编辑。 |
| 版本 | 0.0.1 |
| 开源协议 | “Apache-2.0” metadata: data-classification: public |
| 作者 | “Jetson Team” tags: - bsp - phase-2 - io - camera - csi domain: meta |
定制摄像头(CSI / MIPI / GMSL 传感器引入)
概述
Tegra264(Thor)和Tegra234(Orin)暴露一个由NVCSI和一组固定CSI端口前端驱动的tegra-capture-vi控制器。摄像头引入流程为:
- 传感器选择 — 从当前活动平台自带的传感器
.dtsi引用集合中选取。 - 载板 + 模块支持检查 — 对照摄像头开发指南、适配指南 §Camera、载板原理图、模块TRM和载板引脚映射进行验证。
- 布线 — 当存在
tegra<soc>-camera-<sensor>*.dtsi时,从该树内文件中导出(DTSI是布线的唯一事实来源);对于定制传感器,则由用户按传感器捕获。 - 内核DT叠加层 — 用cpp展开树内DTSI,提取其
fragment@N主体,追加到活动目标的自定义叠加层复合.dts中(参见../../references/bsp-customization-kernel-dtb.md),然后用fdtoverlay验证复合叠加层。/jetson-build-source编译复合叠加层并负责载板配置中OVERLAY_DTB_FILE+=的注册。
自主式而非表格驱动 — 传感器列表通过运行时通配匹配树内按传感器的dtbo构建。没有_THOR_CAMERAS字典,没有questions.json,也没有Python渲染器参与提问。
不进行ODMDATA编辑 — 摄像头不消耗UPHY通道(CSI使用独立的PHY池)。本技能仅生成内核DT叠加层;载板配置中的ODMDATA行不受本技能影响。
输出为一次提交:
- 摄像头
fragment@N代码块(若尚未存在,则在复合叠加层根上加上jetson-header-name)追加到符合../../references/bsp-customization-kernel-dtb.md的复合自定义叠加层.dts→ 提交到bsp_sources/硬件仓库。/jetson-build-source将复合叠加层编译为.dtbo并拥有其Makefile和烧写配置注册。
何时调用
- 用户说“开启摄像头”、“配置CSI”、“连接Hawk / Owl / IMX传感器”、“MIPI摄像头”、“GMSL摄像头”,或要求在定制载板上引入
tegra-capture-vi/ NVCSI。 - 已烧写但系统启动后
v4l2-ctl --list-devices没有显示tegra-capture-vi通道,或需要确认新子卡上的传感器枚举。 - 传感器已启用过,用户希望添加另一个(多传感器引入)。
前置条件:
- 活动配置文件包含
reference_devkit:和custom_carrier:块。 <source.root_path>/Linux_for_Tegra/.git存在(由/jetson-init-source创建)。/jetson-derive-carrier已运行 —— 载板烧写配置分支已存在于叠加层跟踪器中。<source.root_path>/bsp_sources/hardware/nvidia/<chip-dir>/nv-public/overlay/存在,并包含树内的按传感器.dtsi文件(由/jetson-init-source的分支A归档提取)。<source.root_path>/bsp_sources/kernel/kernel-noble/include/dt-bindings/包含cpp所需的宏头文件(如果用了分支B可能需要先运行source_sync.sh—— 见下文步骤5a.i)。- 已在提示中注册或提供了事实来源文档:摄像头开发指南(在
bsp_developer_guide镜像中或独立路径)、适配指南 §Camera、载板原理图、SoC TRM、模块设计指南。 dtc、cpp、fdtoverlay在PATH中。
流程
详细的分步流程(第1~7步,含所有表格、代码块和关卡)位于references/procedure.md。摘要如下:
- 步骤1 — 解析活动目标 + 打开事实来源文档。
- 步骤2 — 通过通配树内按平台摄像头dtbo枚举支持的传感器;分为DPHY直连 / GMSL / 定制三类。绝不自创传感器。
- 步骤3 / 3a — 对照DTSI、摄像头开发指南、适配指南 §Camera、SoC TRM、模块设计指南、原理图和载板引脚映射交叉检查载板和模块支持。先呈现布线表,然后发出确认或定制关卡。
- 步骤4(仅定制路径) — 按批次向用户提问传感器布线,问题由载板引脚映射自动预填。
- 步骤5 — 向复合自定义叠加层
.dts中追加恰好一个/* custom-bsp: camera:<sensor> */代码块(见../../references/bsp-customization-kernel-dtb.md)。克隆路径用cpp展开树内DTSI;定制路径内联步骤4答案 + 模式表。将jetson-header-name幂等地设置到复合叠加层根上。用dtc+fdtoverlay验证(预编译单代码块关卡;编译后深层树唯一性关卡)。通过工作流的提交消息预览关卡提交。 - 步骤6 — 用
pin_verifier.py验证附带的CAM引脚SFIO(cam_i2c_*、extperiph<m>_clk、复位/PWDN/PWR_EN GPIO);将不匹配项路由到/jetson-customize-pinmux。 - 步骤7 — 原子写入运行状态JSON伴生文件到
<workspace>/target-platform/<profile-stem>.jetson-customize-camera.json,并输出标题;然后按照references/procedure.md步骤7通过连续的AskUserQuestion提示驱动下游下一步链。**该链是文档化的工作流关卡,不是澄清性问题 —— 自动模式也不豁免。**绝不要用打印的“下一步:…”行代替这些提示。
注意事项
- 双代码块陷阱。 只向复合叠加层贡献一个带摄像头标记的
fragment@N。第二个携带状态覆盖的代码块会触发dtc深层合并 → 重复的兄弟子树(例如两个tca9546@70)→ 运行时首匹配会丢弃dtsi提供的深层树,导致摄像头无法枚举。仅以本技能的标记(步骤5c)为关卡。 - 复合叠加层根
compatible是全局拥有的,不由本技能负责。 不要根据任何树内按传感器dtbo的compatible(由开发套件SKU门控)来扩展它。若需要则修复复合叠加层根。 jetson-header-name取自任何树内按传感器dtbo。 固定载板无关;读取一次,粘贴到元数据根。- 不要同时将树内按传感器dtbo追加到
OVERLAY_DTB_FILE。 同时注册自己渲染的叠加层和树内tegra<soc>-p3971-camera-<sensor>-overlay.dtbo会创建幽灵子设备绑定,破坏摄像头枚举。 - 存根叠加层是一个已知陷阱。 提交只有
tegra-capture-vi { status="okay"; num-channels=<N>; }而没有端口 / 传感器 / nvcsi主体的叠加层会破坏摄像头(“所有通道初始化失败”)。必须通过cpp + dtc拼接入完整的传感器主体。 - 传感器模式表必须拼接,绝不能手写。
mode<N>、sensor_modes、pixel_phase—— 从最接近的树内DTSI逐字复制。 camera_common_regulator_get (null) ERR: -EINVAL= 缺少avdd-reg/iovdd-reg/dvdd-reg字符串 —— 拼接完整传感器主体;常开电源轨回退到虚拟稳压器。- 外部
&label引用必须存在于基础DTB的__symbols__中。 当标签缺失时使用target-path = "/tegra-capture-vi";否则fdtoverlay将以FDT_ERR_NOTFOUND退出。 cpp找不到dt-bindings/gpio/gpio.h: No such file= L4T源码树未就绪。重新运行/jetson-init-source(分支B的source_sync.sh获取头文件)。绝不要伪造宏展开结果。- 不做ODMDATA编辑,不编辑烧写配置。 摄像头不消耗UPHY通道。载板配置中的
ODMDATA="..."不受影响。OVERLAY_DTB_FILE+=由/jetson-build-source步骤5.0a负责——本技能绝不触碰载板烧写配置。 - 不改动
<bsp_image.root_path>的上游BSP。 所有修改都落在<source.root_path>/Linux_for_Tegra/(叠加层跟踪器)和<source.root_path>/bsp_sources/(叠加层.dts)下,遵循“原始+定制提交”模式。
参考资料
references/procedure.md— 完整的分步流程(步骤1~7)(从本SKILL.md提取)。references/csi-dt-bindings.md— CSI / nvcsi / vi DT绑定参考说明。references/overlay-template.md— 元数据根 + 克隆体叠加层形状指导。references/camera-overlay-templates/— 起步.dts.tmpl模板:dphy-direct.dts.tmpl、gmsl-serdes.dts.tmpl。../../scripts/pin_verifier.py— 共享HSIO引脚验证器(步骤6)。../../references/platform_template.yaml— 步骤1使用的documents:块。../../context/bsp-customization-workflow.md— 叠加层编辑协议。../jetson-customize-pinmux/SKILL.md— 步骤6自动调用兄弟技能来修复HSIO引脚SFIO不匹配(CAM I²C、MCLK、复位GPIO)。../jetson-derive-carrier/SKILL.md— 必须首先运行;生成载板基础叠加层(*-dynamic.dtbo),本技能在它之上叠加复合体。../jetson-init-source/SKILL.md— 生成叠加层跟踪器和bsp_sources仓库(含hardware/nvidia/<chip-dir>/按传感器DTSI树),本技能读取并提交到该仓库。