Quest 1 to postmarketOS
A first-generation Quest is a decent computer welded to an OS you do not control. The bootloader had just become unlockable, and the community Linux port existed but did not boot.
- Hardware
- Snapdragon 835, dual 1440 by 1600 panels, four global-shutter cameras
- Kernel
- 4.4.205. systemd will not boot on it, so OpenRC.
- Frames
- 19.5 to 72 per second. None of 1,200 intervals over 25 ms.
- Drift
- 0.15 degrees over 14.4 seconds at rest
- Wi-Fi
- Associates on 5 GHz 88 seconds after a cold boot
What stopped it booting
Two faults. The root filesystem had been built with 1 KB blocks on storage that uses 4 KB sectors. Blocks smaller than sectors cannot be mounted, and this kernel panics rather than reporting it. One flag fixes it.
The boot header also carries 512 bytes for kernel arguments and an overflow field this bootloader ignores, so the root filesystem ID was being truncated mid-string. Trimming other arguments made room.
Display and rendering
Writing pixels into the framebuffer the obvious way produces a black panel. The display controller needs the mode unblanked and a page flip every frame, synced to the panel.
Lens correction uses the headset's own calibration data: 52 KB holding a 32 by 32 correction grid per eye, the lens separation and the asymmetric field of view. The visible distortion turned out to be stereo centring rather than field of view, and is fixed by shifting each eye 100 pixels inward.
All of it is drawn on the CPU. The GPU sits unused, because its initialization call segfaults.
Wi-Fi
There is no open driver. Getting online means running Meta's own Android daemon on musl, on top of four Qualcomm services. One needed a real fix: firmware requests use offsets relative to a shared buffer, and the open implementation treated them as absolute addresses, which killed the modem at boot.
This is an Android blob bring-up, not a free driver, and it depends on the stock Android install still being in the other slot.
Orientation, not position
What is installed tracks where the head is pointing, not where it is. Integrating the accelerometer as intended drifts ten meters; distrusting it a hundredfold brings that to ten centimeters but loses lock on almost any quick movement.
Orientation holds to 0.15 degrees over 14.4 seconds at rest, which is enough for head-aimed drawing in 3D.
Status
Stopped on request. Nothing was written to the bootloader. It boots, joins Wi-Fi by itself, streams all four cameras and renders stereo with correct lens warp at 72 fps.
Frame cadence clusters around 58, 72 and 86 per second depending on panel state.

