The entire process was automated by "Cursor"
Here is summary. Just paste to Agent and it would do all.
# From Dead Android Brick Anxiety to Booting Armbian — An Agent-Ready Flash Guide for H96 Max M9 (RK3576)
> **Board:** H96 Max M9 (RK3576) · **Path that worked:** unofficial Armbian Bookworm **vendor kernel 6.1** · **Host:** Windows + RKDevTool
> **Audience:** humans *and* AI coding agents — paste this whole post into your agent and say: *“Follow this. Flash my H96 Max M9.”*
> **Warning:** This **wipes eMMC**. Back up anything you care about. Keep a stock Android `update.img` for restore. You do this at your own risk.
---
## Why this post exists
There is **no Home Assistant OS** image for this box.
There is **no friendly “balenaEtcher to SD and reboot”** path for many units (no reliable TF/USB boot — Rockchip USB flash is the real door).
So people burn evenings on:
* wrong SoC images (RK3318 / generic “TV box” builds),
* RKDevTool’s charming Chinese UI,
* the infamous **`内存不足` (out of memory)** popup that is usually *not* about your PC RAM,
* LOADER vs Maskrom confusion,
* and then wonder why Home Assistant “Add-ons” don’t exist on a plain Linux install.
This write-up is the **boring, repeatable recipe** that got an **8G/128G H96 Max M9** from stock Android → **Armbian Bookworm vendor 6.1.75** → SSH → Docker Home Assistant — so the next person (or the next agent) does not reinvent the toothpick.
Huge thanks to everyone in the Armbian RK3576 / H96 M9 threads who published loaders, CSCs, DTBs, and unofficial images. This is a **field guide**, not a claim of official Armbian support.
---
## What you need on the table
| Item | Notes |
|------|--------|
| H96 Max M9 (RK3576) | Confirm **RK3576** on the box / seller page |
| Windows PC | USB port that can talk Rockusb |
| USB-A data cable | Charge-only cables are the silent enemy |
| Toothpick / paperclip | For **LOADER** via 3.5 mm AV jack (common method on this board) |
| ~5+ GB free disk | Image ~2.2 GB + tools |
| Optional HDMI + keyboard | First-boot password wizard is easier on a monitor |
### Software kit
1. **Rockchip Driver Assistant** (install Rockusb driver)
2. **RKDevTool v3.x** (Windows GUI — this is what actually writes under Rockusb)
3. **Unofficial Armbian Bookworm vendor 6.1 image for H96-M9** (raw `.img`, GPT)
4. **`RK3576_MiniLoaderAll.bin`** (keep nearby for Maskrom recovery)
5. Stock **Android `update.img`** (restore parachute)
> Tip for agents/humans: put the `.img` on a **short path without spaces** (e.g. `C:\H96flash\armbian.img`). RKDevTool sometimes trips over long/` ` paths.
Community threads / Drive folders linked from the main H96 M9 topics on forum.armbian.com are where those artifacts usually live — use the **vendor 6.1 Bookworm** line if you care about NPU later; mainline is a different adventure.
---
## LOADER mode (the toothpick ritual)
1. Install Rockchip drivers.
2. Open **RKDevTool** → tab **Download Image** (not Upgrade Firmware).
3. Power off the box. USB from PC → box.
4. Press & hold the reset via **3.5 mm AV jack**, apply power, wait until RKDevTool says something like **Found One LOADER Device**.
5. Release. Do not unplug.
If you only ever see Maskrom, use MiniLoader (`db` / download boot) before writing — LOADER is the happier path when it appears.
---
## The trap that costs hours: `内存不足` / empty Loader row
**Symptom:** green row named **Loader**, Address `0x00000000`, **Path empty** → popup **内存不足** (“insufficient memory”).
**Truth:** RKDevTool is not complaining that your 32 GB PC is full.
It is choking because **Loader** is meant for a tiny MiniLoader, and people (and agents) accidentally treat the **2.2 GB OS image** as “the Loader.”
### Correct Download Image setup
1. Click **Clear** (清空).
2. Right-click table → **Add Item**.
3. One checked row only:
| Field | Value |
|-------|--------|
| Address | `0x00000000` |
| Name | `Armbian` (anything **except** thinking this is MiniLoader) |
| Path | full path to the **Bookworm `.img`** |
| Write by Address | **checked** |
4. When LOADER is detected → **Run** (执行).
5. Wait. Do not unplug. Success text appears in the right log pane.
### Upgrade Firmware tab?
Use that for stock **`update.img`** restore — **not** for a raw Armbian `.img`.
### CLI note
Open-source `rkdeveloptool` may **list** a LOADER device but fail to write (`creating comm object failed`) while the official **Rockusb** driver is bound. Prefer **RKDevTool GUI** for the actual flash on Windows.
---
## First boot
1. Unplug USB-from-PC. Connect HDMI + Ethernet (Wi‑Fi can wait). Power on.
2. Complete Armbian first-boot: set **root** password, create a normal user.
3. Find the IP (router DHCP list, or `ip a` on console).
4. SSH in as root (or the user + `sudo`).
Expected shape when it worked here:
* Hostname style: `h96-m9`
* OS: Armbian-unofficial Bookworm
* Kernel: **`6.1.x-vendor-rk35xx`**
* Wi‑Fi chip family seen in dmesg: **AIC8800** (your board may differ)
* Ethernet works; Bluetooth HCI may need extra work on some images
---
## After Linux: Home Assistant without lying to yourself
**HAOS is not an option** for this SoC today.
Practical path that worked:
1. Install **Docker** on Armbian.
2. Run **Home Assistant Container** with `--network=host` and a bind-mounted `/config`.
3. Accept that there is **no official Add-on store** on Container.
4. Run companions as Compose services instead, for example:
* Mosquitto (MQTT)
* Portainer
* go2rtc (camera plumbing)
* Node-RED
* Samba (edit `/config` from Windows)
5. Install **HACS** into `custom_components`, restart HA, add the integration in the UI.
6. For cameras/NVR later: go2rtc → optionally Frigate; Hikvision users often use **hikvision_next** (HACS). Tuya users: **Tuya Local** (HACS) — not the same as “Local Tuya.”
**Wi‑Fi in Home Assistant’s “Network adapter” screen does *not* join SSIDs** on Container installs. Configure Wi‑Fi on the **host** (NetworkManager / `nmtui` / Cockpit), then optionally select the interface in HA.
---
## Android restore parachute
RKDevTool → **Upgrade Firmware** → select stock **`update.img`** → LOADER/Maskrom → Run.
Keep that file offline. Future-you will thank present-you.
---
## Prompt you can paste to any coding agent
Copy everything below the line into Cursor / ChatGPT / Claude / etc.
---
**AGENT BRIEF — H96 Max M9 (RK3576) Armbian flash + HA Container**
You are helping me flash and bring up an H96 Max M9 TV box (Rockchip **RK3576**).
### Goals
1. Flash **unofficial Armbian Bookworm vendor kernel 6.1** raw `.img` with Windows **RKDevTool** (Write by Address @ `0x0`).
2. Verify SSH.
3. Optionally install Docker + Home Assistant **Container** (host network) + sensible companions (MQTT, Portainer, go2rtc).
4. Never invent HAOS for this board. Never flash RK3318 / wrong-SoC images.
### Hard constraints
* No TF/USB boot assumed — use Rockchip USB **LOADER** (AV jack toothpick) or Maskrom.
* Do **not** put the full OS image in a RKDevTool row meant as MiniLoader; that causes **内存不足**.
* Prefer GUI RKDevTool under Rockusb; don’t fight CLI libusb if `wl` fails with “creating comm object failed.”
* Keep stock Android `update.img` as restore.
* **Never store or echo my passwords, Wi‑Fi keys, tokens, or emails in git, forum posts, or chat logs.** Ask me to enter secrets locally / in a password manager.
### Deliverables
* Checklist of files to download (driver, RKDevTool, Armbian img, MiniLoader, stock update.img).
* Exact RKDevTool row settings.
* LOADER procedure.
* First-boot + SSH verify commands.
* Optional Docker Compose for HA + companions.
* Short “what failed / how we fixed it” log.
### My environment
* OS: Windows
* Workspace folder: `<PATH>`
* Image path: `<PATH_TO_ARMBIAN.IMG>`
* I have HDMI: yes/no
* I want Home Assistant after flash: yes/no
Proceed step by step. Stop and ask before any destructive flash confirm.
---
## Known pitfalls (cheat sheet)
| Symptom | Likely cause | Fix |
|---------|----------------|-----|
| `内存不足` | OS image on Loader row / empty path | Clear → Add Armbian @ 0x0 → Write by Address |
| Found LOADER but write fails in CLI | Rockusb vs libusb | Use RKDevTool GUI |
| HA has no Add-ons | Container install | Use Docker companions + HACS |
| Wi‑Fi missing in HA network UI | Not connected on host / no IP | Connect with `nmtui` / Cockpit / nmcli first |
| BT missing `hci0` | AIC UART BT incomplete on image | Don’t expect HA Bluetooth until host exposes HCI |
| Box soft-bricked | Bad image / interrupted write | Maskrom + MiniLoader + restore or reflash |
---
## Closing
If this guide saves you a night, pay it forward: post your **exact image filename**, whether **LOADER or Maskrom** worked, and any DTB quirks for your RAM/eMMC variant (2/16, 4/32, 8/128).
The RK3576 TV-box story is still being written. Vendor 6.1 is the pragmatic on-ramp today; mainline and NPU are the sequel.
Good luck — and may your toothpick find the LOADER on the first try.