Found these $5 USB dongles that are actually entire computers using an old budget smartphone SoC. Smart reuse, it works just fine for the purpose. I like it. Let’s make it more useful and trustworthy.
PostmarketOS has a fairly comprehensive wiki page on these, but it does not have a clear ordered set of steps anywhere, partly because it is trying to cover a wide range of devices. I ordered two in mid-late 2025 and I got two identical ‘UZ801 v3.2’ boards, so I am assuming that is most common at this time. To see what board you have, take it apart, it is fairly easy, nondestructive, and should be silkscreened on.
These devices are nontrivial to flash, they have ‘quirky firmware’ which needs to be replaced. Some of it is available from Linaro as covered in the linked article, but others need to be built. You can find firmware from other projects that use these USB sticks, but they don’t really provide any provenance for the firmware binaries, so I decided to build it myself out of an abundance of caution. I will provide it. Whether you trust me more than any other random individual on the web is up to you :)
This is the set of commands used to create/obtain the four firmware partition binaries needed. I used a Debian Trixie container with Distrobox and installed the required build dependencies inside of there. This is largely based on the linked wiki article, but combined. I’ve tried to make this a sequential set of directions, which that page is lacking. Here is the download for the set of files that I built.
mkdir uz801; cd uz801; mkdir flashme
wget https://releases.linaro.org/96boards/dragonboard410c/linaro/rescue/17.09/dragonboard410c_bootloader_emmc_android-88.zip
unzip dragonboard410c_bootloader_emmc_android-88.zip
cp sbl1.mbn flashme/; cp tz.mbn flashme/
git clone https://github.com/msm8916-mainline/qhypstub.git
cd qhypstub; git clone https://github.com/msm8916-mainline/qtestsign.git
make CROSS_COMPILE=aarch64-linux-gnu-
cp qhypstub-test-signed.mbn ../flashme/
cd ..; git clone https://github.com/msm8916-mainline/lk2nd.git
cd lk2nd; make LK2ND_BUNDLE_DTB="msm8916-512mb-mtp.dtb" LK2ND_COMPATIBLE="yiming,uz801-v3" TOOLCHAIN_PREFIX=arm-none-eabi- lk1st-msm8916
../qhypstub/qtestsign/qtestsign.py aboot build-lk1st-msm8916/emmc_appsboot.mbn
cp build-lk1st-msm8916/emmc_appsboot-test-signed.mbn ../flashme/
# $ tar czf uz801-fw.tar.gz flashme
To flash the firmware:
adb reboot bootloader
fastboot flash aboot emmc_appsboot-test-signed.mbn
fastboot reboot bootloader
# for some reason, after flashing lk1st, 'fastboot reboot bootloader' just booted straight to the stock OS skipping lk2nd fastboot seemingly.
# 'adb reboot bootloader' acted similarly, i had to unplug+replug with the recovery button pressed to continue
# to check if lk2nd has been successfully flashed:
# fastboot oem log; fastboot get_staged lk.log
# or, if you just want a fast dirty check, this command does not work on default aboot AFAICT but does on lk1st:
# fastboot oem help
fastboot flash tz tz.mbn
fastboot flash hyp qhypstub-test-signed.mbn
# PmOS wiki is very vague on whether this is required or not, but it more strongly implies it is for 'UZ801' sticks
fastboot flash sbl1 sbl1.mbn
# after this point, the UZ801 will NO LONGER BOOT into android! this is normal! you are now ready to flash your OS!
This is provided in the download just in case the files get separated from this page, but I’d just copy them off of here, it’s only 5 commands and as mentioned in the comments, I did need to unplug my dongle and replug it while holding the recovery button under the removable plastic shield for the bottom/SIM slot. YMMV. Be safe, take the advice in the linked wiki article and back everything up, take it slow, try to understand the broad strokes of what you are doing.
Build your PMOS image here or earlier - see the ‘installation’ section of the linked zhihe-generic wiki page. I am doing the simpler ‘userdata only layout because I am doing a console only install.
NOTE: despite the page suggesting this, ‘pmbootstrap config boot_size 128’ gets blocked by pmbootstrap install
. If you know how to get around this, write in.
pmbootstrap flasher flash_rootfs --partition userdata
# as an alternative, you can pmbootstrap export and
# fastboot flash userdata $PMOS_ROOTFS
>> Home