[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-jetson-flash-image":3,"mdc--u0yv3m-key":34,"related-repo-nvidia-jetson-flash-image":2729,"related-org-nvidia-jetson-flash-image":2833},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"jetson-flash-image","flash BSP images to Jetson devices","Use to flash a promoted BSP image to a Jetson DUT in RCM mode via flash.sh or l4t_initrd_flash.sh. Do NOT use for BSP customization, image promotion, or carrier derivation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Firmware","firmware","tag",{"name":17,"slug":18,"type":15},"Hardware","hardware",{"name":20,"slug":21,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-14T05:29:13.000653","Apache-2.0",281,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fjetson-flash-image","---\nname: jetson-flash-image\ndescription: Use to flash a promoted BSP image to a Jetson DUT in RCM mode via flash.sh or l4t_initrd_flash.sh. Do NOT use for BSP customization, image promotion, or carrier derivation.\nversion: 0.0.1\nlicense: \"Apache-2.0\"\nmetadata:\n  data-classification: public\n  author: \"Jetson Team\"\n  tags:\n    - bsp\n    - flash\n  domain: meta\n---\n\n# Flash BSP Image\n\n## Purpose\n\nPush a promoted `bsp_image` to a Jetson DUT by running the NVIDIA flashing toolchain (`flash.sh` or `l4t_initrd_flash.sh`) from the in-tree `Linux_for_Tegra\u002F`. The DUT must be in RCM (recovery) mode at flash time. This is the **flash leg** of the BSP overlay deploy chain (`\u002Fjetson-promote-image` → `\u002Fjetson-flash-image`); see the BSP overlay workflow at `..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md`.\n\n**Design principle.** Four invariants govern this skill; each is fully explained in the Instructions step that owns it.\n\n- Host-side flash variables (`\u003Cboard>`, `\u003Cboot-dev>`, flow tool, per-board `.conf`, `boardctl`) are resolved from the active profile or the in-tree BSP.\n- Artifact paths (`DTB_FILE`, `BPFDTB_FILE`, partition XML, BCTs, DRAM training) are resolved inside `flash.sh` \u002F `l4t_initrd_flash.sh` at flash time from `board_sku` \u002F `board_FAB` read off the DUT's EEPROM.\n- The DUT's EEPROM is authoritative; the profile is an authoring-time prediction reconciled by the preflight cross-check. Empty EEPROM values are valid, not refusal triggers.\n- The user explicitly confirms a printed *resolution* before flashing.\n\nOut of scope: BSP customization (use the `\u002Fjetson-customize-*` skills), promoting the overlay tracker into `bsp_image` (use `\u002Fjetson-promote-image`), and producing a custom carrier's flash conf (use `\u002Fjetson-derive-carrier`).\n\n## Prerequisites\n\n- Active target-platform profile resolved per `..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md` with a populated `bsp_image:` block. Refuse and route to `\u002Fjetson-init-image` if missing.\n- `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F` exists on the host and has been through `apply_binaries.sh` (route to `\u002Fjetson-init-image` otherwise).\n- A per-board flash `.conf` resolvable via the active-block precedence rule (`custom_carrier.flash_config` → `reference_devkit.flash_config`). Refuse and route to `\u002Fjetson-derive-carrier` or `\u002Fjetson-init-image` if absent.\n- For the prior overlay → image leg: `\u002Fjetson-promote-image` has already run (or a standalone re-flash with no promotion changes since the last flash).\n- A DUT cabled to the host that can be driven into RCM mode either via the in-tree `boardctl` or by manual recovery + reset buttons.\n\n## When to invoke\n\n- After `\u002Fjetson-promote-image` has updated `bsp_image` to carry the desired customizations.\n- Standalone re-flash with no promotion changes since the last flash.\n- DUT must be in RCM mode before invocation.\n\n## Instructions\n\n### Resolve target and `bsp_image`\n\nResolve the active profile per\n[`..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md`](..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md).\nRefuse if `bsp_image:` is missing or `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F`\ndoes not exist (route the user to `\u002Fjetson-init-image`).\n\n### Resolve the flash conf path\n\nPick the per-board `.conf` using the active-block precedence rule\nfrom\n[`target-platform-contract.md`](..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md):\n`custom_carrier.flash_config` when present, else\n`reference_devkit.flash_config`. Verify the chosen file exists under\n`\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F`. Refuse if absent — route\nthe user at `\u002Fjetson-derive-carrier` (custom carrier) or\n`\u002Fjetson-promote-image` \u002F `\u002Fjetson-init-image` (reference devkit).\n\nBind `\u003Cboard>` as the basename of the resolved `.conf` minus the\n`.conf` suffix (e.g. `jetson-agx-thor-devkit.conf` →\n`\u003Cboard>=jetson-agx-thor-devkit`). the \"Invoke the flash\" step's command shape consumes\nthis binding directly.\n\n**No dispatch preview at this stage.** Artifact resolution (`DTB_FILE`,\n`BPFDTB_FILE`, partition XML, MB1 BCTs, DRAM training tables) happens\ninside `flash.sh` \u002F `l4t_initrd_flash.sh` during image generation,\nusing `board_sku` and `board_FAB` **read from the DUT's EEPROM in\nrecovery mode** — not values typed in from the profile. The profile\nis an authoring-time *prediction*; the DUT EEPROM is *authoritative*\nat flash time. The \"Preflight checks\" step's EEPROM cross-check reads EEPROM and refuses the flash on profile\n\u002F EEPROM mismatch, so passing preflight is what guarantees the\nflash-time dispatch will pick the artifacts the profile expects.\n\nFor static analyses outside the flash flow that need predicted\nartifact paths (KB generation, `customize-*` skills locating files\nto edit), see the standalone snippet in\n[per-board conf dispatch](..\u002F..\u002Fcontext\u002Fbsp-customization-software-layers.md#per-board-conf-dispatch--update_flash_args_common)\n— that snippet is valid for *BSP-side* resolution but **not** as a\nflash-time preview.\n\n### Select `\u003Cboot-dev>` and flash flow\n\n`\u003Cboot-dev>` is resolved deliberately, never assumed. Source order:\n\n1. If the active profile records the boot device, use it.\n2. Otherwise, prompt the user with the choices the per-board conf\n   actually supports (`internal`, `external`, `nvme0n1p1`, `mmcblk0p1`,\n   etc., depending on chip family and conf variant).\n\nPick the flow tool from the matrix below:\n\n| Chip family | Default boot media | Tool |\n|---|---|---|\n| T234 \u002F Orin | eMMC \u002F SD | `flash.sh` |\n| T234 \u002F Orin | NVMe \u002F USB | `l4t_initrd_flash.sh` |\n| T264 \u002F Thor | NVMe \u002F UFS | `l4t_initrd_flash.sh` |\n\nMassflash and `--flash-only` re-runs use the same tool selection but\nadd their respective flags.\n\n### Put the DUT into recovery mode\n\nDrive the device into recovery via the in-tree `boardctl` (preferred)\nor by manually pressing the recovery button followed by the reset button.\n\nThe full procedure — where to find `boardctl` under `Linux_for_Tegra\u002F`,\nhow to enumerate `-t` targets and pick one (recommend `topo`), the\nexact `recovery` verb to use, and the manual fallback — lives in\n[`references\u002Frecovery-mode-boardctl.md`](references\u002Frecovery-mode-boardctl.md).\n\nBind the resolved binary path as `\u003Cboardctl>` for the remainder of\nthis skill. Never substitute a `$PATH` `boardctl`, never invent a\ntarget name not present in `\u003Cboardctl> -h`. The \"Preflight checks\" step's DUT-recovery verification covers — for\nboth paths — that the DUT actually landed in RCM mode.\n\n### Preflight checks\n\nPerforming the following preflight checks in the specified order,\nand never skip each check. Host-side checks run first (fail early\nbefore asking the user to flip recovery), then DUT-side checks once\nthe user has put the device in RCM mode. EEPROM-dependent checks come\nafter RCM detection, since the recovery channel is what makes the read\npossible.\n\n**5.1 `bsp_image` readiness (host-side).**\n\n- Per-board conf exists at `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F\u003Cflash_config>`.\n- Artifact subtrees populated: `kernel\u002Fdtb\u002F`, `bootloader\u002F`,\n  `bootloader\u002Fgeneric\u002FBCT\u002F`, `rootfs\u002F`.\n- `apply_binaries.sh` has been run — check for\n  `rootfs\u002Fetc\u002Fnv_tegra_release` and the chip's `nvidia-l4t-bsp-*`\n  marker package files.\n- The *exact* resolved `DTB_FILE` \u002F `BPFDTB_FILE` \u002F BCT filenames\n  are intentionally not checked here — those are picked from\n  EEPROM at flash time (see the \"Resolve the flash conf path\" step).\n- **Kernel `Image` mirror invariant.** When both\n  `\u003CLFT_DST>\u002Fkernel\u002FImage` and `\u003CLFT_DST>\u002Frootfs\u002Fboot\u002FImage` exist,\n  they must be byte-identical (`cmp -s`); drift means\n  `\u002Fjetson-promote-image`'s [Mirror step](..\u002Fjetson-promote-image\u002FSKILL.md#mirror-kernel-image-into-rootfs-when-kernel-changed)\n  was skipped — route back. **Initramfs presence.**\n  `l4t_initrd_flash.sh` requires `\u003CLFT_DST>\u002Fbootloader\u002Fl4t_initrd.img`\n  and `\u003CLFT_DST>\u002Frootfs\u002Fboot\u002Finitrd`; absent → route to\n  `\u002Fjetson-init-image`. (Freshness vs.\n  `rootfs\u002Flib\u002Fmodules\u002F\u003Cver>\u002F` is not checked here — owned by\n  `\u002Fjetson-promote-image`'s\n  [Refresh initramfs step](..\u002Fjetson-promote-image\u002FSKILL.md#refresh-initramfs-when-kernel-or-modules-changed).)\n\n**5.2 DUT in RCM mode.**\n\n- Verifies the outcome of the \"Put the DUT into recovery mode\" step (either the user-selected\n  `\u003Cboardctl> -t \u003Ctarget>` invocation or the manual fallback).\n- `lsusb -d 0955:` must report at least one device matching the\n  active chip family's recovery VID:PID pair:\n\n  | Chip family | Recovery VID:PID |\n  |---|---|\n  | T23x \u002F Orin | `0955:7X23` (X is any hex digit — module variant) |\n  | T26x \u002F Thor | `0955:7026` |\n\n  For T23x, match on the trailing `23` (e.g. `lsusb -d 0955: | grep -E ' 0955:7.23 '`); a literal `0955:7023` check will miss valid T23x variants.\n\n- Absent → if the \"Put the DUT into recovery mode\" step used `boardctl`, surface its output and\n  refuse; if the \"Put the DUT into recovery mode\" step used the manual path, re-prompt the user to\n  confirm the jumper \u002F button and power-cycle.\n- **This is the gate for everything downstream.** `flash.sh`'s\n  image-generation phase reads EEPROM over the same recovery\n  channel; a device that's not in RCM here will fail there too.\n\n**5.3 EEPROM cross-check vs. active profile.**\n\nRead `board_sku` and `board_FAB` (and any additional dispatch inputs\nthe active chip family uses) from the DUT's EEPROM in recovery mode\nusing `sudo .\u002Fnvautoflash.sh --print_boardid` from\n`\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F`. The full reference —\nsample output, label-to-dispatch-input mapping, empty-value\nsemantics, and the EEPROM-vs-profile reconciliation table — lives in\n[`references\u002Feeprom-cross-check.md`](references\u002Feeprom-cross-check.md).\n\nRefusal trigger is a *real non-empty disagreement*, never a missing\nvalue. Empty EEPROM values are valid and not a refusal trigger. The\ncross-check is the primary defense against the wrong-target \u002F\nwrong-SKU class of failures whenever both sides supply enough\ninformation to disagree.\n\n**5.4 Default user staging (host-side, interactive).**\n\nA freshly applied `bsp_image` has no Linux user pre-staged. Detect via\n`\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fhome\u002F` and\n`rootfs\u002Fetc\u002Fpasswd` UID ≥ 1000. If none, issue one `AskUserQuestion`\nwith four click-to-select options: `ubuntu \u002F ubuntu`, `nvidia \u002F nvidia`,\n`custom` (sub-prompt for username + password), or `skip` (OEM wizard\non first boot). Non-`skip` picks run\n`l4t_create_default_user.sh --autologin --accept-license`. Full\ninvocation + rationale in\n[`references\u002Fdefault-user-staging.md`](references\u002Fdefault-user-staging.md).\n\nRecord the resolution so the \"Confirm resolution\" step can display it. This step is **not**\na refusal gate — it is a user-interaction point.\n\n### Confirm resolution\n\nPrint the resolved plan and require explicit acceptance. The format\nis the resolution, not the shell command — the user is approving\n*what* will flash, not the *string* that will be executed:\n\n```\nTarget:         \u003Creference_devkit.name> [+ custom_carrier.name]\nProfile:        target-platform\u002F\u003Cactive>.yaml\nbsp_image:      \u003Cbsp_image.root_path>\u002FLinux_for_Tegra  (version \u003CX>)\nFlash conf:     \u003Cflash_config>   (path verified in the \"Resolve the flash conf path\" step)\n\nDUT EEPROM  →   board_sku=\u003Cvalue-or-(empty)>  board_FAB=\u003Cvalue-or-(empty)>\nProfile     →   module.sku=\u003Cvalue-or-(any)>    module.revision=\u003Cvalue-or-(any)>\n                (reconciled per the \"Preflight checks\" step's EEPROM cross-check)\n\nBoot device:    \u003Cboot-dev>\nFlow tool:      flash.sh  |  l4t_initrd_flash.sh\nboardctl:       \u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Ftools\u002Fboard_automation\u002Fboardctl\n                (or the path the \"Put the DUT into recovery mode\" step resolved)\nRCM entry:      \u003Cboardctl> -t \u003Cuser-selected target> recovery  |  manual recovery + reset buttons\nPost-flash:     \u003Cboardctl> -t \u003Cuser-selected target> reset   (T26x \u002F Thor)\n                not required — flash tool resets internally    (T23x \u002F Orin)\nDefault user:   \u003Cusername> (autologin)\n              | already staged in rootfs (kept)\n              | none — OEM config wizard on first boot\n```\n\nArtifact paths (`DTB_FILE`, `BPFDTB_FILE`, partition XML, BCTs) are\nnot shown — they are resolved by `flash.sh` from EEPROM at flash\ntime, not by this skill. The \"Preflight checks\" step's EEPROM cross-check is what\nguarantees those flash-time picks will line up with what the profile\nexpects.\n\nThis is the user-acceptance gate. Refuse to fall back to a raw\n\"paste this command\" workflow — that path is how stale doc snippets,\nwrong dashes, and prompt-character paste artifacts make it into\nproduction flashes.\n\n### Invoke the flash\n\nConstruct the command from the resolved variables — never accept a\nverbatim command from the user, the docs, or memory:\n\n```bash\ncd \u003Cbsp_image.root_path>\u002FLinux_for_Tegra\nsudo .\u002F\u003Cflow-tool> [\u003Cresolved flags>] \u003Cboard> \u003Cboot-dev>\n```\n\nAbort and surface the failed step on the first non-zero exit. Do\nnot auto-retry on transient USB errors.\n\n### Post-flash reset (T26x \u002F Thor only)\n\nT26x platforms do **not** auto-reboot from the freshly flashed image\nwhen `flash.sh` \u002F `l4t_initrd_flash.sh` returns. Run, using the\n`\u003Cboardctl>` resolved in the \"Put the DUT into recovery mode\" step and the same target the user\nselected for RCM entry:\n\n```bash\n\u003Cboardctl> -t \u003Cuser-selected target> reset\n```\n\nT23x \u002F Orin issues the reset internally; skip this step on Orin. If\nthe \"Put the DUT into recovery mode\" step used the manual path, prompt the user to remove the\nforce-recovery jumper \u002F button and power-cycle by hand. Gate this\nstep on chip family resolved from the active profile.\n\n### Summary\n\nReport: command line(s) used (flash + post-flash reset if it ran),\nexit code, log location (if teed). Persist the resolved plan and\noutcome where validation can re-read it.\n\n## Limitations\n\n- **DUT must be in RCM mode.** Image-generation (EEPROM read) and the flash itself both use the recovery USB channel; not-in-RCM at the gate fails image-gen too.\n- **Artifact paths resolved at flash time.** `DTB_FILE`, `BPFDTB_FILE`, partition XML, BCTs, DRAM training are picked from EEPROM (`board_sku` \u002F `board_FAB`) by `flash.sh` \u002F `l4t_initrd_flash.sh`; this skill validates only host-side scaffolding.\n- **EEPROM is authoritative over the profile.** Real non-empty disagreement refuses; *empty* EEPROM values are valid.\n- **No raw-command bypass.** Refuses to fall back to user-supplied \"paste this command\" — that path is how stale doc snippets and prompt-character paste artifacts reach production flashes.\n- **No transient-error auto-retry.** USB hiccups abort; re-enter RCM and re-invoke.\n- **T26x needs an explicit post-flash reset.** T26x doesn't auto-reboot from a freshly flashed image; `\u003Cboardctl> -t \u003Ctarget> reset` (or manual power-cycle) required. T23x resets internally.\n- **Massflash \u002F `--flash-only`** uses the same tool selection + respective flags; massflash topology setup is out of scope here.\n\n## Troubleshooting\n\n| Error | Cause | Solution |\n|---|---|---|\n| `lsusb -d 0955:` reports nothing matching `0955:7X23` (T23x) or `0955:7026` (T26x) | DUT did not enter RCM mode — `boardctl recovery` failed or the manual recovery + reset sequence didn't take. | If `boardctl` was used, surface its output and re-prompt; manual path, re-confirm the recovery jumper \u002F button and power-cycle. Re-run the \"DUT in RCM mode\" preflight. |\n| Preflight EEPROM cross-check refuses with `board_sku` \u002F `board_FAB` mismatch vs. profile | EEPROM holds a *real non-empty* value that disagrees with `module.sku` \u002F `module.revision` in the active profile. | Fix the profile (`\u002Fjetson-set-target` or `\u002Fjetson-init-target`) to match the DUT's actual EEPROM. Do **not** override EEPROM from the profile — EEPROM is authoritative. |\n| Preflight refuses with \"per-board conf not found\" | Active profile points at a `flash_config` that does not exist under `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F`. | For custom carriers: run `\u002Fjetson-derive-carrier` to produce the conf. For reference devkits: re-run `\u002Fjetson-promote-image` \u002F `\u002Fjetson-init-image` to repopulate the BSP image. |\n| Preflight refuses because `rootfs\u002Fetc\u002Fnv_tegra_release` is missing | `apply_binaries.sh` has not been run against `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F`. | Re-run `\u002Fjetson-init-image` (which invokes `apply_binaries.sh`) or run `apply_binaries.sh` manually from `Linux_for_Tegra\u002F`. |\n| `boardctl -t \u003Ctarget> recovery` errors out or has no effect | Wrong `boardctl` (a `$PATH` binary instead of the in-tree one) or a target name not enumerated by `\u003Cboardctl> -h`. | Use the in-tree `\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Ftools\u002Fboard_automation\u002Fboardctl`; pick the target from `\u003Cboardctl> -h`. Fall back to manual recovery + reset buttons if needed. |\n| Flash succeeds on T26x but the DUT stays in recovery \u002F does not boot the new image | T26x does not auto-reset out of recovery after `flash.sh` \u002F `l4t_initrd_flash.sh` returns. | Run `\u003Cboardctl> -t \u003Ctarget> reset` (same target used for RCM entry), or for the manual path remove the force-recovery jumper \u002F button and power-cycle. T23x \u002F Orin needs no extra step. |\n| First boot lands on Ubuntu's OEM configuration wizard despite expecting autologin | No default user was staged into `rootfs` before flashing. | Either re-flash after staging via `l4t_create_default_user.sh --autologin --accept-license` (see the default-user-staging step), or complete the OEM wizard on the DUT this once. |\n| `flash.sh` exits non-zero on an artifact-not-found error (DTB \u002F BPFDTB \u002F partition XML) | EEPROM-driven dispatch resolved a filename that doesn't exist in `bsp_image` — usually `\u002Fjetson-promote-image` didn't copy the customized artifact, or the EEPROM SKU is unsupported by the BSP. | Re-run `\u002Fjetson-promote-image`. If the SKU is unsupported, the DUT needs a different BSP version. |\n| `kernel\u002FImage` ↔ `rootfs\u002Fboot\u002FImage` drift, missing `bootloader\u002Fl4t_initrd.img` \u002F `rootfs\u002Fboot\u002Finitrd`, or `modprobe` \"disagrees about version of symbol …\" on the DUT | `\u002Fjetson-promote-image`'s mirror \u002F refresh steps were skipped, or `bsp_image` was hand-edited outside Deploy. | Re-run `\u002Fjetson-promote-image` and re-flash. If initramfs files are entirely absent, run `\u002Fjetson-init-image` first. See [promote-image's kernel-image-and-initramfs reference](..\u002Fjetson-promote-image\u002Freferences\u002Fkernel-image-and-initramfs.md) for the manual escape hatch. |\n\n## References\n\n- [`references\u002Frecovery-mode-boardctl.md`](references\u002Frecovery-mode-boardctl.md) — locate the in-tree `boardctl`, enumerate targets, invoke `recovery` \u002F `reset`, manual fallback (the \"Put the DUT into recovery mode\" step \u002F the \"Post-flash reset\" step details).\n- [`references\u002Feeprom-cross-check.md`](references\u002Feeprom-cross-check.md) — `nvautoflash.sh --print_boardid` sample, label-to-dispatch-input map, EEPROM-vs-profile reconciliation table (used by the \"Preflight checks\" step).\n- [`references\u002Fdefault-user-staging.md`](references\u002Fdefault-user-staging.md) — `l4t_create_default_user.sh` invocation + flag rationale (used by the \"Preflight checks\" step).\n- [`..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md`](..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md) — target-platform contract.\n- [`..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md`](..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md#workflow-invariants) — Workspace edit protocol (this skill is the flash leg of Deploy).\n- [Per-board conf dispatch](..\u002F..\u002Fcontext\u002Fbsp-customization-software-layers.md#per-board-conf-dispatch--update_flash_args_common) — `\u003Cboard>`, DTB, and BCT resolution from the active profile.\n- [`..\u002Fjetson-promote-image\u002FSKILL.md`](..\u002Fjetson-promote-image\u002FSKILL.md) — prior leg; copies overlay → bsp_image.\n- [`..\u002Fjetson-derive-carrier\u002FSKILL.md`](..\u002Fjetson-derive-carrier\u002FSKILL.md) — produces the custom carrier's flash conf consumed by the \"Resolve the flash conf path\" step.\n",{"data":35,"body":44},{"name":4,"description":6,"version":36,"license":26,"metadata":37},"0.0.1",{"data-classification":38,"author":39,"tags":40,"domain":43},"public","Jetson Team",[41,42],"bsp","flash","meta",{"type":45,"children":46},"root",[47,56,63,134,144,252,287,293,415,421,453,459,471,507,513,577,619,691,726,739,749,792,797,892,905,911,923,976,1011,1017,1022,1037,1250,1258,1400,1408,1451,1463,1471,1562,1573,1579,1598,1610,1634,1639,1645,1650,1794,1799,1805,1836,1881,1886,1892,1897,1903,2034,2040,2568,2574,2723],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"flash-bsp-image",[53],{"type":54,"value":55},"text","Flash BSP Image",{"type":48,"tag":57,"props":58,"children":60},"h2",{"id":59},"purpose",[61],{"type":54,"value":62},"Purpose",{"type":48,"tag":64,"props":65,"children":66},"p",{},[67,69,76,78,84,86,92,94,100,102,108,110,116,118,124,126,132],{"type":54,"value":68},"Push a promoted ",{"type":48,"tag":70,"props":71,"children":73},"code",{"className":72},[],[74],{"type":54,"value":75},"bsp_image",{"type":54,"value":77}," to a Jetson DUT by running the NVIDIA flashing toolchain (",{"type":48,"tag":70,"props":79,"children":81},{"className":80},[],[82],{"type":54,"value":83},"flash.sh",{"type":54,"value":85}," or ",{"type":48,"tag":70,"props":87,"children":89},{"className":88},[],[90],{"type":54,"value":91},"l4t_initrd_flash.sh",{"type":54,"value":93},") from the in-tree ",{"type":48,"tag":70,"props":95,"children":97},{"className":96},[],[98],{"type":54,"value":99},"Linux_for_Tegra\u002F",{"type":54,"value":101},". The DUT must be in RCM (recovery) mode at flash time. This is the ",{"type":48,"tag":103,"props":104,"children":105},"strong",{},[106],{"type":54,"value":107},"flash leg",{"type":54,"value":109}," of the BSP overlay deploy chain (",{"type":48,"tag":70,"props":111,"children":113},{"className":112},[],[114],{"type":54,"value":115},"\u002Fjetson-promote-image",{"type":54,"value":117}," → ",{"type":48,"tag":70,"props":119,"children":121},{"className":120},[],[122],{"type":54,"value":123},"\u002Fjetson-flash-image",{"type":54,"value":125},"); see the BSP overlay workflow at ",{"type":48,"tag":70,"props":127,"children":129},{"className":128},[],[130],{"type":54,"value":131},"..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md",{"type":54,"value":133},".",{"type":48,"tag":64,"props":135,"children":136},{},[137,142],{"type":48,"tag":103,"props":138,"children":139},{},[140],{"type":54,"value":141},"Design principle.",{"type":54,"value":143}," Four invariants govern this skill; each is fully explained in the Instructions step that owns it.",{"type":48,"tag":145,"props":146,"children":147},"ul",{},[148,185,234,239],{"type":48,"tag":149,"props":150,"children":151},"li",{},[152,154,160,162,168,170,176,177,183],{"type":54,"value":153},"Host-side flash variables (",{"type":48,"tag":70,"props":155,"children":157},{"className":156},[],[158],{"type":54,"value":159},"\u003Cboard>",{"type":54,"value":161},", ",{"type":48,"tag":70,"props":163,"children":165},{"className":164},[],[166],{"type":54,"value":167},"\u003Cboot-dev>",{"type":54,"value":169},", flow tool, per-board ",{"type":48,"tag":70,"props":171,"children":173},{"className":172},[],[174],{"type":54,"value":175},".conf",{"type":54,"value":161},{"type":48,"tag":70,"props":178,"children":180},{"className":179},[],[181],{"type":54,"value":182},"boardctl",{"type":54,"value":184},") are resolved from the active profile or the in-tree BSP.",{"type":48,"tag":149,"props":186,"children":187},{},[188,190,196,197,203,205,210,212,217,219,225,226,232],{"type":54,"value":189},"Artifact paths (",{"type":48,"tag":70,"props":191,"children":193},{"className":192},[],[194],{"type":54,"value":195},"DTB_FILE",{"type":54,"value":161},{"type":48,"tag":70,"props":198,"children":200},{"className":199},[],[201],{"type":54,"value":202},"BPFDTB_FILE",{"type":54,"value":204},", partition XML, BCTs, DRAM training) are resolved inside ",{"type":48,"tag":70,"props":206,"children":208},{"className":207},[],[209],{"type":54,"value":83},{"type":54,"value":211}," \u002F ",{"type":48,"tag":70,"props":213,"children":215},{"className":214},[],[216],{"type":54,"value":91},{"type":54,"value":218}," at flash time from ",{"type":48,"tag":70,"props":220,"children":222},{"className":221},[],[223],{"type":54,"value":224},"board_sku",{"type":54,"value":211},{"type":48,"tag":70,"props":227,"children":229},{"className":228},[],[230],{"type":54,"value":231},"board_FAB",{"type":54,"value":233}," read off the DUT's EEPROM.",{"type":48,"tag":149,"props":235,"children":236},{},[237],{"type":54,"value":238},"The DUT's EEPROM is authoritative; the profile is an authoring-time prediction reconciled by the preflight cross-check. Empty EEPROM values are valid, not refusal triggers.",{"type":48,"tag":149,"props":240,"children":241},{},[242,244,250],{"type":54,"value":243},"The user explicitly confirms a printed ",{"type":48,"tag":245,"props":246,"children":247},"em",{},[248],{"type":54,"value":249},"resolution",{"type":54,"value":251}," before flashing.",{"type":48,"tag":64,"props":253,"children":254},{},[255,257,263,265,270,272,277,279,285],{"type":54,"value":256},"Out of scope: BSP customization (use the ",{"type":48,"tag":70,"props":258,"children":260},{"className":259},[],[261],{"type":54,"value":262},"\u002Fjetson-customize-*",{"type":54,"value":264}," skills), promoting the overlay tracker into ",{"type":48,"tag":70,"props":266,"children":268},{"className":267},[],[269],{"type":54,"value":75},{"type":54,"value":271}," (use ",{"type":48,"tag":70,"props":273,"children":275},{"className":274},[],[276],{"type":54,"value":115},{"type":54,"value":278},"), and producing a custom carrier's flash conf (use ",{"type":48,"tag":70,"props":280,"children":282},{"className":281},[],[283],{"type":54,"value":284},"\u002Fjetson-derive-carrier",{"type":54,"value":286},").",{"type":48,"tag":57,"props":288,"children":290},{"id":289},"prerequisites",[291],{"type":54,"value":292},"Prerequisites",{"type":48,"tag":145,"props":294,"children":295},{},[296,325,351,391,403],{"type":48,"tag":149,"props":297,"children":298},{},[299,301,307,309,315,317,323],{"type":54,"value":300},"Active target-platform profile resolved per ",{"type":48,"tag":70,"props":302,"children":304},{"className":303},[],[305],{"type":54,"value":306},"..\u002F..\u002Fcontext\u002Ftarget-platform-contract.md",{"type":54,"value":308}," with a populated ",{"type":48,"tag":70,"props":310,"children":312},{"className":311},[],[313],{"type":54,"value":314},"bsp_image:",{"type":54,"value":316}," block. Refuse and route to ",{"type":48,"tag":70,"props":318,"children":320},{"className":319},[],[321],{"type":54,"value":322},"\u002Fjetson-init-image",{"type":54,"value":324}," if missing.",{"type":48,"tag":149,"props":326,"children":327},{},[328,334,336,342,344,349],{"type":48,"tag":70,"props":329,"children":331},{"className":330},[],[332],{"type":54,"value":333},"\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F",{"type":54,"value":335}," exists on the host and has been through ",{"type":48,"tag":70,"props":337,"children":339},{"className":338},[],[340],{"type":54,"value":341},"apply_binaries.sh",{"type":54,"value":343}," (route to ",{"type":48,"tag":70,"props":345,"children":347},{"className":346},[],[348],{"type":54,"value":322},{"type":54,"value":350}," otherwise).",{"type":48,"tag":149,"props":352,"children":353},{},[354,356,361,363,369,370,376,378,383,384,389],{"type":54,"value":355},"A per-board flash ",{"type":48,"tag":70,"props":357,"children":359},{"className":358},[],[360],{"type":54,"value":175},{"type":54,"value":362}," resolvable via the active-block precedence rule (",{"type":48,"tag":70,"props":364,"children":366},{"className":365},[],[367],{"type":54,"value":368},"custom_carrier.flash_config",{"type":54,"value":117},{"type":48,"tag":70,"props":371,"children":373},{"className":372},[],[374],{"type":54,"value":375},"reference_devkit.flash_config",{"type":54,"value":377},"). Refuse and route to ",{"type":48,"tag":70,"props":379,"children":381},{"className":380},[],[382],{"type":54,"value":284},{"type":54,"value":85},{"type":48,"tag":70,"props":385,"children":387},{"className":386},[],[388],{"type":54,"value":322},{"type":54,"value":390}," if absent.",{"type":48,"tag":149,"props":392,"children":393},{},[394,396,401],{"type":54,"value":395},"For the prior overlay → image leg: ",{"type":48,"tag":70,"props":397,"children":399},{"className":398},[],[400],{"type":54,"value":115},{"type":54,"value":402}," has already run (or a standalone re-flash with no promotion changes since the last flash).",{"type":48,"tag":149,"props":404,"children":405},{},[406,408,413],{"type":54,"value":407},"A DUT cabled to the host that can be driven into RCM mode either via the in-tree ",{"type":48,"tag":70,"props":409,"children":411},{"className":410},[],[412],{"type":54,"value":182},{"type":54,"value":414}," or by manual recovery + reset buttons.",{"type":48,"tag":57,"props":416,"children":418},{"id":417},"when-to-invoke",[419],{"type":54,"value":420},"When to invoke",{"type":48,"tag":145,"props":422,"children":423},{},[424,443,448],{"type":48,"tag":149,"props":425,"children":426},{},[427,429,434,436,441],{"type":54,"value":428},"After ",{"type":48,"tag":70,"props":430,"children":432},{"className":431},[],[433],{"type":54,"value":115},{"type":54,"value":435}," has updated ",{"type":48,"tag":70,"props":437,"children":439},{"className":438},[],[440],{"type":54,"value":75},{"type":54,"value":442}," to carry the desired customizations.",{"type":48,"tag":149,"props":444,"children":445},{},[446],{"type":54,"value":447},"Standalone re-flash with no promotion changes since the last flash.",{"type":48,"tag":149,"props":449,"children":450},{},[451],{"type":54,"value":452},"DUT must be in RCM mode before invocation.",{"type":48,"tag":57,"props":454,"children":456},{"id":455},"instructions",[457],{"type":54,"value":458},"Instructions",{"type":48,"tag":460,"props":461,"children":463},"h3",{"id":462},"resolve-target-and-bsp_image",[464,466],{"type":54,"value":465},"Resolve target and ",{"type":48,"tag":70,"props":467,"children":469},{"className":468},[],[470],{"type":54,"value":75},{"type":48,"tag":64,"props":472,"children":473},{},[474,476,485,487,492,494,499,501,506],{"type":54,"value":475},"Resolve the active profile per\n",{"type":48,"tag":477,"props":478,"children":479},"a",{"href":306},[480],{"type":48,"tag":70,"props":481,"children":483},{"className":482},[],[484],{"type":54,"value":306},{"type":54,"value":486},".\nRefuse if ",{"type":48,"tag":70,"props":488,"children":490},{"className":489},[],[491],{"type":54,"value":314},{"type":54,"value":493}," is missing or ",{"type":48,"tag":70,"props":495,"children":497},{"className":496},[],[498],{"type":54,"value":333},{"type":54,"value":500},"\ndoes not exist (route the user to ",{"type":48,"tag":70,"props":502,"children":504},{"className":503},[],[505],{"type":54,"value":322},{"type":54,"value":286},{"type":48,"tag":460,"props":508,"children":510},{"id":509},"resolve-the-flash-conf-path",[511],{"type":54,"value":512},"Resolve the flash conf path",{"type":48,"tag":64,"props":514,"children":515},{},[516,518,523,525,534,536,541,543,548,550,555,557,562,564,569,570,575],{"type":54,"value":517},"Pick the per-board ",{"type":48,"tag":70,"props":519,"children":521},{"className":520},[],[522],{"type":54,"value":175},{"type":54,"value":524}," using the active-block precedence rule\nfrom\n",{"type":48,"tag":477,"props":526,"children":527},{"href":306},[528],{"type":48,"tag":70,"props":529,"children":531},{"className":530},[],[532],{"type":54,"value":533},"target-platform-contract.md",{"type":54,"value":535},":\n",{"type":48,"tag":70,"props":537,"children":539},{"className":538},[],[540],{"type":54,"value":368},{"type":54,"value":542}," when present, else\n",{"type":48,"tag":70,"props":544,"children":546},{"className":545},[],[547],{"type":54,"value":375},{"type":54,"value":549},". Verify the chosen file exists under\n",{"type":48,"tag":70,"props":551,"children":553},{"className":552},[],[554],{"type":54,"value":333},{"type":54,"value":556},". Refuse if absent — route\nthe user at ",{"type":48,"tag":70,"props":558,"children":560},{"className":559},[],[561],{"type":54,"value":284},{"type":54,"value":563}," (custom carrier) or\n",{"type":48,"tag":70,"props":565,"children":567},{"className":566},[],[568],{"type":54,"value":115},{"type":54,"value":211},{"type":48,"tag":70,"props":571,"children":573},{"className":572},[],[574],{"type":54,"value":322},{"type":54,"value":576}," (reference devkit).",{"type":48,"tag":64,"props":578,"children":579},{},[580,582,587,589,594,596,601,603,609,611,617],{"type":54,"value":581},"Bind ",{"type":48,"tag":70,"props":583,"children":585},{"className":584},[],[586],{"type":54,"value":159},{"type":54,"value":588}," as the basename of the resolved ",{"type":48,"tag":70,"props":590,"children":592},{"className":591},[],[593],{"type":54,"value":175},{"type":54,"value":595}," minus the\n",{"type":48,"tag":70,"props":597,"children":599},{"className":598},[],[600],{"type":54,"value":175},{"type":54,"value":602}," suffix (e.g. ",{"type":48,"tag":70,"props":604,"children":606},{"className":605},[],[607],{"type":54,"value":608},"jetson-agx-thor-devkit.conf",{"type":54,"value":610}," →\n",{"type":48,"tag":70,"props":612,"children":614},{"className":613},[],[615],{"type":54,"value":616},"\u003Cboard>=jetson-agx-thor-devkit",{"type":54,"value":618},"). the \"Invoke the flash\" step's command shape consumes\nthis binding directly.",{"type":48,"tag":64,"props":620,"children":621},{},[622,627,629,634,636,641,643,648,649,654,656,661,663,668,670,675,677,682,684,689],{"type":48,"tag":103,"props":623,"children":624},{},[625],{"type":54,"value":626},"No dispatch preview at this stage.",{"type":54,"value":628}," Artifact resolution (",{"type":48,"tag":70,"props":630,"children":632},{"className":631},[],[633],{"type":54,"value":195},{"type":54,"value":635},",\n",{"type":48,"tag":70,"props":637,"children":639},{"className":638},[],[640],{"type":54,"value":202},{"type":54,"value":642},", partition XML, MB1 BCTs, DRAM training tables) happens\ninside ",{"type":48,"tag":70,"props":644,"children":646},{"className":645},[],[647],{"type":54,"value":83},{"type":54,"value":211},{"type":48,"tag":70,"props":650,"children":652},{"className":651},[],[653],{"type":54,"value":91},{"type":54,"value":655}," during image generation,\nusing ",{"type":48,"tag":70,"props":657,"children":659},{"className":658},[],[660],{"type":54,"value":224},{"type":54,"value":662}," and ",{"type":48,"tag":70,"props":664,"children":666},{"className":665},[],[667],{"type":54,"value":231},{"type":54,"value":669}," ",{"type":48,"tag":103,"props":671,"children":672},{},[673],{"type":54,"value":674},"read from the DUT's EEPROM in\nrecovery mode",{"type":54,"value":676}," — not values typed in from the profile. The profile\nis an authoring-time ",{"type":48,"tag":245,"props":678,"children":679},{},[680],{"type":54,"value":681},"prediction",{"type":54,"value":683},"; the DUT EEPROM is ",{"type":48,"tag":245,"props":685,"children":686},{},[687],{"type":54,"value":688},"authoritative",{"type":54,"value":690},"\nat flash time. The \"Preflight checks\" step's EEPROM cross-check reads EEPROM and refuses the flash on profile\n\u002F EEPROM mismatch, so passing preflight is what guarantees the\nflash-time dispatch will pick the artifacts the profile expects.",{"type":48,"tag":64,"props":692,"children":693},{},[694,696,702,704,710,712,717,719,724],{"type":54,"value":695},"For static analyses outside the flash flow that need predicted\nartifact paths (KB generation, ",{"type":48,"tag":70,"props":697,"children":699},{"className":698},[],[700],{"type":54,"value":701},"customize-*",{"type":54,"value":703}," skills locating files\nto edit), see the standalone snippet in\n",{"type":48,"tag":477,"props":705,"children":707},{"href":706},"..\u002F..\u002Fcontext\u002Fbsp-customization-software-layers.md#per-board-conf-dispatch--update_flash_args_common",[708],{"type":54,"value":709},"per-board conf dispatch",{"type":54,"value":711},"\n— that snippet is valid for ",{"type":48,"tag":245,"props":713,"children":714},{},[715],{"type":54,"value":716},"BSP-side",{"type":54,"value":718}," resolution but ",{"type":48,"tag":103,"props":720,"children":721},{},[722],{"type":54,"value":723},"not",{"type":54,"value":725}," as a\nflash-time preview.",{"type":48,"tag":460,"props":727,"children":729},{"id":728},"select-boot-dev-and-flash-flow",[730,732,737],{"type":54,"value":731},"Select ",{"type":48,"tag":70,"props":733,"children":735},{"className":734},[],[736],{"type":54,"value":167},{"type":54,"value":738}," and flash flow",{"type":48,"tag":64,"props":740,"children":741},{},[742,747],{"type":48,"tag":70,"props":743,"children":745},{"className":744},[],[746],{"type":54,"value":167},{"type":54,"value":748}," is resolved deliberately, never assumed. Source order:",{"type":48,"tag":750,"props":751,"children":752},"ol",{},[753,758],{"type":48,"tag":149,"props":754,"children":755},{},[756],{"type":54,"value":757},"If the active profile records the boot device, use it.",{"type":48,"tag":149,"props":759,"children":760},{},[761,763,769,770,776,777,783,784,790],{"type":54,"value":762},"Otherwise, prompt the user with the choices the per-board conf\nactually supports (",{"type":48,"tag":70,"props":764,"children":766},{"className":765},[],[767],{"type":54,"value":768},"internal",{"type":54,"value":161},{"type":48,"tag":70,"props":771,"children":773},{"className":772},[],[774],{"type":54,"value":775},"external",{"type":54,"value":161},{"type":48,"tag":70,"props":778,"children":780},{"className":779},[],[781],{"type":54,"value":782},"nvme0n1p1",{"type":54,"value":161},{"type":48,"tag":70,"props":785,"children":787},{"className":786},[],[788],{"type":54,"value":789},"mmcblk0p1",{"type":54,"value":791},",\netc., depending on chip family and conf variant).",{"type":48,"tag":64,"props":793,"children":794},{},[795],{"type":54,"value":796},"Pick the flow tool from the matrix below:",{"type":48,"tag":798,"props":799,"children":800},"table",{},[801,825],{"type":48,"tag":802,"props":803,"children":804},"thead",{},[805],{"type":48,"tag":806,"props":807,"children":808},"tr",{},[809,815,820],{"type":48,"tag":810,"props":811,"children":812},"th",{},[813],{"type":54,"value":814},"Chip family",{"type":48,"tag":810,"props":816,"children":817},{},[818],{"type":54,"value":819},"Default boot media",{"type":48,"tag":810,"props":821,"children":822},{},[823],{"type":54,"value":824},"Tool",{"type":48,"tag":826,"props":827,"children":828},"tbody",{},[829,851,871],{"type":48,"tag":806,"props":830,"children":831},{},[832,838,843],{"type":48,"tag":833,"props":834,"children":835},"td",{},[836],{"type":54,"value":837},"T234 \u002F Orin",{"type":48,"tag":833,"props":839,"children":840},{},[841],{"type":54,"value":842},"eMMC \u002F SD",{"type":48,"tag":833,"props":844,"children":845},{},[846],{"type":48,"tag":70,"props":847,"children":849},{"className":848},[],[850],{"type":54,"value":83},{"type":48,"tag":806,"props":852,"children":853},{},[854,858,863],{"type":48,"tag":833,"props":855,"children":856},{},[857],{"type":54,"value":837},{"type":48,"tag":833,"props":859,"children":860},{},[861],{"type":54,"value":862},"NVMe \u002F USB",{"type":48,"tag":833,"props":864,"children":865},{},[866],{"type":48,"tag":70,"props":867,"children":869},{"className":868},[],[870],{"type":54,"value":91},{"type":48,"tag":806,"props":872,"children":873},{},[874,879,884],{"type":48,"tag":833,"props":875,"children":876},{},[877],{"type":54,"value":878},"T264 \u002F Thor",{"type":48,"tag":833,"props":880,"children":881},{},[882],{"type":54,"value":883},"NVMe \u002F UFS",{"type":48,"tag":833,"props":885,"children":886},{},[887],{"type":48,"tag":70,"props":888,"children":890},{"className":889},[],[891],{"type":54,"value":91},{"type":48,"tag":64,"props":893,"children":894},{},[895,897,903],{"type":54,"value":896},"Massflash and ",{"type":48,"tag":70,"props":898,"children":900},{"className":899},[],[901],{"type":54,"value":902},"--flash-only",{"type":54,"value":904}," re-runs use the same tool selection but\nadd their respective flags.",{"type":48,"tag":460,"props":906,"children":908},{"id":907},"put-the-dut-into-recovery-mode",[909],{"type":54,"value":910},"Put the DUT into recovery mode",{"type":48,"tag":64,"props":912,"children":913},{},[914,916,921],{"type":54,"value":915},"Drive the device into recovery via the in-tree ",{"type":48,"tag":70,"props":917,"children":919},{"className":918},[],[920],{"type":54,"value":182},{"type":54,"value":922}," (preferred)\nor by manually pressing the recovery button followed by the reset button.",{"type":48,"tag":64,"props":924,"children":925},{},[926,928,933,935,940,942,948,950,956,958,964,966,975],{"type":54,"value":927},"The full procedure — where to find ",{"type":48,"tag":70,"props":929,"children":931},{"className":930},[],[932],{"type":54,"value":182},{"type":54,"value":934}," under ",{"type":48,"tag":70,"props":936,"children":938},{"className":937},[],[939],{"type":54,"value":99},{"type":54,"value":941},",\nhow to enumerate ",{"type":48,"tag":70,"props":943,"children":945},{"className":944},[],[946],{"type":54,"value":947},"-t",{"type":54,"value":949}," targets and pick one (recommend ",{"type":48,"tag":70,"props":951,"children":953},{"className":952},[],[954],{"type":54,"value":955},"topo",{"type":54,"value":957},"), the\nexact ",{"type":48,"tag":70,"props":959,"children":961},{"className":960},[],[962],{"type":54,"value":963},"recovery",{"type":54,"value":965}," verb to use, and the manual fallback — lives in\n",{"type":48,"tag":477,"props":967,"children":969},{"href":968},"references\u002Frecovery-mode-boardctl.md",[970],{"type":48,"tag":70,"props":971,"children":973},{"className":972},[],[974],{"type":54,"value":968},{"type":54,"value":133},{"type":48,"tag":64,"props":977,"children":978},{},[979,981,987,989,995,996,1001,1003,1009],{"type":54,"value":980},"Bind the resolved binary path as ",{"type":48,"tag":70,"props":982,"children":984},{"className":983},[],[985],{"type":54,"value":986},"\u003Cboardctl>",{"type":54,"value":988}," for the remainder of\nthis skill. Never substitute a ",{"type":48,"tag":70,"props":990,"children":992},{"className":991},[],[993],{"type":54,"value":994},"$PATH",{"type":54,"value":669},{"type":48,"tag":70,"props":997,"children":999},{"className":998},[],[1000],{"type":54,"value":182},{"type":54,"value":1002},", never invent a\ntarget name not present in ",{"type":48,"tag":70,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":54,"value":1008},"\u003Cboardctl> -h",{"type":54,"value":1010},". The \"Preflight checks\" step's DUT-recovery verification covers — for\nboth paths — that the DUT actually landed in RCM mode.",{"type":48,"tag":460,"props":1012,"children":1014},{"id":1013},"preflight-checks",[1015],{"type":54,"value":1016},"Preflight checks",{"type":48,"tag":64,"props":1018,"children":1019},{},[1020],{"type":54,"value":1021},"Performing the following preflight checks in the specified order,\nand never skip each check. Host-side checks run first (fail early\nbefore asking the user to flip recovery), then DUT-side checks once\nthe user has put the device in RCM mode. EEPROM-dependent checks come\nafter RCM detection, since the recovery channel is what makes the read\npossible.",{"type":48,"tag":64,"props":1023,"children":1024},{},[1025],{"type":48,"tag":103,"props":1026,"children":1027},{},[1028,1030,1035],{"type":54,"value":1029},"5.1 ",{"type":48,"tag":70,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":54,"value":75},{"type":54,"value":1036}," readiness (host-side).",{"type":48,"tag":145,"props":1038,"children":1039},{},[1040,1052,1085,1111,1136],{"type":48,"tag":149,"props":1041,"children":1042},{},[1043,1045,1051],{"type":54,"value":1044},"Per-board conf exists at ",{"type":48,"tag":70,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":54,"value":1050},"\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002F\u003Cflash_config>",{"type":54,"value":133},{"type":48,"tag":149,"props":1053,"children":1054},{},[1055,1057,1063,1064,1070,1071,1077,1078,1084],{"type":54,"value":1056},"Artifact subtrees populated: ",{"type":48,"tag":70,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":54,"value":1062},"kernel\u002Fdtb\u002F",{"type":54,"value":161},{"type":48,"tag":70,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":54,"value":1069},"bootloader\u002F",{"type":54,"value":635},{"type":48,"tag":70,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":54,"value":1076},"bootloader\u002Fgeneric\u002FBCT\u002F",{"type":54,"value":161},{"type":48,"tag":70,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":54,"value":1083},"rootfs\u002F",{"type":54,"value":133},{"type":48,"tag":149,"props":1086,"children":1087},{},[1088,1093,1095,1101,1103,1109],{"type":48,"tag":70,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":54,"value":341},{"type":54,"value":1094}," has been run — check for\n",{"type":48,"tag":70,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":54,"value":1100},"rootfs\u002Fetc\u002Fnv_tegra_release",{"type":54,"value":1102}," and the chip's ",{"type":48,"tag":70,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":54,"value":1108},"nvidia-l4t-bsp-*",{"type":54,"value":1110},"\nmarker package files.",{"type":48,"tag":149,"props":1112,"children":1113},{},[1114,1116,1121,1123,1128,1129,1134],{"type":54,"value":1115},"The ",{"type":48,"tag":245,"props":1117,"children":1118},{},[1119],{"type":54,"value":1120},"exact",{"type":54,"value":1122}," resolved ",{"type":48,"tag":70,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":54,"value":195},{"type":54,"value":211},{"type":48,"tag":70,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":54,"value":202},{"type":54,"value":1135}," \u002F BCT filenames\nare intentionally not checked here — those are picked from\nEEPROM at flash time (see the \"Resolve the flash conf path\" step).",{"type":48,"tag":149,"props":1137,"children":1138},{},[1139,1152,1154,1160,1161,1167,1169,1175,1177,1182,1184,1190,1192,1197,1202,1204,1210,1212,1218,1220,1225,1227,1233,1235,1240,1242,1248],{"type":48,"tag":103,"props":1140,"children":1141},{},[1142,1144,1150],{"type":54,"value":1143},"Kernel ",{"type":48,"tag":70,"props":1145,"children":1147},{"className":1146},[],[1148],{"type":54,"value":1149},"Image",{"type":54,"value":1151}," mirror invariant.",{"type":54,"value":1153}," When both\n",{"type":48,"tag":70,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":54,"value":1159},"\u003CLFT_DST>\u002Fkernel\u002FImage",{"type":54,"value":662},{"type":48,"tag":70,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":54,"value":1166},"\u003CLFT_DST>\u002Frootfs\u002Fboot\u002FImage",{"type":54,"value":1168}," exist,\nthey must be byte-identical (",{"type":48,"tag":70,"props":1170,"children":1172},{"className":1171},[],[1173],{"type":54,"value":1174},"cmp -s",{"type":54,"value":1176},"); drift means\n",{"type":48,"tag":70,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":54,"value":115},{"type":54,"value":1183},"'s ",{"type":48,"tag":477,"props":1185,"children":1187},{"href":1186},"..\u002Fjetson-promote-image\u002FSKILL.md#mirror-kernel-image-into-rootfs-when-kernel-changed",[1188],{"type":54,"value":1189},"Mirror step",{"type":54,"value":1191},"\nwas skipped — route back. ",{"type":48,"tag":103,"props":1193,"children":1194},{},[1195],{"type":54,"value":1196},"Initramfs presence.",{"type":48,"tag":70,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":54,"value":91},{"type":54,"value":1203}," requires ",{"type":48,"tag":70,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":54,"value":1209},"\u003CLFT_DST>\u002Fbootloader\u002Fl4t_initrd.img",{"type":54,"value":1211},"\nand ",{"type":48,"tag":70,"props":1213,"children":1215},{"className":1214},[],[1216],{"type":54,"value":1217},"\u003CLFT_DST>\u002Frootfs\u002Fboot\u002Finitrd",{"type":54,"value":1219},"; absent → route to\n",{"type":48,"tag":70,"props":1221,"children":1223},{"className":1222},[],[1224],{"type":54,"value":322},{"type":54,"value":1226},". (Freshness vs.\n",{"type":48,"tag":70,"props":1228,"children":1230},{"className":1229},[],[1231],{"type":54,"value":1232},"rootfs\u002Flib\u002Fmodules\u002F\u003Cver>\u002F",{"type":54,"value":1234}," is not checked here — owned by\n",{"type":48,"tag":70,"props":1236,"children":1238},{"className":1237},[],[1239],{"type":54,"value":115},{"type":54,"value":1241},"'s\n",{"type":48,"tag":477,"props":1243,"children":1245},{"href":1244},"..\u002Fjetson-promote-image\u002FSKILL.md#refresh-initramfs-when-kernel-or-modules-changed",[1246],{"type":54,"value":1247},"Refresh initramfs step",{"type":54,"value":1249},".)",{"type":48,"tag":64,"props":1251,"children":1252},{},[1253],{"type":48,"tag":103,"props":1254,"children":1255},{},[1256],{"type":54,"value":1257},"5.2 DUT in RCM mode.",{"type":48,"tag":145,"props":1259,"children":1260},{},[1261,1274,1372,1384],{"type":48,"tag":149,"props":1262,"children":1263},{},[1264,1266,1272],{"type":54,"value":1265},"Verifies the outcome of the \"Put the DUT into recovery mode\" step (either the user-selected\n",{"type":48,"tag":70,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":54,"value":1271},"\u003Cboardctl> -t \u003Ctarget>",{"type":54,"value":1273}," invocation or the manual fallback).",{"type":48,"tag":149,"props":1275,"children":1276},{},[1277,1283,1285,1342,1346,1348,1354,1356,1362,1364,1370],{"type":48,"tag":70,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":54,"value":1282},"lsusb -d 0955:",{"type":54,"value":1284}," must report at least one device matching the\nactive chip family's recovery VID:PID pair:",{"type":48,"tag":798,"props":1286,"children":1287},{},[1288,1303],{"type":48,"tag":802,"props":1289,"children":1290},{},[1291],{"type":48,"tag":806,"props":1292,"children":1293},{},[1294,1298],{"type":48,"tag":810,"props":1295,"children":1296},{},[1297],{"type":54,"value":814},{"type":48,"tag":810,"props":1299,"children":1300},{},[1301],{"type":54,"value":1302},"Recovery VID:PID",{"type":48,"tag":826,"props":1304,"children":1305},{},[1306,1325],{"type":48,"tag":806,"props":1307,"children":1308},{},[1309,1314],{"type":48,"tag":833,"props":1310,"children":1311},{},[1312],{"type":54,"value":1313},"T23x \u002F Orin",{"type":48,"tag":833,"props":1315,"children":1316},{},[1317,1323],{"type":48,"tag":70,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":54,"value":1322},"0955:7X23",{"type":54,"value":1324}," (X is any hex digit — module variant)",{"type":48,"tag":806,"props":1326,"children":1327},{},[1328,1333],{"type":48,"tag":833,"props":1329,"children":1330},{},[1331],{"type":54,"value":1332},"T26x \u002F Thor",{"type":48,"tag":833,"props":1334,"children":1335},{},[1336],{"type":48,"tag":70,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":54,"value":1341},"0955:7026",{"type":48,"tag":1343,"props":1344,"children":1345},"br",{},[],{"type":54,"value":1347},"For T23x, match on the trailing ",{"type":48,"tag":70,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":54,"value":1353},"23",{"type":54,"value":1355}," (e.g. ",{"type":48,"tag":70,"props":1357,"children":1359},{"className":1358},[],[1360],{"type":54,"value":1361},"lsusb -d 0955: | grep -E ' 0955:7.23 '",{"type":54,"value":1363},"); a literal ",{"type":48,"tag":70,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":54,"value":1369},"0955:7023",{"type":54,"value":1371}," check will miss valid T23x variants.",{"type":48,"tag":149,"props":1373,"children":1374},{},[1375,1377,1382],{"type":54,"value":1376},"Absent → if the \"Put the DUT into recovery mode\" step used ",{"type":48,"tag":70,"props":1378,"children":1380},{"className":1379},[],[1381],{"type":54,"value":182},{"type":54,"value":1383},", surface its output and\nrefuse; if the \"Put the DUT into recovery mode\" step used the manual path, re-prompt the user to\nconfirm the jumper \u002F button and power-cycle.",{"type":48,"tag":149,"props":1385,"children":1386},{},[1387,1392,1393,1398],{"type":48,"tag":103,"props":1388,"children":1389},{},[1390],{"type":54,"value":1391},"This is the gate for everything downstream.",{"type":54,"value":669},{"type":48,"tag":70,"props":1394,"children":1396},{"className":1395},[],[1397],{"type":54,"value":83},{"type":54,"value":1399},"'s\nimage-generation phase reads EEPROM over the same recovery\nchannel; a device that's not in RCM here will fail there too.",{"type":48,"tag":64,"props":1401,"children":1402},{},[1403],{"type":48,"tag":103,"props":1404,"children":1405},{},[1406],{"type":54,"value":1407},"5.3 EEPROM cross-check vs. active profile.",{"type":48,"tag":64,"props":1409,"children":1410},{},[1411,1413,1418,1419,1424,1426,1432,1434,1439,1441,1450],{"type":54,"value":1412},"Read ",{"type":48,"tag":70,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":54,"value":224},{"type":54,"value":662},{"type":48,"tag":70,"props":1420,"children":1422},{"className":1421},[],[1423],{"type":54,"value":231},{"type":54,"value":1425}," (and any additional dispatch inputs\nthe active chip family uses) from the DUT's EEPROM in recovery mode\nusing ",{"type":48,"tag":70,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":54,"value":1431},"sudo .\u002Fnvautoflash.sh --print_boardid",{"type":54,"value":1433}," from\n",{"type":48,"tag":70,"props":1435,"children":1437},{"className":1436},[],[1438],{"type":54,"value":333},{"type":54,"value":1440},". The full reference —\nsample output, label-to-dispatch-input mapping, empty-value\nsemantics, and the EEPROM-vs-profile reconciliation table — lives in\n",{"type":48,"tag":477,"props":1442,"children":1444},{"href":1443},"references\u002Feeprom-cross-check.md",[1445],{"type":48,"tag":70,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":54,"value":1443},{"type":54,"value":133},{"type":48,"tag":64,"props":1452,"children":1453},{},[1454,1456,1461],{"type":54,"value":1455},"Refusal trigger is a ",{"type":48,"tag":245,"props":1457,"children":1458},{},[1459],{"type":54,"value":1460},"real non-empty disagreement",{"type":54,"value":1462},", never a missing\nvalue. Empty EEPROM values are valid and not a refusal trigger. The\ncross-check is the primary defense against the wrong-target \u002F\nwrong-SKU class of failures whenever both sides supply enough\ninformation to disagree.",{"type":48,"tag":64,"props":1464,"children":1465},{},[1466],{"type":48,"tag":103,"props":1467,"children":1468},{},[1469],{"type":54,"value":1470},"5.4 Default user staging (host-side, interactive).",{"type":48,"tag":64,"props":1472,"children":1473},{},[1474,1476,1481,1483,1489,1491,1497,1499,1505,1507,1513,1514,1520,1521,1527,1529,1535,1537,1542,1544,1550,1552,1561],{"type":54,"value":1475},"A freshly applied ",{"type":48,"tag":70,"props":1477,"children":1479},{"className":1478},[],[1480],{"type":54,"value":75},{"type":54,"value":1482}," has no Linux user pre-staged. Detect via\n",{"type":48,"tag":70,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":54,"value":1488},"\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Frootfs\u002Fhome\u002F",{"type":54,"value":1490}," and\n",{"type":48,"tag":70,"props":1492,"children":1494},{"className":1493},[],[1495],{"type":54,"value":1496},"rootfs\u002Fetc\u002Fpasswd",{"type":54,"value":1498}," UID ≥ 1000. If none, issue one ",{"type":48,"tag":70,"props":1500,"children":1502},{"className":1501},[],[1503],{"type":54,"value":1504},"AskUserQuestion",{"type":54,"value":1506},"\nwith four click-to-select options: ",{"type":48,"tag":70,"props":1508,"children":1510},{"className":1509},[],[1511],{"type":54,"value":1512},"ubuntu \u002F ubuntu",{"type":54,"value":161},{"type":48,"tag":70,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":54,"value":1519},"nvidia \u002F nvidia",{"type":54,"value":635},{"type":48,"tag":70,"props":1522,"children":1524},{"className":1523},[],[1525],{"type":54,"value":1526},"custom",{"type":54,"value":1528}," (sub-prompt for username + password), or ",{"type":48,"tag":70,"props":1530,"children":1532},{"className":1531},[],[1533],{"type":54,"value":1534},"skip",{"type":54,"value":1536}," (OEM wizard\non first boot). Non-",{"type":48,"tag":70,"props":1538,"children":1540},{"className":1539},[],[1541],{"type":54,"value":1534},{"type":54,"value":1543}," picks run\n",{"type":48,"tag":70,"props":1545,"children":1547},{"className":1546},[],[1548],{"type":54,"value":1549},"l4t_create_default_user.sh --autologin --accept-license",{"type":54,"value":1551},". Full\ninvocation + rationale in\n",{"type":48,"tag":477,"props":1553,"children":1555},{"href":1554},"references\u002Fdefault-user-staging.md",[1556],{"type":48,"tag":70,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":54,"value":1554},{"type":54,"value":133},{"type":48,"tag":64,"props":1563,"children":1564},{},[1565,1567,1571],{"type":54,"value":1566},"Record the resolution so the \"Confirm resolution\" step can display it. This step is ",{"type":48,"tag":103,"props":1568,"children":1569},{},[1570],{"type":54,"value":723},{"type":54,"value":1572},"\na refusal gate — it is a user-interaction point.",{"type":48,"tag":460,"props":1574,"children":1576},{"id":1575},"confirm-resolution",[1577],{"type":54,"value":1578},"Confirm resolution",{"type":48,"tag":64,"props":1580,"children":1581},{},[1582,1584,1589,1591,1596],{"type":54,"value":1583},"Print the resolved plan and require explicit acceptance. The format\nis the resolution, not the shell command — the user is approving\n",{"type":48,"tag":245,"props":1585,"children":1586},{},[1587],{"type":54,"value":1588},"what",{"type":54,"value":1590}," will flash, not the ",{"type":48,"tag":245,"props":1592,"children":1593},{},[1594],{"type":54,"value":1595},"string",{"type":54,"value":1597}," that will be executed:",{"type":48,"tag":1599,"props":1600,"children":1604},"pre",{"className":1601,"code":1603,"language":54},[1602],"language-text","Target:         \u003Creference_devkit.name> [+ custom_carrier.name]\nProfile:        target-platform\u002F\u003Cactive>.yaml\nbsp_image:      \u003Cbsp_image.root_path>\u002FLinux_for_Tegra  (version \u003CX>)\nFlash conf:     \u003Cflash_config>   (path verified in the \"Resolve the flash conf path\" step)\n\nDUT EEPROM  →   board_sku=\u003Cvalue-or-(empty)>  board_FAB=\u003Cvalue-or-(empty)>\nProfile     →   module.sku=\u003Cvalue-or-(any)>    module.revision=\u003Cvalue-or-(any)>\n                (reconciled per the \"Preflight checks\" step's EEPROM cross-check)\n\nBoot device:    \u003Cboot-dev>\nFlow tool:      flash.sh  |  l4t_initrd_flash.sh\nboardctl:       \u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Ftools\u002Fboard_automation\u002Fboardctl\n                (or the path the \"Put the DUT into recovery mode\" step resolved)\nRCM entry:      \u003Cboardctl> -t \u003Cuser-selected target> recovery  |  manual recovery + reset buttons\nPost-flash:     \u003Cboardctl> -t \u003Cuser-selected target> reset   (T26x \u002F Thor)\n                not required — flash tool resets internally    (T23x \u002F Orin)\nDefault user:   \u003Cusername> (autologin)\n              | already staged in rootfs (kept)\n              | none — OEM config wizard on first boot\n",[1605],{"type":48,"tag":70,"props":1606,"children":1608},{"__ignoreMap":1607},"",[1609],{"type":54,"value":1603},{"type":48,"tag":64,"props":1611,"children":1612},{},[1613,1614,1619,1620,1625,1627,1632],{"type":54,"value":189},{"type":48,"tag":70,"props":1615,"children":1617},{"className":1616},[],[1618],{"type":54,"value":195},{"type":54,"value":161},{"type":48,"tag":70,"props":1621,"children":1623},{"className":1622},[],[1624],{"type":54,"value":202},{"type":54,"value":1626},", partition XML, BCTs) are\nnot shown — they are resolved by ",{"type":48,"tag":70,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":54,"value":83},{"type":54,"value":1633}," from EEPROM at flash\ntime, not by this skill. The \"Preflight checks\" step's EEPROM cross-check is what\nguarantees those flash-time picks will line up with what the profile\nexpects.",{"type":48,"tag":64,"props":1635,"children":1636},{},[1637],{"type":54,"value":1638},"This is the user-acceptance gate. Refuse to fall back to a raw\n\"paste this command\" workflow — that path is how stale doc snippets,\nwrong dashes, and prompt-character paste artifacts make it into\nproduction flashes.",{"type":48,"tag":460,"props":1640,"children":1642},{"id":1641},"invoke-the-flash",[1643],{"type":54,"value":1644},"Invoke the flash",{"type":48,"tag":64,"props":1646,"children":1647},{},[1648],{"type":54,"value":1649},"Construct the command from the resolved variables — never accept a\nverbatim command from the user, the docs, or memory:",{"type":48,"tag":1599,"props":1651,"children":1655},{"className":1652,"code":1653,"language":1654,"meta":1607,"style":1607},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd \u003Cbsp_image.root_path>\u002FLinux_for_Tegra\nsudo .\u002F\u003Cflow-tool> [\u003Cresolved flags>] \u003Cboard> \u003Cboot-dev>\n","bash",[1656],{"type":48,"tag":70,"props":1657,"children":1658},{"__ignoreMap":1607},[1659,1699],{"type":48,"tag":1660,"props":1661,"children":1664},"span",{"class":1662,"line":1663},"line",1,[1665,1671,1677,1683,1689,1694],{"type":48,"tag":1660,"props":1666,"children":1668},{"style":1667},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1669],{"type":54,"value":1670},"cd",{"type":48,"tag":1660,"props":1672,"children":1674},{"style":1673},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1675],{"type":54,"value":1676}," \u003C",{"type":48,"tag":1660,"props":1678,"children":1680},{"style":1679},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1681],{"type":54,"value":1682},"bsp_image.root_pat",{"type":48,"tag":1660,"props":1684,"children":1686},{"style":1685},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1687],{"type":54,"value":1688},"h",{"type":48,"tag":1660,"props":1690,"children":1691},{"style":1673},[1692],{"type":54,"value":1693},">",{"type":48,"tag":1660,"props":1695,"children":1696},{"style":1679},[1697],{"type":54,"value":1698},"\u002FLinux_for_Tegra\n",{"type":48,"tag":1660,"props":1700,"children":1702},{"class":1662,"line":1701},2,[1703,1709,1714,1719,1724,1729,1733,1738,1743,1748,1752,1757,1761,1766,1771,1775,1779,1784,1789],{"type":48,"tag":1660,"props":1704,"children":1706},{"style":1705},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1707],{"type":54,"value":1708},"sudo",{"type":48,"tag":1660,"props":1710,"children":1711},{"style":1679},[1712],{"type":54,"value":1713}," .\u002F",{"type":48,"tag":1660,"props":1715,"children":1716},{"style":1673},[1717],{"type":54,"value":1718},"\u003C",{"type":48,"tag":1660,"props":1720,"children":1721},{"style":1679},[1722],{"type":54,"value":1723},"flow-too",{"type":48,"tag":1660,"props":1725,"children":1726},{"style":1685},[1727],{"type":54,"value":1728},"l",{"type":48,"tag":1660,"props":1730,"children":1731},{"style":1673},[1732],{"type":54,"value":1693},{"type":48,"tag":1660,"props":1734,"children":1735},{"style":1685},[1736],{"type":54,"value":1737}," [\u003Cresolved ",{"type":48,"tag":1660,"props":1739,"children":1740},{"style":1679},[1741],{"type":54,"value":1742},"flag",{"type":48,"tag":1660,"props":1744,"children":1745},{"style":1685},[1746],{"type":54,"value":1747},"s",{"type":48,"tag":1660,"props":1749,"children":1750},{"style":1673},[1751],{"type":54,"value":1693},{"type":48,"tag":1660,"props":1753,"children":1754},{"style":1679},[1755],{"type":54,"value":1756},"]",{"type":48,"tag":1660,"props":1758,"children":1759},{"style":1673},[1760],{"type":54,"value":1676},{"type":48,"tag":1660,"props":1762,"children":1763},{"style":1679},[1764],{"type":54,"value":1765},"boar",{"type":48,"tag":1660,"props":1767,"children":1768},{"style":1685},[1769],{"type":54,"value":1770},"d",{"type":48,"tag":1660,"props":1772,"children":1773},{"style":1673},[1774],{"type":54,"value":1693},{"type":48,"tag":1660,"props":1776,"children":1777},{"style":1673},[1778],{"type":54,"value":1676},{"type":48,"tag":1660,"props":1780,"children":1781},{"style":1679},[1782],{"type":54,"value":1783},"boot-de",{"type":48,"tag":1660,"props":1785,"children":1786},{"style":1685},[1787],{"type":54,"value":1788},"v",{"type":48,"tag":1660,"props":1790,"children":1791},{"style":1673},[1792],{"type":54,"value":1793},">\n",{"type":48,"tag":64,"props":1795,"children":1796},{},[1797],{"type":54,"value":1798},"Abort and surface the failed step on the first non-zero exit. Do\nnot auto-retry on transient USB errors.",{"type":48,"tag":460,"props":1800,"children":1802},{"id":1801},"post-flash-reset-t26x-thor-only",[1803],{"type":54,"value":1804},"Post-flash reset (T26x \u002F Thor only)",{"type":48,"tag":64,"props":1806,"children":1807},{},[1808,1810,1814,1816,1821,1822,1827,1829,1834],{"type":54,"value":1809},"T26x platforms do ",{"type":48,"tag":103,"props":1811,"children":1812},{},[1813],{"type":54,"value":723},{"type":54,"value":1815}," auto-reboot from the freshly flashed image\nwhen ",{"type":48,"tag":70,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":54,"value":83},{"type":54,"value":211},{"type":48,"tag":70,"props":1823,"children":1825},{"className":1824},[],[1826],{"type":54,"value":91},{"type":54,"value":1828}," returns. Run, using the\n",{"type":48,"tag":70,"props":1830,"children":1832},{"className":1831},[],[1833],{"type":54,"value":986},{"type":54,"value":1835}," resolved in the \"Put the DUT into recovery mode\" step and the same target the user\nselected for RCM entry:",{"type":48,"tag":1599,"props":1837,"children":1839},{"className":1652,"code":1838,"language":1654,"meta":1607,"style":1607},"\u003Cboardctl> -t \u003Cuser-selected target> reset\n",[1840],{"type":48,"tag":70,"props":1841,"children":1842},{"__ignoreMap":1607},[1843],{"type":48,"tag":1660,"props":1844,"children":1845},{"class":1662,"line":1663},[1846,1850,1854,1858,1863,1867,1872,1876],{"type":48,"tag":1660,"props":1847,"children":1848},{"style":1673},[1849],{"type":54,"value":1718},{"type":48,"tag":1660,"props":1851,"children":1852},{"style":1685},[1853],{"type":54,"value":182},{"type":48,"tag":1660,"props":1855,"children":1856},{"style":1673},[1857],{"type":54,"value":1693},{"type":48,"tag":1660,"props":1859,"children":1860},{"style":1685},[1861],{"type":54,"value":1862}," -t ",{"type":48,"tag":1660,"props":1864,"children":1865},{"style":1673},[1866],{"type":54,"value":1718},{"type":48,"tag":1660,"props":1868,"children":1869},{"style":1685},[1870],{"type":54,"value":1871},"user-selected target",{"type":48,"tag":1660,"props":1873,"children":1874},{"style":1673},[1875],{"type":54,"value":1693},{"type":48,"tag":1660,"props":1877,"children":1878},{"style":1685},[1879],{"type":54,"value":1880}," reset\n",{"type":48,"tag":64,"props":1882,"children":1883},{},[1884],{"type":54,"value":1885},"T23x \u002F Orin issues the reset internally; skip this step on Orin. If\nthe \"Put the DUT into recovery mode\" step used the manual path, prompt the user to remove the\nforce-recovery jumper \u002F button and power-cycle by hand. Gate this\nstep on chip family resolved from the active profile.",{"type":48,"tag":460,"props":1887,"children":1889},{"id":1888},"summary",[1890],{"type":54,"value":1891},"Summary",{"type":48,"tag":64,"props":1893,"children":1894},{},[1895],{"type":54,"value":1896},"Report: command line(s) used (flash + post-flash reset if it ran),\nexit code, log location (if teed). Persist the resolved plan and\noutcome where validation can re-read it.",{"type":48,"tag":57,"props":1898,"children":1900},{"id":1899},"limitations",[1901],{"type":54,"value":1902},"Limitations",{"type":48,"tag":145,"props":1904,"children":1905},{},[1906,1916,1964,1981,1991,2001,2019],{"type":48,"tag":149,"props":1907,"children":1908},{},[1909,1914],{"type":48,"tag":103,"props":1910,"children":1911},{},[1912],{"type":54,"value":1913},"DUT must be in RCM mode.",{"type":54,"value":1915}," Image-generation (EEPROM read) and the flash itself both use the recovery USB channel; not-in-RCM at the gate fails image-gen too.",{"type":48,"tag":149,"props":1917,"children":1918},{},[1919,1924,1925,1930,1931,1936,1938,1943,1944,1949,1951,1956,1957,1962],{"type":48,"tag":103,"props":1920,"children":1921},{},[1922],{"type":54,"value":1923},"Artifact paths resolved at flash time.",{"type":54,"value":669},{"type":48,"tag":70,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":54,"value":195},{"type":54,"value":161},{"type":48,"tag":70,"props":1932,"children":1934},{"className":1933},[],[1935],{"type":54,"value":202},{"type":54,"value":1937},", partition XML, BCTs, DRAM training are picked from EEPROM (",{"type":48,"tag":70,"props":1939,"children":1941},{"className":1940},[],[1942],{"type":54,"value":224},{"type":54,"value":211},{"type":48,"tag":70,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":54,"value":231},{"type":54,"value":1950},") by ",{"type":48,"tag":70,"props":1952,"children":1954},{"className":1953},[],[1955],{"type":54,"value":83},{"type":54,"value":211},{"type":48,"tag":70,"props":1958,"children":1960},{"className":1959},[],[1961],{"type":54,"value":91},{"type":54,"value":1963},"; this skill validates only host-side scaffolding.",{"type":48,"tag":149,"props":1965,"children":1966},{},[1967,1972,1974,1979],{"type":48,"tag":103,"props":1968,"children":1969},{},[1970],{"type":54,"value":1971},"EEPROM is authoritative over the profile.",{"type":54,"value":1973}," Real non-empty disagreement refuses; ",{"type":48,"tag":245,"props":1975,"children":1976},{},[1977],{"type":54,"value":1978},"empty",{"type":54,"value":1980}," EEPROM values are valid.",{"type":48,"tag":149,"props":1982,"children":1983},{},[1984,1989],{"type":48,"tag":103,"props":1985,"children":1986},{},[1987],{"type":54,"value":1988},"No raw-command bypass.",{"type":54,"value":1990}," Refuses to fall back to user-supplied \"paste this command\" — that path is how stale doc snippets and prompt-character paste artifacts reach production flashes.",{"type":48,"tag":149,"props":1992,"children":1993},{},[1994,1999],{"type":48,"tag":103,"props":1995,"children":1996},{},[1997],{"type":54,"value":1998},"No transient-error auto-retry.",{"type":54,"value":2000}," USB hiccups abort; re-enter RCM and re-invoke.",{"type":48,"tag":149,"props":2002,"children":2003},{},[2004,2009,2011,2017],{"type":48,"tag":103,"props":2005,"children":2006},{},[2007],{"type":54,"value":2008},"T26x needs an explicit post-flash reset.",{"type":54,"value":2010}," T26x doesn't auto-reboot from a freshly flashed image; ",{"type":48,"tag":70,"props":2012,"children":2014},{"className":2013},[],[2015],{"type":54,"value":2016},"\u003Cboardctl> -t \u003Ctarget> reset",{"type":54,"value":2018}," (or manual power-cycle) required. T23x resets internally.",{"type":48,"tag":149,"props":2020,"children":2021},{},[2022,2032],{"type":48,"tag":103,"props":2023,"children":2024},{},[2025,2027],{"type":54,"value":2026},"Massflash \u002F ",{"type":48,"tag":70,"props":2028,"children":2030},{"className":2029},[],[2031],{"type":54,"value":902},{"type":54,"value":2033}," uses the same tool selection + respective flags; massflash topology setup is out of scope here.",{"type":48,"tag":57,"props":2035,"children":2037},{"id":2036},"troubleshooting",[2038],{"type":54,"value":2039},"Troubleshooting",{"type":48,"tag":798,"props":2041,"children":2042},{},[2043,2064],{"type":48,"tag":802,"props":2044,"children":2045},{},[2046],{"type":48,"tag":806,"props":2047,"children":2048},{},[2049,2054,2059],{"type":48,"tag":810,"props":2050,"children":2051},{},[2052],{"type":54,"value":2053},"Error",{"type":48,"tag":810,"props":2055,"children":2056},{},[2057],{"type":54,"value":2058},"Cause",{"type":48,"tag":810,"props":2060,"children":2061},{},[2062],{"type":54,"value":2063},"Solution",{"type":48,"tag":826,"props":2065,"children":2066},{},[2067,2119,2193,2245,2308,2367,2405,2437,2480],{"type":48,"tag":806,"props":2068,"children":2069},{},[2070,2094,2107],{"type":48,"tag":833,"props":2071,"children":2072},{},[2073,2078,2080,2085,2087,2092],{"type":48,"tag":70,"props":2074,"children":2076},{"className":2075},[],[2077],{"type":54,"value":1282},{"type":54,"value":2079}," reports nothing matching ",{"type":48,"tag":70,"props":2081,"children":2083},{"className":2082},[],[2084],{"type":54,"value":1322},{"type":54,"value":2086}," (T23x) or ",{"type":48,"tag":70,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":54,"value":1341},{"type":54,"value":2093}," (T26x)",{"type":48,"tag":833,"props":2095,"children":2096},{},[2097,2099,2105],{"type":54,"value":2098},"DUT did not enter RCM mode — ",{"type":48,"tag":70,"props":2100,"children":2102},{"className":2101},[],[2103],{"type":54,"value":2104},"boardctl recovery",{"type":54,"value":2106}," failed or the manual recovery + reset sequence didn't take.",{"type":48,"tag":833,"props":2108,"children":2109},{},[2110,2112,2117],{"type":54,"value":2111},"If ",{"type":48,"tag":70,"props":2113,"children":2115},{"className":2114},[],[2116],{"type":54,"value":182},{"type":54,"value":2118}," was used, surface its output and re-prompt; manual path, re-confirm the recovery jumper \u002F button and power-cycle. Re-run the \"DUT in RCM mode\" preflight.",{"type":48,"tag":806,"props":2120,"children":2121},{},[2122,2140,2167],{"type":48,"tag":833,"props":2123,"children":2124},{},[2125,2127,2132,2133,2138],{"type":54,"value":2126},"Preflight EEPROM cross-check refuses with ",{"type":48,"tag":70,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":54,"value":224},{"type":54,"value":211},{"type":48,"tag":70,"props":2134,"children":2136},{"className":2135},[],[2137],{"type":54,"value":231},{"type":54,"value":2139}," mismatch vs. profile",{"type":48,"tag":833,"props":2141,"children":2142},{},[2143,2145,2150,2152,2158,2159,2165],{"type":54,"value":2144},"EEPROM holds a ",{"type":48,"tag":245,"props":2146,"children":2147},{},[2148],{"type":54,"value":2149},"real non-empty",{"type":54,"value":2151}," value that disagrees with ",{"type":48,"tag":70,"props":2153,"children":2155},{"className":2154},[],[2156],{"type":54,"value":2157},"module.sku",{"type":54,"value":211},{"type":48,"tag":70,"props":2160,"children":2162},{"className":2161},[],[2163],{"type":54,"value":2164},"module.revision",{"type":54,"value":2166}," in the active profile.",{"type":48,"tag":833,"props":2168,"children":2169},{},[2170,2172,2178,2179,2185,2187,2191],{"type":54,"value":2171},"Fix the profile (",{"type":48,"tag":70,"props":2173,"children":2175},{"className":2174},[],[2176],{"type":54,"value":2177},"\u002Fjetson-set-target",{"type":54,"value":85},{"type":48,"tag":70,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":54,"value":2184},"\u002Fjetson-init-target",{"type":54,"value":2186},") to match the DUT's actual EEPROM. Do ",{"type":48,"tag":103,"props":2188,"children":2189},{},[2190],{"type":54,"value":723},{"type":54,"value":2192}," override EEPROM from the profile — EEPROM is authoritative.",{"type":48,"tag":806,"props":2194,"children":2195},{},[2196,2201,2220],{"type":48,"tag":833,"props":2197,"children":2198},{},[2199],{"type":54,"value":2200},"Preflight refuses with \"per-board conf not found\"",{"type":48,"tag":833,"props":2202,"children":2203},{},[2204,2206,2212,2214,2219],{"type":54,"value":2205},"Active profile points at a ",{"type":48,"tag":70,"props":2207,"children":2209},{"className":2208},[],[2210],{"type":54,"value":2211},"flash_config",{"type":54,"value":2213}," that does not exist under ",{"type":48,"tag":70,"props":2215,"children":2217},{"className":2216},[],[2218],{"type":54,"value":333},{"type":54,"value":133},{"type":48,"tag":833,"props":2221,"children":2222},{},[2223,2225,2230,2232,2237,2238,2243],{"type":54,"value":2224},"For custom carriers: run ",{"type":48,"tag":70,"props":2226,"children":2228},{"className":2227},[],[2229],{"type":54,"value":284},{"type":54,"value":2231}," to produce the conf. For reference devkits: re-run ",{"type":48,"tag":70,"props":2233,"children":2235},{"className":2234},[],[2236],{"type":54,"value":115},{"type":54,"value":211},{"type":48,"tag":70,"props":2239,"children":2241},{"className":2240},[],[2242],{"type":54,"value":322},{"type":54,"value":2244}," to repopulate the BSP image.",{"type":48,"tag":806,"props":2246,"children":2247},{},[2248,2260,2276],{"type":48,"tag":833,"props":2249,"children":2250},{},[2251,2253,2258],{"type":54,"value":2252},"Preflight refuses because ",{"type":48,"tag":70,"props":2254,"children":2256},{"className":2255},[],[2257],{"type":54,"value":1100},{"type":54,"value":2259}," is missing",{"type":48,"tag":833,"props":2261,"children":2262},{},[2263,2268,2270,2275],{"type":48,"tag":70,"props":2264,"children":2266},{"className":2265},[],[2267],{"type":54,"value":341},{"type":54,"value":2269}," has not been run against ",{"type":48,"tag":70,"props":2271,"children":2273},{"className":2272},[],[2274],{"type":54,"value":333},{"type":54,"value":133},{"type":48,"tag":833,"props":2277,"children":2278},{},[2279,2281,2286,2288,2293,2295,2300,2302,2307],{"type":54,"value":2280},"Re-run ",{"type":48,"tag":70,"props":2282,"children":2284},{"className":2283},[],[2285],{"type":54,"value":322},{"type":54,"value":2287}," (which invokes ",{"type":48,"tag":70,"props":2289,"children":2291},{"className":2290},[],[2292],{"type":54,"value":341},{"type":54,"value":2294},") or run ",{"type":48,"tag":70,"props":2296,"children":2298},{"className":2297},[],[2299],{"type":54,"value":341},{"type":54,"value":2301}," manually from ",{"type":48,"tag":70,"props":2303,"children":2305},{"className":2304},[],[2306],{"type":54,"value":99},{"type":54,"value":133},{"type":48,"tag":806,"props":2309,"children":2310},{},[2311,2322,2347],{"type":48,"tag":833,"props":2312,"children":2313},{},[2314,2320],{"type":48,"tag":70,"props":2315,"children":2317},{"className":2316},[],[2318],{"type":54,"value":2319},"boardctl -t \u003Ctarget> recovery",{"type":54,"value":2321}," errors out or has no effect",{"type":48,"tag":833,"props":2323,"children":2324},{},[2325,2327,2332,2334,2339,2341,2346],{"type":54,"value":2326},"Wrong ",{"type":48,"tag":70,"props":2328,"children":2330},{"className":2329},[],[2331],{"type":54,"value":182},{"type":54,"value":2333}," (a ",{"type":48,"tag":70,"props":2335,"children":2337},{"className":2336},[],[2338],{"type":54,"value":994},{"type":54,"value":2340}," binary instead of the in-tree one) or a target name not enumerated by ",{"type":48,"tag":70,"props":2342,"children":2344},{"className":2343},[],[2345],{"type":54,"value":1008},{"type":54,"value":133},{"type":48,"tag":833,"props":2348,"children":2349},{},[2350,2352,2358,2360,2365],{"type":54,"value":2351},"Use the in-tree ",{"type":48,"tag":70,"props":2353,"children":2355},{"className":2354},[],[2356],{"type":54,"value":2357},"\u003Cbsp_image.root_path>\u002FLinux_for_Tegra\u002Ftools\u002Fboard_automation\u002Fboardctl",{"type":54,"value":2359},"; pick the target from ",{"type":48,"tag":70,"props":2361,"children":2363},{"className":2362},[],[2364],{"type":54,"value":1008},{"type":54,"value":2366},". Fall back to manual recovery + reset buttons if needed.",{"type":48,"tag":806,"props":2368,"children":2369},{},[2370,2375,2393],{"type":48,"tag":833,"props":2371,"children":2372},{},[2373],{"type":54,"value":2374},"Flash succeeds on T26x but the DUT stays in recovery \u002F does not boot the new image",{"type":48,"tag":833,"props":2376,"children":2377},{},[2378,2380,2385,2386,2391],{"type":54,"value":2379},"T26x does not auto-reset out of recovery after ",{"type":48,"tag":70,"props":2381,"children":2383},{"className":2382},[],[2384],{"type":54,"value":83},{"type":54,"value":211},{"type":48,"tag":70,"props":2387,"children":2389},{"className":2388},[],[2390],{"type":54,"value":91},{"type":54,"value":2392}," returns.",{"type":48,"tag":833,"props":2394,"children":2395},{},[2396,2398,2403],{"type":54,"value":2397},"Run ",{"type":48,"tag":70,"props":2399,"children":2401},{"className":2400},[],[2402],{"type":54,"value":2016},{"type":54,"value":2404}," (same target used for RCM entry), or for the manual path remove the force-recovery jumper \u002F button and power-cycle. T23x \u002F Orin needs no extra step.",{"type":48,"tag":806,"props":2406,"children":2407},{},[2408,2413,2425],{"type":48,"tag":833,"props":2409,"children":2410},{},[2411],{"type":54,"value":2412},"First boot lands on Ubuntu's OEM configuration wizard despite expecting autologin",{"type":48,"tag":833,"props":2414,"children":2415},{},[2416,2418,2424],{"type":54,"value":2417},"No default user was staged into ",{"type":48,"tag":70,"props":2419,"children":2421},{"className":2420},[],[2422],{"type":54,"value":2423},"rootfs",{"type":54,"value":251},{"type":48,"tag":833,"props":2426,"children":2427},{},[2428,2430,2435],{"type":54,"value":2429},"Either re-flash after staging via ",{"type":48,"tag":70,"props":2431,"children":2433},{"className":2432},[],[2434],{"type":54,"value":1549},{"type":54,"value":2436}," (see the default-user-staging step), or complete the OEM wizard on the DUT this once.",{"type":48,"tag":806,"props":2438,"children":2439},{},[2440,2450,2469],{"type":48,"tag":833,"props":2441,"children":2442},{},[2443,2448],{"type":48,"tag":70,"props":2444,"children":2446},{"className":2445},[],[2447],{"type":54,"value":83},{"type":54,"value":2449}," exits non-zero on an artifact-not-found error (DTB \u002F BPFDTB \u002F partition XML)",{"type":48,"tag":833,"props":2451,"children":2452},{},[2453,2455,2460,2462,2467],{"type":54,"value":2454},"EEPROM-driven dispatch resolved a filename that doesn't exist in ",{"type":48,"tag":70,"props":2456,"children":2458},{"className":2457},[],[2459],{"type":54,"value":75},{"type":54,"value":2461}," — usually ",{"type":48,"tag":70,"props":2463,"children":2465},{"className":2464},[],[2466],{"type":54,"value":115},{"type":54,"value":2468}," didn't copy the customized artifact, or the EEPROM SKU is unsupported by the BSP.",{"type":48,"tag":833,"props":2470,"children":2471},{},[2472,2473,2478],{"type":54,"value":2280},{"type":48,"tag":70,"props":2474,"children":2476},{"className":2475},[],[2477],{"type":54,"value":115},{"type":54,"value":2479},". If the SKU is unsupported, the DUT needs a different BSP version.",{"type":48,"tag":806,"props":2481,"children":2482},{},[2483,2525,2542],{"type":48,"tag":833,"props":2484,"children":2485},{},[2486,2492,2494,2500,2502,2508,2509,2515,2517,2523],{"type":48,"tag":70,"props":2487,"children":2489},{"className":2488},[],[2490],{"type":54,"value":2491},"kernel\u002FImage",{"type":54,"value":2493}," ↔ ",{"type":48,"tag":70,"props":2495,"children":2497},{"className":2496},[],[2498],{"type":54,"value":2499},"rootfs\u002Fboot\u002FImage",{"type":54,"value":2501}," drift, missing ",{"type":48,"tag":70,"props":2503,"children":2505},{"className":2504},[],[2506],{"type":54,"value":2507},"bootloader\u002Fl4t_initrd.img",{"type":54,"value":211},{"type":48,"tag":70,"props":2510,"children":2512},{"className":2511},[],[2513],{"type":54,"value":2514},"rootfs\u002Fboot\u002Finitrd",{"type":54,"value":2516},", or ",{"type":48,"tag":70,"props":2518,"children":2520},{"className":2519},[],[2521],{"type":54,"value":2522},"modprobe",{"type":54,"value":2524}," \"disagrees about version of symbol …\" on the DUT",{"type":48,"tag":833,"props":2526,"children":2527},{},[2528,2533,2535,2540],{"type":48,"tag":70,"props":2529,"children":2531},{"className":2530},[],[2532],{"type":54,"value":115},{"type":54,"value":2534},"'s mirror \u002F refresh steps were skipped, or ",{"type":48,"tag":70,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":54,"value":75},{"type":54,"value":2541}," was hand-edited outside Deploy.",{"type":48,"tag":833,"props":2543,"children":2544},{},[2545,2546,2551,2553,2558,2560,2566],{"type":54,"value":2280},{"type":48,"tag":70,"props":2547,"children":2549},{"className":2548},[],[2550],{"type":54,"value":115},{"type":54,"value":2552}," and re-flash. If initramfs files are entirely absent, run ",{"type":48,"tag":70,"props":2554,"children":2556},{"className":2555},[],[2557],{"type":54,"value":322},{"type":54,"value":2559}," first. See ",{"type":48,"tag":477,"props":2561,"children":2563},{"href":2562},"..\u002Fjetson-promote-image\u002Freferences\u002Fkernel-image-and-initramfs.md",[2564],{"type":54,"value":2565},"promote-image's kernel-image-and-initramfs reference",{"type":54,"value":2567}," for the manual escape hatch.",{"type":48,"tag":57,"props":2569,"children":2571},{"id":2570},"references",[2572],{"type":54,"value":2573},"References",{"type":48,"tag":145,"props":2575,"children":2576},{},[2577,2611,2632,2652,2665,2679,2695,2709],{"type":48,"tag":149,"props":2578,"children":2579},{},[2580,2588,2590,2595,2597,2602,2603,2609],{"type":48,"tag":477,"props":2581,"children":2582},{"href":968},[2583],{"type":48,"tag":70,"props":2584,"children":2586},{"className":2585},[],[2587],{"type":54,"value":968},{"type":54,"value":2589}," — locate the in-tree ",{"type":48,"tag":70,"props":2591,"children":2593},{"className":2592},[],[2594],{"type":54,"value":182},{"type":54,"value":2596},", enumerate targets, invoke ",{"type":48,"tag":70,"props":2598,"children":2600},{"className":2599},[],[2601],{"type":54,"value":963},{"type":54,"value":211},{"type":48,"tag":70,"props":2604,"children":2606},{"className":2605},[],[2607],{"type":54,"value":2608},"reset",{"type":54,"value":2610},", manual fallback (the \"Put the DUT into recovery mode\" step \u002F the \"Post-flash reset\" step details).",{"type":48,"tag":149,"props":2612,"children":2613},{},[2614,2622,2624,2630],{"type":48,"tag":477,"props":2615,"children":2616},{"href":1443},[2617],{"type":48,"tag":70,"props":2618,"children":2620},{"className":2619},[],[2621],{"type":54,"value":1443},{"type":54,"value":2623}," — ",{"type":48,"tag":70,"props":2625,"children":2627},{"className":2626},[],[2628],{"type":54,"value":2629},"nvautoflash.sh --print_boardid",{"type":54,"value":2631}," sample, label-to-dispatch-input map, EEPROM-vs-profile reconciliation table (used by the \"Preflight checks\" step).",{"type":48,"tag":149,"props":2633,"children":2634},{},[2635,2643,2644,2650],{"type":48,"tag":477,"props":2636,"children":2637},{"href":1554},[2638],{"type":48,"tag":70,"props":2639,"children":2641},{"className":2640},[],[2642],{"type":54,"value":1554},{"type":54,"value":2623},{"type":48,"tag":70,"props":2645,"children":2647},{"className":2646},[],[2648],{"type":54,"value":2649},"l4t_create_default_user.sh",{"type":54,"value":2651}," invocation + flag rationale (used by the \"Preflight checks\" step).",{"type":48,"tag":149,"props":2653,"children":2654},{},[2655,2663],{"type":48,"tag":477,"props":2656,"children":2657},{"href":306},[2658],{"type":48,"tag":70,"props":2659,"children":2661},{"className":2660},[],[2662],{"type":54,"value":306},{"type":54,"value":2664}," — target-platform contract.",{"type":48,"tag":149,"props":2666,"children":2667},{},[2668,2677],{"type":48,"tag":477,"props":2669,"children":2671},{"href":2670},"..\u002F..\u002Fcontext\u002Fbsp-customization-workflow.md#workflow-invariants",[2672],{"type":48,"tag":70,"props":2673,"children":2675},{"className":2674},[],[2676],{"type":54,"value":131},{"type":54,"value":2678}," — Workspace edit protocol (this skill is the flash leg of Deploy).",{"type":48,"tag":149,"props":2680,"children":2681},{},[2682,2687,2688,2693],{"type":48,"tag":477,"props":2683,"children":2684},{"href":706},[2685],{"type":54,"value":2686},"Per-board conf dispatch",{"type":54,"value":2623},{"type":48,"tag":70,"props":2689,"children":2691},{"className":2690},[],[2692],{"type":54,"value":159},{"type":54,"value":2694},", DTB, and BCT resolution from the active profile.",{"type":48,"tag":149,"props":2696,"children":2697},{},[2698,2707],{"type":48,"tag":477,"props":2699,"children":2701},{"href":2700},"..\u002Fjetson-promote-image\u002FSKILL.md",[2702],{"type":48,"tag":70,"props":2703,"children":2705},{"className":2704},[],[2706],{"type":54,"value":2700},{"type":54,"value":2708}," — prior leg; copies overlay → bsp_image.",{"type":48,"tag":149,"props":2710,"children":2711},{},[2712,2721],{"type":48,"tag":477,"props":2713,"children":2715},{"href":2714},"..\u002Fjetson-derive-carrier\u002FSKILL.md",[2716],{"type":48,"tag":70,"props":2717,"children":2719},{"className":2718},[],[2720],{"type":54,"value":2714},{"type":54,"value":2722}," — produces the custom carrier's flash conf consumed by the \"Resolve the flash conf path\" step.",{"type":48,"tag":2724,"props":2725,"children":2726},"style",{},[2727],{"type":54,"value":2728},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2730,"total":2832},[2731,2748,2760,2774,2786,2803,2818],{"slug":2732,"name":2732,"fn":2733,"description":2734,"org":2735,"tags":2736,"stars":23,"repoUrl":24,"updatedAt":2747},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2737,2740,2743,2744],{"name":2738,"slug":2739,"type":15},"Data Analysis","data-analysis",{"name":2741,"slug":2742,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":2745,"slug":2746,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":2749,"name":2749,"fn":2750,"description":2751,"org":2752,"tags":2753,"stars":23,"repoUrl":24,"updatedAt":2759},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2754,2755,2758],{"name":20,"slug":21,"type":15},{"name":2756,"slug":2757,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":2761,"name":2761,"fn":2762,"description":2763,"org":2764,"tags":2765,"stars":23,"repoUrl":24,"updatedAt":2773},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2766,2769,2770],{"name":2767,"slug":2768,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2771,"slug":2772,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":2775,"name":2775,"fn":2776,"description":2777,"org":2778,"tags":2779,"stars":23,"repoUrl":24,"updatedAt":2785},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2780,2781,2782],{"name":2738,"slug":2739,"type":15},{"name":9,"slug":8,"type":15},{"name":2783,"slug":2784,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":2787,"name":2787,"fn":2788,"description":2789,"org":2790,"tags":2791,"stars":23,"repoUrl":24,"updatedAt":2802},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2792,2795,2798,2799],{"name":2793,"slug":2794,"type":15},"Automation","automation",{"name":2796,"slug":2797,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":2800,"slug":2801,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":2804,"name":2804,"fn":2805,"description":2806,"org":2807,"tags":2808,"stars":23,"repoUrl":24,"updatedAt":2817},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2809,2810,2813,2814],{"name":20,"slug":21,"type":15},{"name":2811,"slug":2812,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":2815,"slug":2816,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":2819,"name":2819,"fn":2820,"description":2821,"org":2822,"tags":2823,"stars":23,"repoUrl":24,"updatedAt":2831},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2824,2825,2828],{"name":9,"slug":8,"type":15},{"name":2826,"slug":2827,"type":15},"Quantum Computing","quantum-computing",{"name":2829,"slug":2830,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":2834,"total":2985},[2835,2853,2869,2880,2892,2906,2919,2933,2944,2953,2967,2976],{"slug":2836,"name":2836,"fn":2837,"description":2838,"org":2839,"tags":2840,"stars":2850,"repoUrl":2851,"updatedAt":2852},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2841,2844,2847],{"name":2842,"slug":2843,"type":15},"Documentation","documentation",{"name":2845,"slug":2846,"type":15},"MCP","mcp",{"name":2848,"slug":2849,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":2854,"name":2854,"fn":2855,"description":2856,"org":2857,"tags":2858,"stars":2866,"repoUrl":2867,"updatedAt":2868},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2859,2862,2863],{"name":2860,"slug":2861,"type":15},"Containers","containers",{"name":20,"slug":21,"type":15},{"name":2864,"slug":2865,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":2870,"name":2870,"fn":2871,"description":2872,"org":2873,"tags":2874,"stars":2866,"repoUrl":2867,"updatedAt":2879},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2875,2878],{"name":2876,"slug":2877,"type":15},"CI\u002FCD","ci-cd",{"name":20,"slug":21,"type":15},"2026-07-14T05:25:59.97109",{"slug":2881,"name":2881,"fn":2882,"description":2883,"org":2884,"tags":2885,"stars":2866,"repoUrl":2867,"updatedAt":2891},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2886,2887,2888],{"name":2876,"slug":2877,"type":15},{"name":20,"slug":21,"type":15},{"name":2889,"slug":2890,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":2893,"name":2893,"fn":2894,"description":2895,"org":2896,"tags":2897,"stars":2866,"repoUrl":2867,"updatedAt":2905},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2898,2901,2902],{"name":2899,"slug":2900,"type":15},"Debugging","debugging",{"name":2889,"slug":2890,"type":15},{"name":2903,"slug":2904,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":2907,"name":2907,"fn":2908,"description":2909,"org":2910,"tags":2911,"stars":2866,"repoUrl":2867,"updatedAt":2918},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2912,2915],{"name":2913,"slug":2914,"type":15},"Best Practices","best-practices",{"name":2916,"slug":2917,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":2920,"name":2920,"fn":2921,"description":2922,"org":2923,"tags":2924,"stars":2866,"repoUrl":2867,"updatedAt":2932},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2925,2928,2931],{"name":2926,"slug":2927,"type":15},"Machine Learning","machine-learning",{"name":2929,"slug":2930,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":2934,"name":2934,"fn":2935,"description":2936,"org":2937,"tags":2938,"stars":2866,"repoUrl":2867,"updatedAt":2943},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2939,2942],{"name":2940,"slug":2941,"type":15},"QA","qa",{"name":2783,"slug":2784,"type":15},"2026-07-14T05:25:53.673039",{"slug":2945,"name":2945,"fn":2946,"description":2947,"org":2948,"tags":2949,"stars":2866,"repoUrl":2867,"updatedAt":2952},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2950,2951],{"name":20,"slug":21,"type":15},{"name":2756,"slug":2757,"type":15},"2026-07-14T05:25:49.362534",{"slug":2954,"name":2954,"fn":2955,"description":2956,"org":2957,"tags":2958,"stars":2866,"repoUrl":2867,"updatedAt":2966},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2959,2962,2963],{"name":2960,"slug":2961,"type":15},"Code Review","code-review",{"name":2889,"slug":2890,"type":15},{"name":2964,"slug":2965,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":2968,"name":2968,"fn":2969,"description":2970,"org":2971,"tags":2972,"stars":2866,"repoUrl":2867,"updatedAt":2975},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2973,2974],{"name":2940,"slug":2941,"type":15},{"name":2783,"slug":2784,"type":15},"2026-07-14T05:25:54.928983",{"slug":2977,"name":2977,"fn":2978,"description":2979,"org":2980,"tags":2981,"stars":2866,"repoUrl":2867,"updatedAt":2984},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2982,2983],{"name":2793,"slug":2794,"type":15},{"name":2876,"slug":2877,"type":15},"2026-07-30T05:29:03.275638",496]