You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Guides, scripts, and technical documentation for flashing custom firmware on the Rabbit R1. Includes a complete CipherOS (Android 16) flashing procedure, stock firmware restoration, hardware reference, and detailed notes on what worked and what didn't.
Published releases stop at v0.8.293. Production units run much newer software — the
unit used for this project reported rabbit_OS_v2.3.1_20260910192308, Android 13 (SDK 33),
built 2026-09-10. Rabbit publishes nothing for that build, so restoring "stock" from the
ZIP downgrades the device. A community dump is available in the
stock-v2.3.1 release.
OTA updates use virtual A/B COW overlays. On an updated device, super contains
system_a-cow, vendor_a-cow and product_a-cow extents next to the base partitions.
Extracting system_a alone gives the pre-OTA system, not what boots.
The release ZIP omits per-device partitions (nvram, nvdata, nvcfg, proinfo,
protect1/2, seccfg, para, frp, otp). Those hold radio calibration, IMEI, MAC
addresses and DRM keys, and are not recoverable from a download.
What Works
CipherOS (Android 16, SDK 36) boots and runs on the R1
WiFi, Bluetooth, touchscreen, display, USB, camera
Side button produces zero interrupts — the mtk-kpd kernel driver in CipherOS's kernel does not generate any events on button press. Stock kernel works fine. This appears to be a missing GPIO/PMIC configuration in the CipherOS device tree. See CipherOS Findings for details.
Critical Gotchas
Back up before you flash → the newest published release is v0.8.293 (May 2025), but production units ship much newer builds. A full dump is the only way to keep what the device actually runs. See Backing Up a Rabbit R1.
No volume buttons → can't enter fastboot the Android way. Must use mtkbootcmd.py to send FASTBOOT command via preloader serial.
CipherOS boot.img doesn't support fastbootd → must use stock boot.img (v0.8.293) even when running CipherOS.
cdc_acm conflicts with adb → must toggle the kernel module: enable for mtkbootcmd.py, disable for adb.
system_ext doesn't exist in stock layout → must create via fastboot create-logical-partition before flashing CipherOS.
Raw mtkclient writes to super don't work → dynamic partition metadata gets corrupted. Must use fastbootd for logical partitions. See Failed Approaches.
LK bootloader patching is a dead end → we tried 7 different approaches to patch the Little Kernel bootloader to bypass dm-verity. All failed. The correct approach is disabling vbmeta verification via fastboot flags.