🛠 Installer le système sur l'eMMC : rkdeveloptool, MaskROM et gain de fiabilité
Objectives
SKUs with onboard eMMC feature soldered 5.1 memory (8/16/32/64 GB, no socket: capacity is fixed at purchase) configured in 8-bit HS200 (mmc-hs200-1_8v, non-removable in the mainline device tree). Installing the system on eMMC rather than a microSD card provides robustness (no moving contacts) and often higher speed. Two methods are covered: from a system booting on SD using rkdeveloptool, and via Rockusb mode (MaskROM button + USB-C 1) from a PC.
Hardware
- 1 Radxa ZERO 3W with eMMC (check your SKU!)
- 1 microSD card with a functional Radxa OS (method 1)
- 1 Linux PC with rkdeveloptool installed (
sudo apt install rkdeveloptool) (method 2) - 1 USB-C data cable (not a charge-only cable)
- The
.imgfile to install (same file as in an SD flash tutorial)
Method 1 — From the system booted on SD
# La carte voit-elle son eMMC ?
lsblk # sda/mmcblk1 pour la SD, mmcblk2 (ou mmcblk1) pour l'eMMC
sudo fdisk -l # identifiez bien le périphérique eMMC AVANT d'écrire
# Copie directe image -> eMMC (ATTENTION : efface tout l'eMMC)
sudo unxz -k radxa-zero3_bookworm_kde_b1.img.xz
sudo dd if=radxa-zero3_bookworm_kde_b1.img of=/dev/mmcblk2 bs=4M status=progress conv=fsync
sudo sync && sudo poweroff
Then remove the microSD card: the boot order microSD → eMMC → USB automatically switches to eMMC.
Method 2 — Rockusb from the PC (card "empty")
# 1. Carte éteinte : maintenir le bouton MaskROM, brancher USB-C 1 vers le PC,
# relâcher. Le contrôleur RK3566 apparaît en mode téléchargement.
lsusb | grep -i rockchip # id 2207:350x
sudo rkdeveloptool ld # liste la mémoire (BootROM/eMMC détectés)
sudo rkdeveloptool wl 0 radxa-zero3_bookworm_kde_b1.img # écrit l'image à 0
sudo rkdeveloptool rd # redémarre la carte
Radxa also documents the Rockchip "factory upgrade tool" (Rockchip Batch/Android Tool) as a graphical alternative; the official low-level-dev flow describes rkdeveloptool.
Expected verification
lsblk -o NAME,MODEL,SIZE,ROTA shows the root system on the eMMC device (root=PARTUUID... on mmcblk2). A rough speed test: sudo hdparm -Tt /dev/mmcblk2 or dd if=/dev/zero of=test bs=1M count=512 oflag=direct — HS200 eMMC typically outperforms a class 10 SD card in sequential/4K access. dmesg | grep mmc confirms the HS200 8-bit negotiation.
Common errors
- Writing to the wrong device: with SD + eMMC simultaneously present, mmcblk indices can swap depending on the kernel — check the size (
lsblk) before each dd. - Believing the eMMC is removable: it is soldered onto production boards; you cannot "change the OS card" by swapping a chip.
- Using a charge-only USB-C cable in MaskROM mode:
lsusbshows nothing — test with a known data cable. - Forgetting to release/hold the MaskROM button at the right timing: plugging in without holding the button causes the board to boot normally instead of entering Rockusb.
- Powering the board from another source during eMMC writing: keep it powered solely by the PC's USB port to avoid interruptions mid-write.
- Not syncing before powering off: corrupted eMMC system; the dd command above includes conv=fsync, followed by an explicit sync.
- Full eMMC: 8 GB on smaller SKUs — a full desktop image + apt full-upgrade can saturate it; plan for a server image or a more generous SKU.
Other tutorials for this board
- Premiers pas avec la Radxa ZERO 3W : flasher Radxa OS et démarrer
- Wi-Fi 6 et Bluetooth 5.4 : se connecter, choisir l'antenne, connaître sa révision
- GPIO avec libgpiod : faire clignoter une LED et lire un bouton
- Caméra MIPI CSI : brancher une Raspberry Pi Camera (OV5647/IMX219) sur la ZERO 3W
- Noyau mainline avec Armbian : vérifier le device tree, ajouter un overlay, lire le SARADC
- NPU 0,8 TOPS : inférence RKNN (YOLO, Whisper) sur la ZERO 3W
Code examples for this board
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash