Onyx Boox Note Air5 C (Qualcomm SM6350)

Static analysis of the EDL/Firehose partition dump in ../_READONLY/ (read-only), plus on-device EDL results. Scope is the full boot chain and hardware below Android userspace — PBL/XBL/ABL/TZ/HYP/AOP firmware, device tree, partition layout, PMIC, USB PHY — plus the Android userspace layers that bridge to it (e-ink stack, drivers/HALs, security/DRM, platform scaffolding and app inventory, Android userspace (bridge to the firmware)), since the end goal is general device documentation (bootloader replacement, Linux porting, or any other use), not bootloader work alone. Extracted artifacts live in ../artifacts/.

Reference

Device at a glance

SoC:

Qualcomm SM6350 / Snapdragon 690 5G; codename lagoon; platform “Bitra” — the SM6350 platform/CDT board family (BITRALAZ, BitraPkgLAA, BITRA-1).

PMICs:

pm6350 + pm6150l + pm7250b (charger, smb5, Type-C). EPD PMICs FP9931 / MAX17135.

Kernel:

Linux 4.19.157 arm64 (-perf); Android 11 (release-keys).

Build provenance:

build owner wfy; tree sm6350_androidT_rom (an “androidT” firmware base even though the shipped OS is Android 11 per vbmeta — the firmware/modem base is newer); modem/boot line BOOT.XF.3.3; platform BitraLAA/BitraPkgLAA; XBL DXE = RELEASE, ABL = DEBUG.

Security posture:

bootloader LOCKED (is_unlocked=0), AVB on — but the boot chain is test-key-signed and secure boot is not fused, so it is bypassable in practice (the re-signing acceptance behind this has been confirmed on-device; flashing a patched ABL specifically has not); module signing off. PBL enforces image integrity (SHA-384) but not authenticity (see Secure boot and image signing, Firehose fuse read and secure-boot confirmation).

Buttons:

Power (KPDPWR) + Volume-Down (RESIN) only. Recovery = power-off → hold Power to LED → release → hold ~3–8 s → release → tap Power ×5.

Storage:

UFS, SK Hynix H9HQ15AECMBDAR (mfr 0x1AD, fw 043), 6 LUNs, 4096-byte blocks.

Identity:

Sahara HWID 0x0013f0e100000000 (MSM_ID 0x0013f0e1, OEM_ID 0x0000, MODEL_ID 0x0000), CPU bitra_SDM (chip serial redacted — unique per unit). Active slot = a. See EDL / Firehose interface.

EDL tooling:

the stock lenovo_motorola Firehose loader reads and writes but implements no <peek> (raw-memory read); a separate peek-capable loader was used for live memory reads (Open questions and limits of analysis, OQ2/OQ8). QFPROM/SPMI remain XPU-limited in hardware regardless of loader (EDL / Firehose interface).

Firmware version inventory

From QC_IMAGE_VERSION_STRING:

Image

Version

Notes

xbl_a

BOOT.XF.3.3-00340-BITRALAZ-1

IMAGE_VARIANT BitraPkgLAA, OEM wfy

aop_a

AOP.HO.2.0-00069

Always-On Processor

tz_a

TZ.XF.5.10-00304-1

variant SAJAANAAA

hyp_a

TZ.XF.5.10-00304-1

bundled with TZ

modem_a

ADSP.VT.5.6-00702.1 + MPSS.HI.2.5.1-01197 + CDSP.VT.2.6 + NPU.FW.2.3

multi-subsystem non-HLOS bundle; each sub-image is separately header-tagged (variants bitra.{adsp,gennm,cdsp,npu}). MPSS baseband present but dormant. See ADSP and CDSP firmware

core_nhlos_a

MPSS.HI.2.5.1-01188 + WLAN.HL.3.3.1-01884

second non-HLOS pack; carries the Wi-Fi radio firmware (bitra.gen.prodQ)

abl / keymaster / uefisecapp / dsp / devcfg / qupfw

(no top-level version string)

MBN-wrapped; abl = DEBUG_CLANG35 build

Unresolved items

Everything the static, single-dump analysis cannot answer — and what access would resolve each — is collected in Open questions and limits of analysis. The low-level analysis is otherwise complete: every partition below Android userspace has been opened or accounted for.