rdk-hardware
Skill5 starsChanged 3 months agoApache-2.0View on GitHub
Hardware facts for RDK boards: six-board specs (X3/X5/Ultra/S100/S100P/S600), 40PIN/GPIO and I2C/SPI/UART/PWM, power/LEDs, display, network/IP, CAN, TOPS/RAM, cooling, OS lines, and system paths. Use for board-specific pinouts, interfaces, voltage, credentials, model directories, IP, capacity, or hardware comparisons. 触发词:各板引脚一样吗、40PIN怎么接、IO电平、默认用户名密码、模型目录在哪、CAN口、网口默认IP、算力多少TOPS、BPU算力、TOPS对比、X3算力、X5算力、内存多大、供电几V、HDMI分辨率、TROS路径、板型怎么查。Routing — workspace-router handoffs are availability-gated (missing → install the matching OE workspace Pack with rdk-pack-installer, restart, retry); error-code/boot failure → rdk-board-knowledge; peripheral control → rdk-peripheral-cookbook; on-board inference → rdk-model-deploy; own-model conversion: X5 → x5-router, S-series → drobotics-router, X3/Ultra → rdk-docs-reference for official toolchain docs; camera bringup → rdk-camera-setup; board selection → rdk-ecosystem.
- Deletes or force-pushes
- Installs packages
2 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- D-Robotics/rdk-device-skillsword for word, first seen Oct 15, 2026
- D-Robotics/dsh-plugin-rdkedited, first seen Aug 28, 2026
Other versions2 projects use a version of this.
Word for word · 1
- D-Robotics/rdk-device-skills★ 4100% same
Edited · 1
- D-Robotics/dsh-plugin-rdk★ 190% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository42 other files it gives its agents.
- bsp-bootloader-buildSkill
- bsp-deb-buildSkill
- bsp-env-setupSkill
- bsp-image-buildSkill
- bsp-kernel-buildSkill
- bsp-rootfs-customSkill
- bsp-source-syncSkill
- bsp-s-seriesSkill
- cmos-sensor-bringupSkill
- rdk-accessoriesSkill
- rdk-board-delegateSkill
- rdk-board-knowledgeSkill
- rdk-camera-setupSkill
- rdk-command-manualSkill
- rdk-diagnosticSkill
- rdk-docs-referenceSkill
- rdk-ecosystemSkill
- rdk-embodied-lerobotSkill
- rdk-gpio-40pinSkill
- rdk-headless-modeSkill
- rdk-llm-deploymentSkill
- rdk-log-forensicsSkill
- rdk-memory-auditSkill
- rdk-model-benchmarkSkill
- rdk-model-deploySkill
- rdk-model-zoo-developSkill
- rdk-model-zoo-integrateSkill
- rdk-model-zoo-releaseSkill
- rdk-model-zoo-repoSkill
- rdk-model-zoo-reviewSkill
- rdk-model-zooSkill
- rdk-model-zoo-validateSkill
- rdk-multimediaSkill
- rdk-network-remoteSkill
- rdk-pack-installerSkill
- rdk-peripheral-cookbookSkill
- rdk-skill-finderSkill
- rdk-source-mapSkill
- rdk-system-configSkill
- rdk-system-maintainSkill
- rdk-tros-setupSkill
- rdk-vision-pipelineSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 4 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 27
Never assume the board. An X3 pinout handed to an X5 user, or a SocketCAN command on an S100, is a real and common failure.
- Very specific: line 56
Flag a cross-board trap: if the user is mixing boards (X3 pinout ≠ X5.
- Distinctive: line 108
When answering from this skill, follow these rules — never fabricate facts, commands, or file paths:
- Distinctive: line 111
No fabrication when tools are missing: If a script or reference doesn't exist, say "not found" — don't invent from memory.
- Very specific: line 112
Preserve null/false/empty on failure: If a probe returns null or false, report that — don't substitute a plausible value.
- Very specific: line 113
No substitution off-platform: If off_platform: true, say "probe didn't run on an RDK board" — don't guess what it would have returned.
- Distinctive: line 115
Acknowledge sandbox limits: If you can't run a command, say so — don't pretend you did.
- Very specific: line 116
Read-only boundary: Never modify the system — no dd, mkfs, rm -rf, apt install, reboot, or GPIO output without explicit user confirmation.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
RDK Hardware & System Facts
The single most important rule: per-board hardware facts are NOT uniform — confirm the board first, then read its row. Pin voltage, power-LED color, default IP, CAN type, and model format all differ across the six boards. Reciting a "typical RDK board" from memory is how wrong answers happen.
Sources: official D-Robotics hardware-introduction docs —
rdk_x_doc(X3/X5),rdk_doc(Ultra),rdk_s_doc(S100/S600). Re-verified against those pages. Per-board numbers are pinned in board-specs.md; deterministic lookup inscripts/board_specs.py.
Workspace router availability gate
Before an X5 conversion handoff, check whether x5-router is available in the current session. If unavailable, do not hand off: use rdk-pack-installer to install OE Tool Chain (X5) into the confirmed project root. Before an S-series conversion handoff, check whether drobotics-router is available in the current session. If unavailable, do not hand off: use rdk-pack-installer to install OE Tool Chain (S). After installation, restart the agent session and retry the original handoff.
Confirm the board first
cat /sys/class/socinfo/board_id # universal, all boards
cat /proc/device-tree/model # board name string
cat /etc/version # OS image version (rdkos_info on 2.1.0+)Never assume the board. An X3 pinout handed to an X5 user, or a SocketCAN command on an S100, is a real and common failure.
The 6-board hardware cheat-sheet
| Board | BPU arch | INT8 TOPS | RAM | Model | OS / TROS | Power & LED | 40PIN IO | CAN | Default eth IP |
| X3 | Bernoulli2 | 5 | 2 GB | .bin | 22.04 / Humble | 5V/3A USB-C, red LED | 3.3V | none | 192.168.1.10 (.127.10 on 2.1.0+) |
| X5 | Bayes-e | 10 | 4/8 GB | .bin | 22.04 / Humble | 5V/5A USB-C, green+orange | 3.3V | SocketCAN can0 (TCAN4550) | 192.168.127.10 |
| Ultra | Bayes | 96 | 8 GB | .bin | 22.04 / Humble | ≥12V/5A DC, red LED | 3.3V | none | 192.168.1.10 |
| S100 | Nash-e | 80 | 12 GB | .hbm | 22.04 / Humble | 12–20V DC, green+orange | 3.3V | MCU CANHAL (CAN5–9) | eth1 fixed 192.168.127.10 |
| S100P | Nash-m | 128 | 24 GB | .hbm | 22.04 / Humble | 12–20V DC, green+orange | 3.3V | MCU CANHAL (CAN5–9) | eth1 fixed 192.168.127.10 |
| S600 | Nash | 560 | 32/64 GB | .hbm | 24.04 / Jazzy | 12–28V DC, green+orange | 1.8V, NO 40PIN | MCU CANHAL (MCU×5 + Main×4) | eth1 fixed 192.168.127.10 |
Five facts people get wrong — verified against official docs:
- Power LED color is not uniform. X3 and Ultra = RED. X5 and S-series = green power + orange status/Main-running.
- Only X5 is Linux SocketCAN (
can0). X3/Ultra have no CAN. S100/S100P/S600 CAN is MCU-domain via CANHAL — nocan0,ip linkdoes not apply. - S600 has no 40PIN header and its digital IO is 1.8V (every other board's 40-pin is 3.3V) on self-locking connectors (2×10 + 1×12 + 1×14-pin).
- S600 runs Ubuntu 24.04 + TROS Jazzy (
/opt/tros/jazzy/,tros-jazzy-*); S100/X-series run 22.04 + Humble. Don't copy paths/package names. - Default IP differs by board AND firmware. X3 ≤2.0.0 / Ultra =
192.168.1.10; everything else =192.168.127.10(S-series on the fixed eth1).
Model artifacts never cross BPU architectures: X3/X5/Ultra →
.bin, S100/S100P/S600 →.hbm. Recompile per board. For own-model conversion, usex5-routeron X5,drobotics-routeron S-series, andrdk-docs-referenceto find the X3/Ultra official toolchain docs.
Workflows
Workflow 1 — Answer a per-board hardware fact
- Confirm the board (
cat /sys/class/socinfo/board_id) or take it from the user's words. - Look up the row — run
python3 scripts/board_specs.py <board>(or--field can|power|io_level|default_ip|...) for a deterministic answer; full detail in board-specs.md. - Quote the exact number for THAT board — never average across boards or assume a "typical" value.
- Flag a cross-board trap if the user is mixing boards (X3 pinout ≠ X5; S600 IO is 1.8V; S600 path is
jazzynothumble).
Workflow 2 — 40PIN / GPIO / bus wiring
- Confirm the board and its IO voltage — 3.3V on X3/X5/Ultra/S100/S100P; 1.8V on S600 (and S600 has no 40-pin, use its self-locking connectors).
- The header is RPi-compatible in shape only — GPIO numbering differs, never reuse RPi pin numbers. Python uses
Hobot.GPIO, C useslibwiringpi. - Check what the 40-pin actually exposes — on S100/S100P only a subset (I2C5 / UART2-muxed / SPI0 / 2×LPWM / 10×GPIO on J24); the rest of the SoC's buses are on the MCU/Camera 100-pin connectors. Details in hardware-notes.md §1, §3.
- For actually driving the pin (toggle GPIO, PWM a servo, read an I2C sensor) → route to
rdk-peripheral-cookbook. This skill states the facts; that one does the wiring.
Workflow 3 — CAN bus
- Determine CAN type by board (cheat-sheet column):
- X5 only is Linux SocketCAN:
ip link set can0 type can bitrate 500000 [dbitrate ... fd on] && ip link set can0 up(TCAN4550, up to 8 Mbps; close the 120Ω termination switch for long/fast runs). - X3 / Ultra have no CAN.
- S100/S100P/S600 CAN is in the MCU domain via CANHAL — there is no
can0netdev andip linkdoes NOT work. Frames go through CAN2IPC → IPC → A-core CANHAL.
- X5 only is Linux SocketCAN:
- If the user tries
ip linkon an S-series board — stop them: explain it's MCU-domain CANHAL, then route the actual send/receive tordk-peripheral-cookbook.
Workflow 4 — Power, cooling, and the indicator LED
- Match the supply (cheat-sheet): X3 5V/3A USB-C, X5 5V/5A USB-C, Ultra ≥12V/5A DC, S100/S100P 12–20V DC (150W), S600 12–28V DC (16A). Never power from a laptop USB port — under-supply causes brown-outs / reboot loops.
- Read the LED correctly — X3/Ultra: a red LED means power OK. X5/S-series: green = power OK, orange = status/Main running (orange blink on X5 needs firmware 3.1.0+).
- Cooling — Ultra requires active cooling (ships a fan); S-series (especially S600 @560 TOPS) needs a fan + heatsink under load. Monitor with
hrut_somstatus.
Worked examples
Example 1 — "RDK 各个板子的引脚都一样吗?能直接套树莓派的接线吗?"
No on both counts. The 40-pin is RPi-compatible in shape but GPIO numbering differs (use Hobot.GPIO, not RPi numbers). Across RDK boards the pinout differs too — X5 has more UART/PWM/I2C than X3. And S600 has no 40-pin at all: it uses self-locking connectors at 1.8V IO (not 3.3V), so wiring 3.3V peripherals straight in is wrong. Confirm the board first, then read its row in board-specs.md.
Example 2 — "S100 上怎么用 CAN?我 ip link set can0 up 报错没有这个设备。"
That's expected — S100's CAN is not Linux SocketCAN. The CAN controllers (CAN5–CAN9) are in the MCU domain and reached through the CANHAL library, so there is no can0 netdev and ip link doesn't apply. (Only X5 has SocketCAN can0, via TCAN4550.) For sending/receiving frames on S100, route to rdk-peripheral-cookbook.
Example 3 — "板子默认用户名密码是什么?网口连不上。"
Depends on the board. X5/Ultra: root/root (and sunrise/sunrise). S100/S100P/S600: the wizard sets both sunrise/sunrise and root/root. X3: sunrise/sunrise primary, root/root usually present. For "won't connect" on an S-series board, the outer port eth1 is a fixed static 192.168.127.10 — set your PC to the same subnet (e.g. 192.168.127.100) and try ssh root@192.168.127.10.
Example 4 — "S600 和 S100 是不是一样的,文档能照搬吗?"
No — re-confirm before copying. S600 is the new flagship: 18× A78AE + 6× R52+ + 4× Nash BPU (560 TOPS), and it runs Ubuntu 24.04 + TROS Jazzy (/opt/tros/jazzy/, packages tros-jazzy-*), whereas S100 is 22.04 + Humble. S600 also has no 40-pin and 1.8V IO. Same .hbm model family and hbm_runtime, but paths, package names, and the IO interface differ — don't copy S100 commands verbatim.
Common pitfalls
| ❌ Don't | ✅ Do |
| Assume one "typical RDK board" spec | Confirm the board, read its row in board-specs.md |
| Reuse RPi GPIO numbers on the 40-pin | Use Hobot.GPIO / libwiringpi; numbering differs |
| Wire a 3.3V peripheral to S600 IO | S600 IO is 1.8V on self-locking connectors (no 40-pin) |
ip link set can0 ... on S100/S600 | Only X5 is SocketCAN; S-series CAN is MCU-domain CANHAL |
| Expect a green "power OK" LED everywhere | X3/Ultra power LED is red; X5/S-series green+orange |
Copy S100's /opt/tros/humble to S600 | S600 is Ubuntu 24.04 + Jazzy → /opt/tros/jazzy/ |
| Power any board from a laptop USB port | Use the official supply; under-power = reboot loops |
Assume 192.168.1.10 for every board | X5/S-series = 192.168.127.10; only X3≤2.0.0/Ultra = .1.10 |
Anti-hallucination guardrails
When answering from this skill, follow these rules — never fabricate facts, commands, or file paths:
- Report only observed data. Quote what scripts/commands actually return, not what you remember. If the probe says
board_id: X5, answer for X5 — even if the user insists it's an S100. - No fabrication when tools are missing. If a script or reference doesn't exist, say "not found" — don't invent from memory. Route to the appropriate skill or doc instead.
- Preserve null/false/empty on failure. If a probe returns
nullorfalse, report that — don't substitute a plausible value. Empty output is data, not an error to "fix". - No substitution off-platform. If
off_platform: true, say "probe didn't run on an RDK board" — don't guess what it would have returned. Ask for on-board logs. - No hand-editing JSON. Scripts emit structured JSON; never hand-craft output. If the contract says
{ok,off_platform,reason,fields}, that's what goes to the user. - Acknowledge sandbox limits. If you can't run a command, say so — don't pretend you did. Offer the command for the user to run.
- Read-only boundary. Never modify the system — no
dd,mkfs,rm -rf,apt install,reboot, or GPIO output without explicit user confirmation.
Reference map
| Read this | When |
| board-specs.md | Need an exact per-board number — RAM / TOPS / interface counts / power / LED / IO level / default IP / probe IDs |
| hardware-notes.md | Board confirmed, need a subsystem deep-dive — 40PIN, camera, buses, CAN, power, display, network, BPU monitoring, paths, thermals, OS/user differences |
scripts/board_specs.py | Deterministic board → spec lookup (board_specs.py s600, or --field can) |
scripts/hw_probe.sh | Live hardware interface probe — scans /dev/i2c-*, /dev/spidev*, /dev/ttyS*, /dev/gpiochip*, /sys/class/net/can* for available buses + reads thermal zones (structured JSON {ok,off_platform,reason,fields}; non-board → {"ok":false,"off_platform":true,"reason":"not_on_rdk_board","fields":null}) |
scripts/board_probe.sh (in rdk-board-knowledge) | Live board identity probe — reads /sys/class/socinfo/ + /proc/device-tree/model for current board_id / som_name / model / OS version (structured JSON {ok,off_platform,reason,fields}; non-board → {"ok":false,"off_platform":true,"reason":"not_on_rdk_board","fields":null}). Cross-skill reference: use this for live board confirmation, use board_specs.py for static spec lookup |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

