Device Hub — Note Air 1
Canonical hardware reference for the Onyx Boox Note Air 1. All facts here are confirmed from physical device inspection (Phase 01) and EDL partition dumps. Use this as the ground truth when making porting decisions.
Hardware Identity
| Field | Value |
|---|---|
| Marketing name | Onyx Boox Note Air |
| Model (ro.product) | NoteAir |
| SoC | Qualcomm SDM636 (Snapdragon 636) — “sdm660” platform |
| CPU | Kryo 260 (4×A73 + 4×A53), arm64-v8a |
| GPU | Adreno 509 |
| RAM | 3 GB LPDDR4 |
| Storage | eMMC (not UFS) |
| Display | 10.3″ E-ink, 1872×1404, driver: onyx_epdc_fb |
| Touch | Wacom EMR (i2c@c1b6000/wacom@09) + capacitive overlay |
| Android version | 10 (SDK 29) |
| Kernel | 4.4.x (Onyx binary, no source published) |
| VNDK | 29 |
| Boot image header | v0, page size 2048 |
| Treble | Enabled (ro.treble.enabled=true, separate vendor partition) |
| Partition scheme | Single-slot, static (GPT) |
| Encryption | FDE (full-disk encryption, auto-encrypt, no password) |
| Userdata FS | ext4 |
Partition Table (from EDL printgpt)
| Partition | Size | Notes |
|---|---|---|
| xbl | 3.5 MB | Extensible bootloader (XBL) — chip-specific, do not replace |
| abl | 256 KB | Android bootloader — custom ABL v2.4 currently flashed |
| boot | 64 MB | Kernel + ramdisk (header v0) |
| recovery | 64 MB | TWRP v3.7 currently flashed |
| system | 3.5 GB | AOSP + Onyx apps (ext4) |
| vendor | 1 GB | Qualcomm sdm660 HALs (ext4) |
| userdata | ~50 GB | User data (ext4, FDE) |
| persist | 32 MB | Calibration data — never wipe |
| misc | 4 MB | BCB (bootloader control block) |
| modem | 100 MB | Baseband firmware |
| cache | 256 MB | Android cache |
Key HAL Blobs (vendor partition)
| Blob | Purpose |
|---|---|
| hwcomposer.sdm660.so | Display composer — calls onyx_epdc_set_mode() kernel symbol |
| gralloc.sdm660.so | Graphics buffer allocator |
| android.hardware.graphics.composer@2.1-service | HWC service |
| libdisplayconfig.so | Display config library |
EPDC Driver Notes
The e-ink display controller (EPDC) driver is compiled into the kernel binary, not a loadable module. Device node: /dev/ebc. Sysfs: /sys/devices/sepdc/. Compatible string: onyx,sepdc.
Two update paths exist: (1) /dev/ebc ioctl — used by TWRP and recovery, subject to waveform transform; (2) onyx_epdc_set_mode() kernel symbol — called directly by HWC, bypasses transform. See Research → A2 Waveform Mode for full analysis.
Fastboot Behaviour
| Command | Result |
|---|---|
| fastboot flash boot boot.img | Works — verified |
| fastboot flash recovery recovery.img | Works — verified |
| fastboot flash abl abl.elf | Works — verified (use qtestsign -v 5) |
| fastboot oem unlock | Not needed — bootloader already unlocked |
| fastboot getvar all | Works — returns device info |
Backups
Full EDL partition dumps stored locally in firmware/backups/ (excluded from git via .gitignore). Key partitions backed up: xbl, abl, boot, recovery, system, vendor, persist, misc, modem. Always verify MD5 checksums against the backup manifest before flashing.