Hardware target/board model, supported-hardware updates, and config schema - #470
Hardware target/board model, supported-hardware updates, and config schema#470nicksinas wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Pull request overview
This PR updates the docs site’s hardware data model (target vs. board), refreshes supported-hardware listings/pages (including new Thor + FRDM i.MX 95 pages), and replaces the bundled avocado.yaml JSON schema with the canonical avocado-yaml schema version.
Changes:
- Updates hardware target slugs and mappings (notably removing
-devkitfrom Jetson target IDs, and modeling ICAM-540 as a board underjetson-orin-nx). - Refreshes supported/under-evaluation hardware data and adds/adjusts hardware docs pages + navigation ordering (NXP reorder, FRDM i.MX 93 hero fix, new Thor/FRDM i.MX 95 pages).
- Replaces
src/schemas/avocado-config.jsonwith the newer canonical schema and adds a new “Hardware Targets” guide page wired into the guides sidebar.
Reviewed changes
Copilot reviewed 26 out of 29 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/src/data/hardware/under-evaluation-nxp.json | Removes FRDM i.MX 95 from the “under evaluation” NXP list (now supported). |
| src/src/data/hardware/under-evaluation-nvidia.json | Removes the NVIDIA under-evaluation dataset (Thor is now supported). |
| src/src/data/hardware/targets.json | Renames Jetson target slugs, removes icam-540 as a standalone target, adds jetson-orin-nx + imx95-frdm, and expands i.MX provisioning options (SD + uuu eMMC). |
| src/src/data/hardware/supported.json | Updates supported matrix entries: ICAM-540 target/board model, adds Thor + FRDM i.MX 95, renames/reorders NXP entries, updates Jetson slugs. |
| src/src/components/UnderEvaluationMatrix/index.js | Removes NVIDIA under-evaluation import and related page slug mappings. |
| src/src/components/TerminalDemo/index.js | Updates the homepage TerminalDemo Jetson Orin Nano target slug (-devkit → no suffix). |
| src/sidebars-guides.js | Adds the new hardware-targets guide to the Development section. |
| src/schemas/avocado-config.json | Replaces the old avocado-config schema with the canonical avocado-yaml schema. |
| src/docs-hardware/under-evaluation/jetson-agx-thor.md | Removes the old under-evaluation Thor page. |
| src/docs-hardware/under-evaluation/frdm-imx-95.md | Removes the old under-evaluation FRDM i.MX 95 page. |
| src/docs-hardware/support-matrix.md | Updates “Target vs Board” explanation to link to the new Hardware Targets page. |
| src/docs-hardware/nxp/imx93-evk/category.json | Adjusts NXP sidebar ordering. |
| src/docs-hardware/nxp/frdm-imx-95/index.mdx | Adds the supported hardware page for NXP FRDM i.MX 95. |
| src/docs-hardware/nxp/frdm-imx-95/category.json | Adds the sidebar category for FRDM i.MX 95. |
| src/docs-hardware/nxp/frdm-imx-93/index.mdx | Fixes the FRDM i.MX 93 hero image path. |
| src/docs-hardware/nxp/frdm-imx-93/category.json | Adjusts NXP sidebar ordering / label positioning for FRDM i.MX 93. |
| src/docs-hardware/nxp/frdm-imx-91/category.json | Adjusts NXP sidebar ordering for FRDM i.MX 91. |
| src/docs-hardware/nvidia/jetson-orin-nano-developer-kit/index.mdx | Updates the Jetson Orin Nano target slug (-devkit → no suffix). |
| src/docs-hardware/nvidia/jetson-agx-thor/index.mdx | Adds the supported hardware page for Jetson AGX Thor. |
| src/docs-hardware/nvidia/jetson-agx-thor/category.json | Adds the sidebar category for Jetson AGX Thor. |
| src/docs-hardware/nvidia/jetson-agx-orin/index.mdx | Updates Jetson AGX Orin target slug (-devkit → no suffix) and updates deep links. |
| src/docs-hardware/advantech/mic-733-ao/index.mdx | Updates MIC-733-AO target slug and board-selection guidance to the new model. |
| src/docs-hardware/advantech/icam-540/index.mdx | Updates ICAM-540 to the target/board model and includes example config for both. |
| src/docs-guides/lockfiles-and-build-stamps.md | Updates Jetson Orin Nano target slug in CLI examples. |
| src/docs-guides/hardware-targets.md | Adds the new Hardware Targets conceptual guide (target vs board, precedence, BSP interpolation). |
| src/docs-guides/getting-started/jetson.md | Updates Jetson Orin Nano getting-started commands for the new target slug. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
484e619 to
5d13e81
Compare
| "hardwareUrl": "/hardware/raspberry-pi/raspberry-pi-zero-2-w" | ||
| }, | ||
| "jetson-orin-nano-devkit": { | ||
| "jetson-orin-nano": { |
There was a problem hiding this comment.
Blocking — these slugs aren't in the published feed yet. Checked just now against 2024/edge:
| slug | repodata |
|---|---|
jetson-agx-orin-devkit |
200 |
jetson-agx-orin |
404 |
jetson-orin-nano-devkit |
200 |
jetson-orin-nano |
404 |
avocado init --target jetson-orin-nano succeeds (init doesn't validate against the feed), then avocado install fails on a 404 repo path. MIC-733-AO is collateral — avocado-bsp-mic-733-ao5a1 only exists under jetson-agx-orin-devkit-ext. And support-matrix.md defines Supported as "in the published feed", so those cells assert something currently false.
The change itself is right; it's just ahead of the feed. Suggest gating the merge on the feed publishing the de-suffixed slugs.
Two related notes: generated-targets.json still contains icam-540, jetson-agx-orin-devkit, and jetson-orin-nano-devkit — it wasn't regenerated here. It's also tracked in git, so the PR description's "intentionally not committed" is inaccurate (CI regenerates it via prestart/build.sh, so low practical risk).
| "title": "Avocado OS project configuration (avocado.yaml)", | ||
| "type": "object", | ||
| "additionalProperties": true, | ||
| "required": ["distro", "runtimes"], |
There was a problem hiding this comment.
Blocking — the "strict superset" framing doesn't hold. Diffed old vs new:
| old | new | |
|---|---|---|
signing_keys |
array |
object |
root required |
none | ["distro","runtimes"] |
runtimes.minProperties |
none | 1 |
patternProperties |
10 | 0 |
| target enum (21 boards) | present | removed |
Each of the first three rejects a config that previously validated — including the old schema's own documented signing_keys example ([{"my-key":"sha256-…"}]).
Separately this breaks the rendered page: the vendored Deckard renderer walks properties/patternProperties but not object-valued additionalProperties (it has an explicit "complex additionalProperties" unsupported path). Converting every dynamic map to additionalProperties means runtimes.* and extensions.* render as empty nodes, so ~30 documented keys disappear from /developer-reference/avocado-cli/config-schema. extensions.*.scopes and extensions.*.filesystem are gone entirely, and runtimes.*.kernel no longer $refs the kernelConfig def defined in this same file.
Minimum to restore parity: drop the root required and minProperties, let signing_keys accept both shapes, and keep patternProperties for the dynamic maps so they still render.
| }, | ||
| { | ||
| "name": "NXP FRDM i.MX 95", | ||
| "target": "imx95-frdm", |
There was a problem hiding this comment.
Blocking — imx95-frdm isn't in the 2026 feed: 2026/edge/target/imx95-frdm/repodata/repomd.xml returns 404 (2024 returns 200). The 2026 feed currently only carries jetson-agx-thor, qemuarm64, qemux86-64.
Per the matrix legend ("Supported = in the published feed"), the 2026 cell should be in-progress until it lands. The 2024 cell is correct.
| }, | ||
| { | ||
| "name": "NVIDIA Jetson AGX Thor", | ||
| "target": "jetson-agx-thor", |
There was a problem hiding this comment.
Blocking — jetson-agx-thor isn't in targets.json (which has only jetson-agx-orin, jetson-orin-nano, jetson-orin-nx), so it can't appear in the Any Supported Target dropdown.
The Supported/2026 status is correct (Thor is in the 2026 feed), but the new hardware page's only CTA points at /getting-started/any-target, where searching for it returns nothing — and unlike the AGX Orin page it can't deep-link an anchor, since none is generated. Needs a targets.json entry; sync-targets.js keeps local slugs even when absent from the 2024 feed.
| default_target_board: 'icam-540' | ||
| ``` | ||
|
|
||
| The provisioning specifics are below. |
There was a problem hiding this comment.
Two ICAM-540 issues from the remodel (the remodel itself is right — jetson-orin-nx-ext does contain avocado-bsp-icam-540, while icam-540-ext has no BSPs):
-
The Provision section just below still says
avocado provision -r dev+ power cycle, but thejetson-orin-nxtarget this page now sends users to specifiesavocado provision -r dev --profile tegraflashwith a recovery-mode block (USB-C + Force Recovery, verify vialsusb). Following this page alone, the user never enters recovery mode and provisioning won't find the device. -
Dropping the curated
icam-540entry fromtargets.jsonregresses the dropdown:icam-540still returns 200 in the 2024 feed, andsync-targets.jsunions feed with local and synthesizes a minimal entry for feed-only slugs. The curated "Advantech ICAM-540" row becomes "Icam 540" with "no guide written yet" and a nullhardwareUrl. Worth keeping the curated entry until the feed drops the slug.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 26 out of 29 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (6)
src/src/data/hardware/targets.json:506
- The top-level
provisioning.prerequisiteslists option-specific items for both SD and eMMC provisioning, but the UI already renders per-option prerequisites under each tab. As written, the “Prerequisites” section implies you need both an SD card reader and a USB-C cable even if you choose only one provisioning method.
"prerequisites": [
"microSD card (8GB+) + external SD card reader (for SD provisioning)",
"USB-C cable (for eMMC provisioning with uuu)"
],
src/src/data/hardware/targets.json:549
- The top-level
provisioning.prerequisiteslists option-specific items for both SD and eMMC provisioning, but the UI already renders per-option prerequisites under each tab. As written, the “Prerequisites” section implies you need both an SD card reader and a USB-C cable even if you choose only one provisioning method.
"prerequisites": [
"microSD card (8GB+) + external SD card reader (for SD provisioning)",
"USB-C cable (for eMMC provisioning with uuu)"
],
src/src/data/hardware/targets.json:592
- The top-level
provisioning.prerequisiteslists option-specific items for both SD and eMMC provisioning, but the UI already renders per-option prerequisites under each tab. As written, the “Prerequisites” section implies you need both an SD card reader and a USB-C cable even if you choose only one provisioning method.
"prerequisites": [
"microSD card (8GB+) + external SD card reader (for SD provisioning)",
"USB-C cable (for eMMC provisioning with uuu)"
],
src/src/data/hardware/targets.json:635
- The top-level
provisioning.prerequisiteslists option-specific items for both SD and eMMC provisioning, but the UI already renders per-option prerequisites under each tab. As written, the “Prerequisites” section implies you need both an SD card reader and a USB-C cable even if you choose only one provisioning method.
"prerequisites": [
"microSD card (8GB+) + external SD card reader (for SD provisioning)",
"USB-C cable (for eMMC provisioning with uuu)"
],
src/src/data/hardware/targets.json:933
- The top-level
provisioning.prerequisiteslists option-specific items for both SD and eMMC provisioning, but the UI already renders per-option prerequisites under each tab. As written, the “Prerequisites” section implies you need both an SD card reader and a USB-C cable even if you choose only one provisioning method.
"prerequisites": [
"microSD card (8GB+) + external SD card reader (for SD provisioning)",
"USB-C cable (for eMMC provisioning with uuu)"
],
src/src/data/hardware/targets.json:413
- The top-level
provisioning.prerequisiteslists option-specific items for both SD and eMMC provisioning, but the UI already renders per-option prerequisites under each tab. As written, the “Prerequisites” section implies you need both an SD card reader and a USB-C cable even if you choose only one provisioning method.
This issue also appears in the following locations of the same file:
- line 503
- line 546
- line 589
- line 632
- line 930
"prerequisites": [
"microSD card (8GB+) + external SD card reader (for SD provisioning)",
"USB-C cable (for eMMC provisioning with uuu)"
],
…chema
- Add a "Hardware Targets" developer-reference page (target vs board,
supported_targets/default_target/default_target_board, and the
avocado-bsp-{{ avocado.target.board }} pattern).
- Model Advantech ICAM-540 as the jetson-orin-nx target with the icam-540 board.
- Drop the -devkit suffix from Jetson target slugs across hardware data, pages,
and guides.
- Add NVIDIA Jetson AGX Thor as supported (2026 only) with a hardware page.
- Add NXP FRDM i.MX 95 as supported (2024 + 2026); reorder/rename the NXP list;
fix the FRDM i.MX 93 hero image (was the MCX N947 board).
- Curate targets.json: jetson-orin-nx (tegraflash), imx95-frdm, and SD + eMMC
(uuu) provisioning with boot-switch notes across i.MX targets.
- Replace the bundled avocado.yaml schema with the canonical avocado-mcp schema
(adds permissions/rootfs/initramfs/kernel/default_runtime/connect), keeping
git/path extension sources.
- Rename jetson-orin-nano-devkit -> jetson-orin-nano in TerminalDemo.
5d13e81 to
5c8d035
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 26 out of 29 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (3)
src/docs-hardware/nxp/frdm-imx-95/index.mdx:37
- In the Overview text the board name is written as "FRDM-i.MX 95"; elsewhere on this page it’s "FRDM i.MX 95". Consider using a single spelling for consistency.
The FRDM-i.MX 95 is NXP's Freedom development board for the i.MX 95 applications
processor family, integrating six Cortex-A55 cores, Cortex-M7 and M33
src/src/data/hardware/targets.json:213
- Renaming the Jetson slugs here (e.g.
jetson-orin-nano-devkit→jetson-orin-nano) can break/developer-reference/getting-started/any-target#...deep links and the TargetSelector dropdown unlesssrc/src/data/hardware/generated-targets.jsonis regenerated/updated too (TargetSelector collects allowed anchors from that file atsrc/src/components/TargetSelector/index.js:11,25). The currently committed snapshot still containsjetson-orin-nano-devkit(generated-targets.json:501) and does not containjetson-orin-nano, so links updated in this PR will be invalid in local/offline builds until the snapshot is refreshed.
"jetson-orin-nano": {
"name": "NVIDIA Jetson Orin Nano",
"target": "jetson-orin-nano",
src/docs-hardware/nxp/frdm-imx-95/index.mdx:6
- Frontmatter description uses the older hyphenated name "FRDM-i.MX 95" while the page title/model uses "FRDM i.MX 95". Aligning the naming avoids inconsistent search results and sidebar/tooling labels.
This issue also appears on line 36 of the same file.
title: 'Production-Ready NXP FRDM i.MX 95 Deployment'
sidebar_position: 0
description: 'Deploy NXP FRDM-i.MX 95 devices in production with Avocado OS. Six Cortex-A55 cores, safety-domain M7/M33, a 2.0 TOPS eIQ Neutron NPU, and M.2 Ara expansion for safety-critical AI and industrial edge.'
hide_title: true
Split out of #469 so that PR stays changelog-only. This PR is the hardware / target-board model and config-schema work.
Hardware target/board model
/developer-reference/hardware-targets(top of the Development section): target vs board,supported_targets/default_target/default_target_board, resolution precedence, and whyavocado-bsp-{{ avocado.target.board }}works the way it does — grounded in the avocado-cli source.jetson-orin-nxtarget with theicam-540board (was a standalone target), matching the mic-712-ox pattern.-devkitfrom Jetson target slugs (jetson-agx-orin,jetson-orin-nano) across hardware data, pages, guides, and the home-page TerminalDemo.generated-targets.jsonis intentionally not committed (regenerates from the feed at build; the feed drops-devkitshortly).Supported-hardware updates
targets.jsoncurated:jetson-orin-nx(tegraflash),imx95-frdm, and SD + eMMC (uuu) provisioning with boot-switch notes across all i.MX targets (Variscite left as-is — it already has specific SW7 steps).Config schema
avocado.yamlJSON schema (avocado-config1.2.0) with the canonical avocado-mcp schema (avocado-yaml0.2.0) — addspermissions,rootfs,initramfs,kernel,default_runtime,connect— while keeping thegit/pathextension-source variants.Testing
scripts/checks.shpasses locally (npm ci, redocly, eslint,prettier --check ., build).Follow-ups