jetson-customize-camera
NVIDIA/skills
Aktivieren Sie MIPI/GMSL-Kamerasensoren auf einem benutzerdefinierten Jetson Thor- oder Orin-Trägerboard, indem Sie ein Kernel-DT-Overlay aus dem im Baum enthaltenen Sensor-DTSI rendern.
...Alle erweiternKamera anpassen (Inbetriebnahme von CSI-/MIPI-/GMSL-Sensoren)
Übersicht
Tegra264 (Thor) und Tegra234 (Orin) stellen einen einzigen „tegra-capture-vi“-Controller
bereit, der über NVCSI und einen festen Satz von CSI-Ports angesteuert wird. Die
Inbetriebnahme der Kamera erfolgt wie folgt:
- Sensorauswahl – ausgewählt aus dem Satz von NVIDIA im Tree ausgelieferter
.dtsi-Referenzenfür die aktive Plattform. - Überprüfung der Trägerplatinen- und Modulunterstützung – abgeglichen mit dem „Camera Development Guide“, dem „Adaptation Guide“ (§Camera), dem Schaltplan der Trägerplatine, dem Modul-TRM und der Pinbelegung der Trägerplatine.
- Verdrahtung – abgeleitet aus den im Tree vorhandenen
„tegra, sofern vorhanden (die DTSI ist die maßgebliche Quelle für die Verdrahtung); bei kundenspezifischen Sensoren vom Benutzer pro Sensor erfasst.-camera- “-*.dtsi-Dateien - Kernel-DT-Overlay – cpp-expand des DTSI im Baum, Extrahieren seines
„fragment@N“-Körpers, Anhängen an das zusammengesetzte benutzerdefinierte Overlay.dtsfür das aktive Ziel (gemäß../../references/bsp-customization-kernel-dtb.md), Überprüfung des Composites mitfdtoverlay./jetson-build-sourcekompiliert das Composite und ist verantwortlich für die Registrierung in der Carrier-Konfiguration unterOVERLAY_DTB_FILE+=.
Agentengesteuert, nicht tabellengesteuert – die Sensorliste wird zur Laufzeit durch
das Einlesen der sensorspezifischen dtbos im Baum erstellt. Kein _THOR_CAMERAS-Dict, keine
questions.json, kein Python-Renderer im Fragepfad.
Keine Bearbeitung von ODMDATA – Kameras belegen keine UPHY-Lanes (CSI ist ein separater PHY-Pool). Der Skill gibt nur ein Kernel-DT-Overlay aus; die ODMDATA-Zeile in der Carrier-Konfiguration bleibt von diesem Skill unberührt.
Die Ausgabe besteht aus einem Commit:
- Kamera
-Fragment@N-Block (zuzüglich„jetson-header-name“am Composite-Stamm, falls noch nicht vorhanden) angehängt an das benutzerdefinierte Composite-Overlay.dtsgemäß../../references/bsp-customization-kernel-dtb.md→ in das Repository„bsp_sources/hardware“committet./jetson-build-sourcekompiliert das Composite zu.dtbound ist für dessen Makefile sowie die Flash-Conf-Registrierung zuständig.
Wann aufrufen
- Der Benutzer gibt die Befehle „Kamera aktivieren“, „CSI konfigurieren“, „Hawk-/
Owl-/IMX-Sensor anschließen“, „MIPI-Kamera“ oder „GMSL-Kamera“ ein oder fordert an,
„tegra-capture-vi“bzw. „NVCSI“ auf einem benutzerdefinierten Trägermodul zu starten. - Der Flash-Start erfolgt, aber
`v4l2-ctl --list-devices` zeigt keine `tegra-capture-vi`-Kanäle an, ODER die Sensorauflistung auf einer neuen Tochterkarte muss bestätigt werden. - Ein Sensor war zuvor aktiviert und der Benutzer möchte einen weiteren hinzufügen (Inbetriebnahme mehrerer Sensoren).
Voraussetzungen:
- Aktives Profil mit den Blöcken
„reference_devkit:“und„custom_carrier:“. existiert (/Linux_for_Tegra/.git /jetson-init-source)./jetson-derive-carrierwurde ausgeführt – der Carrier-Flash-Conf-Fork befindet sich im Overlay-Tracker.ist vorhanden und enthält die im Baum enthaltenen/bsp_sources/hardware/nvidia/ /nv-public/overlay/ .dtsi-Dateienpro Sensor (die aus dem Archivauszug von Branch Avon /jetson-init-sourcestammen).enthält die von C++ benötigten Makro-Header (/bsp_sources/kernel/kernel-noble/include/dt-bindings/ source_sync.shmuss möglicherweise ausgeführt werden, wenn Branch B verwendet wurde – siehe Schritt 5a.i unten).- Als „Source of Truth“ registrierte oder an der Eingabeaufforderung angegebene Dokumente:
Kamera-Entwicklungsleitfaden (im
„bsp_developer_guide“-Mirroroder in einem separaten Pfad), Anpassungsleitfaden §Kamera, Trägerplatinen-Schaltplan, SoC-TRM, Modul-Design-Leitfaden. dtc,cpp,fdtoverlayim PATH.
Vorgehensweise
Eine detaillierte Schritt-für-Schritt-Anleitung (Schritte 1–7, mit allen Tabellen, Code-
Blöcken und Gatter) finden Sie in
references/procedure.md. Zusammenfassung:
- Schritt 1 – Aktives Ziel festlegen + „Source of Truth“-Dokumente öffnen.
- Schritt 2 – Auflistung der unterstützten Sensoren durch Glob-Suche in den plattformspezifischen Kamera-DTBOs im Baum; Klassifizierung als DPHY-direkt / GMSL / benutzerdefiniert. Niemals Sensoren erfinden.
- Schritt 3 / 3a – Überprüfen Sie die Träger- und Modulunterstützung anhand von DTSI, dem Kamera-Entwicklungsleitfaden, dem Anpassungsleitfaden §Kamera, dem SoC-TRM, dem Modul-Design-Leitfaden, dem Schaltplan und der Pinbelegung des Trägers. Erstellen Sie ZUERST die Verdrahtungstabelle und lösen Sie dann das „Bestätigen oder Anpassen“-Gate aus.
- Schritt 4 (nur bei benutzerdefiniertem Pfad) – Batchweise sensorbezogene Verdrahtungsfragen, die automatisch aus der Pinbelegung des Trägers ausgefüllt werden.
- Schritt 5 — Fügen Sie genau EIN
/* custom-bsp: camera:Fragment an die zusammengesetzte benutzerdefinierte Overlay-Datei*/ .dtsan (siehe../../references/bsp-customization-kernel-dtb.md). Der Klonpfad führt eine CPP-Expansion der DTSI im Baum durch; der benutzerdefinierte Pfad fügt die Antworten aus Schritt 4 sowie die Modustabellen an Ort und Stelle ein. Setzen Siejetson-header-nameidempotent am zusammengesetzten Stamm. Überprüfen Sie dies mitdtc+fdtoverlay(Gate zur Vorabkompilierung einzelner Fragmente; Gate zur Überprüfung der Eindeutigkeit des tiefen Baums nach der Kompilierung). Führen Sie den Commit über das Commit-Message-Vorschau-Gate des Workflows durch. - Schritt 6 – Überprüfen Sie die zusätzlichen CAM-Pin-SFIOs (
cam_i2c_*,extperiph, Reset/PWDN/PWR_EN-GPIOs) über_clk pin_verifier.py; leiten Sie Unstimmigkeiten an/jetson-customize-pinmuxweiter. - Schritt 7 – Führen Sie ein atomares Schreiben des JSON-Sidecars für den Laufstatus unter
durch, geben Sie die Überschrift aus und steuern Sie anschließend die nachgelagerte Kette für den nächsten Schritt über sequenzielle/target-platform/ .jetson-customize-camera.json „AskUserQuestion“-Aufforderungengemäßreferences/procedure.mdSchritt 7. Die Kette ist ein dokumentiertes Workflow-Tor, keine klärende Frage – der Automatikmodus stellt hier keine Ausnahme dar. Ersetzen Sie die Aufforderungen niemals durch eine gedruckte Zeile „Nächster Schritt: …“.
Fallstricke
- Falle durch doppelte Fragmente. Füge genau EIN mit einer Kamera gekennzeichnetes
Fragment@Nzur Zusammensetzung bei. Ein zweites, das Status- Überschreibungen enthält, löst eine dtc-Deep-Merge-Vorgang aus → doppelte Geschwister-Unterbäume (z. B. zweitca9546@70) → Die Laufzeit-Erste-Übereinstimmung verwirft den von dtsi bereitgestellten Deep-Tree → Die Kamera führt stillschweigend keine Aufzählung durch. Das Gate darf nur auf den Marker dieser Funktion angewendet werden (Schritt 5c). -
Die Kompatibilitätder Composite-Root wird global verwaltet, nicht von diesem Skill. Keine Erweiterung aus den sensorbezogenen DTBO-Strukturen innerhalb des Baums(devkit-SKU-abhängig). Korrigiere die Composite-Root bei Bedarf. „jetson-header-name“aus allen sensorspezifischen DTBOs im Baum. Behoben, trägerunabhängig; einmal lesen, in die Metadaten-Root einfügen.- Füge die im Baum enthaltenen, sensorspezifischen DTBOs NICHT zusätzlich an
„OVERLAY_DTB_FILE“an. Die Registrierung sowohl deines gerenderten Overlays ALS AUCH der im Baum enthaltenenTegra-Datei „erzeugt eine Phantom-Subdev-Bindung, die die Kamera-Enumeration lahmlegt.-p3971-camera- -overlay.dtbo“ - Stub-Overlay ist eine bekannte Fallstrick. Das Committen von
tegra-capture-vi { status="okay"; num-channels=ohne Ports-/Sensor-/nvcsi-Body blockiert die Kamera (; } Initialisierung aller Kanäle fehlgeschlagen). Fügen Sie den VOLLSTÄNDIGEN Sensor-Body über C++ + DTC ein. - Sensormodustabellen müssen eingefügt werden, niemals manuell erstellt.
mode,sensor_modes,pixel_phase— wortwörtlich aus dem nächstgelegenen DTSI im Baum kopieren. camera_common_regulator_get (null) ERR: -EINVAL= fehlendeavdd-reg/iovdd-reg/dvdd-reg-Zeichenfolgen– füge den VOLLSTÄNDIGEN Sensor-Body ein; bei ständig aktiven Schienen auf Dummy-Regler zurückgreifen.- Externe
&label-Referenzenmüssen inden __symbols__der Basis-DTB vorhanden sein. Verwendetarget-path = „/tegra-capture-vi“, wenn das Label fehlt; ansonsten beendetfdtoverlayden Vorgang mit einem von Null verschiedenen Wert undFDT_ERR_NOTFOUND. C++-Fehlerindt-bindings/gpio/gpio.h: Keine solche Datei= L4T-Quellbaum ist nicht in den Staging-Bereich übernommen./jetson-init-sourceerneut ausführen (dieDatei source_sync.shdes Zweigs B ruft die Header ab). Die Makroexpansion niemals künstlich erzeugen.- Keine Bearbeitung von ODMDATA, keine Bearbeitung der Flash-Konfiguration. Die Kamera beansprucht keine
UPHY-Lanes. Der Eintrag
ODMDATA="..."in der Carrier-Konfiguration bleibt unverändert.OVERLAY_DTB_FILE+=gehört zu/jetson-build-sourceSchritt 5.0a – diese Funktion greift niemals auf die Flash-Konfiguration des Trägers zu. - Rühren Sie das Upstream-BSP unter
nicht an. Alle Änderungen landen unter(Overlay- Tracker) und/Linux_for_Tegra/ (Overlay/bsp_sources/ -.dts) gemäß dem Commit-Muster „unverändert + Anpassung“.
Referenzen
references/procedure.md— vollständige Schritt-für-Schritt-Anleitung für die Schritte 1–7 (aus diesem SKILL.md extrahiert).references/csi-dt-bindings.md— Referenzhinweise zu CSI-, nvcsi- und vi-DT-Bindungen.references/overlay-template.md— Anleitung zur Overlay-Form „Metadata-Root + Clone-Body“.references/camera-overlay-templates/— Starter-Vorlagen im Format.dts.tmpl:dphy-direct.dts.tmpl,gmsl-serdes.dts.tmpl.../../scripts/pin_verifier.py— Gemeinsamer HSIO-Pin-Verifizierer (Schritt 6).../../references/platform_template.yaml—Dokumente:Block, der in Schritt 1 verwendet wird.../../context/bsp-customization-workflow.md— Protokoll zur Bearbeitung von Overlays.../jetson-customize-pinmux/SKILL.md— gleichrangiges Skill, das von Schritt 6 automatisch aufgerufen wird, um HSIO-Pin-SFIO- Nichtübereinstimmungen zu beheben (CAM I²C, MCLK, Reset-GPIOs).../jetson-derive-carrier/SKILL.md— muss zuerst ausgeführt werden; erzeugt das Carrier-Basis-Overlay (die*-dynamic.dtbo), auf das die Composite-Stacks dieses Skills anschließend aufsetzen.../jetson-init-source/SKILL.md— Erzeugt den Overlay-Tracker sowie das Repo„bsp_sources“(mit dem DTSI-Baum„hardware/nvidia/pro Sensor), das dieser Skill liest und in das er Commits vornimmt.“
---
name: jetson-customize-camera
description: Enable MIPI/GMSL camera sensors on a Jetson Thor or Orin custom carrier by rendering a kernel-DT overlay from the in-tree sensor DTSI.
license: Apache-2.0
---
# Customize camera (CSI / MIPI / GMSL sensor bring-up)
## Overview
Tegra264 (Thor) and Tegra234 (Orin) expose a single `tegra-capture-vi`
controller fronted by NVCSI and a fixed set of CSI ports. Camera
bring-up is:
1. **Sensor selection** — picked from the set NVIDIA ships in-tree
`.dtsi` references for on the active platform.
2. **Carrier + module support check** — verified against the Camera
Development Guide, Adaptation Guide §Camera, carrier schematic,
Module TRM, and carrier pinmap.
3. **Wiring** — derived from the in-tree
`tegra<soc>-camera-<sensor>*.dtsi` when one exists (**the DTSI IS
the wiring source of truth**); captured per-sensor from the user
when the sensor is custom.
4. **Kernel-DT overlay** — cpp-expand the in-tree DTSI, extract its
`fragment@N` body, append into the composite custom overlay
`.dts` for the active target (per
[`../../references/bsp-customization-kernel-dtb.md`](../../references/bsp-customization-kernel-dtb.md)),
verify the composite with `fdtoverlay`.
`/jetson-build-source` compiles the composite and owns the
carrier conf's `OVERLAY_DTB_FILE+=` registration.
**Agentic, not table-driven** — sensor list is built at runtime by
globbing in-tree per-sensor dtbos. No `_THOR_CAMERAS` dict, no
`questions.json`, no Python renderer in the question path.
**No ODMDATA edit** — cameras don't consume UPHY lanes (CSI is a
separate PHY pool). The skill emits only a kernel-DT overlay; the
ODMDATA line in the carrier conf is untouched by this skill.
The output is **one commit**:
- Camera `fragment@N` block (plus `jetson-header-name` on the
composite root if not already present) appended to the composite
custom overlay `.dts` per
[`../../references/bsp-customization-kernel-dtb.md`](../../references/bsp-customization-kernel-dtb.md)
→ committed to the `bsp_sources/` hardware repo.
`/jetson-build-source` compiles the composite to `.dtbo` and
owns its Makefile + flash-conf registration.
## When to invoke
- The user says "enable camera", "configure CSI", "wire a Hawk /
Owl / IMX sensor", "MIPI camera", "GMSL camera", or asks to bring
up `tegra-capture-vi` / NVCSI on a custom carrier.
- Flash boots but `v4l2-ctl --list-devices` shows no
`tegra-capture-vi` channels, OR sensor enumeration on a fresh
daughter-card needs to be confirmed.
- A sensor was previously enabled and the user wants to add another
(multi-sensor bring-up).
**Prerequisites:**
- Active profile with `reference_devkit:` + `custom_carrier:` blocks.
- `<source.root_path>/Linux_for_Tegra/.git` exists
(`/jetson-init-source`).
- `/jetson-derive-carrier` has run — the carrier flash-conf fork is
in the overlay tracker.
- `<source.root_path>/bsp_sources/hardware/nvidia/<chip-dir>/nv-public/overlay/`
exists and contains the in-tree per-sensor `.dtsi` files (sourced
by `/jetson-init-source`'s Branch A archive extract).
- `<source.root_path>/bsp_sources/kernel/kernel-noble/include/dt-bindings/`
contains the macro headers cpp needs (`source_sync.sh` may need to
run if Branch B was used — see Step 5a.i below).
- Source-of-truth docs registered or supplied at prompt:
Camera Development Guide (in `bsp_developer_guide` mirror or
separate path), Adaptation Guide §Camera, carrier schematic, SoC
TRM, Module Design Guide.
- `dtc`, `cpp`, `fdtoverlay` on PATH.
## Procedure
Detailed step-by-step procedure (Steps 1–7, with all tables, code
blocks, and gates) lives in
[`references/procedure.md`](references/procedure.md). Summary:
1. **Step 1** — Resolve active target + open source-of-truth docs.
2. **Step 2** — Enumerate supported sensors by globbing in-tree
per-platform camera dtbos; classify as DPHY-direct / GMSL /
custom. Never invent sensors.
3. **Step 3 / 3a** — Cross-check carrier + module support against
DTSI, Camera Development Guide, Adaptation Guide §Camera, SoC TRM,
Module Design Guide, schematic, and carrier pinmap. Render the
wiring table FIRST, then issue the confirm-or-customize gate.
4. **Step 4** (custom path only) — Batched per-sensor wiring
questions auto-filled from the carrier pinmap.
5. **Step 5** — Append exactly ONE `/* custom-bsp: camera:<sensor> */`
fragment to the composite custom overlay `.dts` (see
[`../../references/bsp-customization-kernel-dtb.md`](../../references/bsp-customization-kernel-dtb.md)).
Clone path cpp-expands the in-tree DTSI; custom path splices Step-4
answers + mode tables in-place. Idempotently set
`jetson-header-name` on the composite root. Verify with
`dtc` + `fdtoverlay` (pre-compile single-fragment gate;
post-compile deep-tree uniqueness gate). Commit via the
workflow's commit-message preview gate.
6. **Step 6** — Verify ancillary CAM pin SFIOs (`cam_i2c_*`,
`extperiph<m>_clk`, reset/PWDN/PWR_EN GPIOs) via
`pin_verifier.py`; route mismatches to `/jetson-customize-pinmux`.
7. **Step 7** — Atomic-write run-state JSON sidecar at
`<workspace>/target-platform/<profile-stem>.jetson-customize-camera.json`
and emit the headline, then drive the downstream next-step chain via
sequential `AskUserQuestion` prompts per `references/procedure.md`
Step 7. **The chain is a documented workflow gate, not a clarifying
question — auto-mode does NOT exempt it.** Never substitute a
printed "Next step: …" line for the prompts.
## Gotchas
- **Dual-fragment trap.** Contribute exactly ONE camera-tagged
`fragment@N` to the composite. A second one carrying status
overrides triggers dtc deep-merge → duplicate sibling subtrees
(e.g. two `tca9546@70`) → runtime first-match drops the dtsi-
supplied deep tree → camera silently doesn't enumerate. Gate on
this skill's marker only (Step 5c).
- **Composite root `compatible` is owned globally, not by this
skill.** Don't widen from any in-tree per-sensor dtbo's
`compatible` (devkit-SKU-gated). Fix the composite root if needed.
- **`jetson-header-name` from any in-tree per-sensor dtbo.** Fixed,
carrier-agnostic; read once, paste onto the metadata root.
- **DO NOT also append the in-tree per-sensor dtbo to
`OVERLAY_DTB_FILE`.** Registering both your rendered overlay AND
the in-tree `tegra<soc>-p3971-camera-<sensor>-overlay.dtbo`
produces a phantom subdev bind that bricks camera enumeration.
- **Stub overlay is a known footgun.** Committing
`tegra-capture-vi { status="okay"; num-channels=<N>; }` with no
ports / sensor / nvcsi body bricks the camera (`all channel init
failed`). Splice the FULL sensor body via cpp + dtc.
- **Sensor mode tables must be spliced, never hand-authored.**
`mode<N>`, `sensor_modes`, `pixel_phase` — copy verbatim from the
closest in-tree DTSI.
- **`camera_common_regulator_get (null) ERR: -EINVAL`** = missing
`avdd-reg` / `iovdd-reg` / `dvdd-reg` strings — splice the FULL
sensor body; always-on rails fall back to dummy regulator.
- **External `&label` refs must exist in base DTB's `__symbols__`.**
Use `target-path = "/tegra-capture-vi"` when the label is absent;
`fdtoverlay` exits non-zero with `FDT_ERR_NOTFOUND` otherwise.
- **`cpp` failure on `dt-bindings/gpio/gpio.h: No such file`** =
L4T source tree isn't staged. Re-run `/jetson-init-source` (Branch
B's `source_sync.sh` fetches the headers). Never fabricate the
macro expansion.
- **No ODMDATA edit, no flash-conf edit.** Camera doesn't consume
UPHY lanes. The carrier conf's `ODMDATA="..."` is untouched.
`OVERLAY_DTB_FILE+=` is owned by `/jetson-build-source` Step
5.0a — this skill never touches the carrier flash conf.
- **Don't touch the upstream BSP at `<bsp_image.root_path>`.** All
edits land in `<source.root_path>/Linux_for_Tegra/` (overlay
tracker) and `<source.root_path>/bsp_sources/` (overlay `.dts`)
under the pristine + customization commit pattern.
## References
- [`references/procedure.md`](references/procedure.md) — full
step-by-step Steps 1–7 procedure (extracted from this SKILL.md).
- [`references/csi-dt-bindings.md`](references/csi-dt-bindings.md) —
CSI / nvcsi / vi DT binding reference notes.
- [`references/overlay-template.md`](references/overlay-template.md) —
guidance on the metadata-root + clone-body overlay shape.
- [`references/camera-overlay-templates/`](references/camera-overlay-templates/)
— starter `.dts.tmpl` templates: `dphy-direct.dts.tmpl`,
`gmsl-serdes.dts.tmpl`.
- [`../../scripts/pin_verifier.py`](../../scripts/pin_verifier.py)
— shared HSIO pin verifier (Step 6).
- [`../../references/platform_template.yaml`](../../references/platform_template.yaml)
— `documents:` block consumed by Step 1.
- [`../../context/bsp-customization-workflow.md`](../../context/bsp-customization-workflow.md#workflow-invariants)
— overlay edit protocol.
- [`../jetson-customize-pinmux/SKILL.md`](../jetson-customize-pinmux/SKILL.md) —
sibling skill auto-invoked by Step 6 to fix HSIO pin SFIO
mismatches (CAM I²C, MCLK, reset GPIOs).
- [`../jetson-derive-carrier/SKILL.md`](../jetson-derive-carrier/SKILL.md)
— must run first; produces the carrier base overlay (the
`*-dynamic.dtbo`) this skill's composite stacks after.
- [`../jetson-init-source/SKILL.md`](../jetson-init-source/SKILL.md) —
produces the overlay tracker + `bsp_sources` repo (with the
`hardware/nvidia/<chip-dir>/` per-sensor DTSI tree) this skill
reads and commits into.
Alle Dateien
11 Dateienjetson-customize-camera installieren
Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
git clone https://github.com/NVIDIA/skills/tree/main/skills/jetson-customize-camera # Copy SKILL.md to your .claude/skills/ directory
Kopieren





Heim
