Dead ends¶
Approaches that were tried and abandoned, with why. Read these before proposing something similar; if circumstances changed, say which.
Each entry: what was tried · what happened · why it stopped · what we do instead · date.
Note Air¶
Porting the Note Air 2 firmware¶
- Tried: run the Note Air 2's newer Onyx firmware on the Note Air.
- Happened: the Note Air 2 has a different SoC (Snapdragon 662 vs 636), UFS instead of eMMC, dynamic partitions and file-based encryption.
- Stopped because: kernel, bootloader and hardware support files don't carry over. Moving single Onyx apps over worked for a while, but the launcher must be signed with Onyx's platform key, and patching Android to work around that broke the system.
- Instead: a Linux distribution on the mainline kernel.
- Date: 2026-03-30 (SoC comparison); app port rolled back 2026-06-08.
Decrypting stock Android's /data from recovery or another OS¶
- Tried: unlock the stock full-disk encryption from TWRP: the vendor key services, every TrustZone listener, matching process identities, SELinux contexts.
- Happened: TrustZone creates and loads the disk key only during a normal Android boot; from recovery it refuses every request. Failed attempts could also leave TrustZone so that the next Android boot asked for a password, which meant a factory reset.
- Stopped because: the refusal is inside TrustZone. A workaround that decrypted during a normal boot and then started TWRP on top worked, but it depends on Android booting: when an Android change broke the boot, neither Android nor recovery could reach the data, and the device was rescued by turning encryption off.
- Instead:
/datawithout Android's encryption; GlassineOS encrypts its own data with LUKS2 (see decision 0006). - Date: 2026-03-28 to 2026-04-20; encryption turned off 2026-06-08.
Real A2 updates through the stock kernel¶
- Tried: patch the stock kernel's e-ink driver so the fast A2 waveform reaches the panel.
- Happened: the driver converts A2 to a full update in two separate places; patches that bypassed them crashed the kernel.
- Stopped because: the driver is closed (no Onyx kernel source).
- Instead: our own user-space e-ink engine on the mainline kernel, which plays the waveform file's real A2 mode.
- Date: 2026-03-30; engine on mainline 2026-09-27.
fastboot flash and fastboot boot¶
- Tried: flash and boot images over fastboot, with the stock bootloader and with several modified ones.
- Happened: every transfer hangs at "Sending".
- Stopped because: the cause is not in the bootloader code we can change; it is suspected below it.
- Instead: write partitions with
ddfrom a running system, or over EDL. - Date: 2026-03-17 to 2026-03-27.
The standard SDM636 firehose loader¶
- Tried: EDL with the OEM firehose loader for this SoC.
- Happened: it loads, then hangs reading the partition table and never writes.
- Instead: the "peek" firehose loader.
- Date: 2026-06-02.
The "five presses" recovery sequence¶
- Tried: a recovery entry sequence from a 2021 blog post (hold power, then press it five times).
- Happened: it never worked on this device.
- Instead: close the cover and power on (GlassineOS bootloader) for fastboot, or
reboot recovery. - Date: confirmed 2026-10-04.
Disabling vendor verity through vbmeta¶
- Tried: set the "hashtree disabled" flag in
vbmetato stop verity onvendor. - Happened: no effect.
- Stopped because: verity for
vendoris switched on by theverifyflag in the fstab inside the kernel's device tree, not byvbmeta. - Instead: edit that device tree entry, keeping its size unchanged (a repacked device tree didn't boot).
- Date: 2026-04-17.
A boot counter in UEFI variables¶
- Tried: count failed boots in the bootloader with UEFI non-volatile variables.
- Happened: the device boot-looped.
- Stopped because: the variables don't survive a watchdog or forced reset.
- Instead: the GPT slot attributes (retries, successful, unbootable).
- Date: 2026-03-28.
Generic linux-firmware files for the WCN3990¶
- Tried: linux-firmware's WCN3990 Wi-Fi firmware and board data.
- Stopped because: they are built for the Snapdragon 845.
- Instead: the device's own files from its
modempartition, in a per-board directory. - Date: 2026-09-27.
The qcom-cpufreq-hw driver as it is¶
- Tried: CPU frequency scaling with the mainline
qcom-cpufreq-hwdriver. - Stopped because: on this SoC the frequency hardware must be programmed by the OS, which that driver doesn't do.
- Instead: a port of the CPR and OSM drivers (open loop, capped for now).
- Date: 2026-09-28.
Platform-coordinated CPU idle¶
- Tried: cluster idle states in PSCI platform-coordinated mode.
- Stopped because: the firmware refuses that mode, so the clusters never slept.
- Instead: an OS-initiated idle hierarchy with the stock state IDs.
- Date: 2026-09-28.
Compositing windows on the GPU in the e-ink engine¶
- Tried: blend windows on the GPU before computing e-ink frames.
- Happened: about twice as slow: reading the result back costs more than blending, which takes under 1 % CPU anyway.
- Instead: blend on the CPU; the GPU computes the panel drive frames.
- Date: 2026-09-29.