Vom 8-Dollar-Stick zum Debian-Server — der nachbaubare Weg
Sichern, flashen, verbinden. Erst Backup, dann Mut.
Fünf Schritte. Jeder führt zum passenden Detail-Abschnitt — keine Sackgassen.
Bevor irgendetwas geschrieben wird: Wie kommst du in welchen Modus, wie sieht der Host-PC das Gerät, und wofür ist es da?
| Modus | Wie reinkommen | Host-PC sieht | Wofür |
|---|---|---|---|
| ADB (Stock-Android) |
Stock-Android booten → per WLAN auf http://192.168.100.1 (Login admin) → /usbdebug.html ADB aktivieren → Stick neu einstecken |
adb devices listet Gerät |
Erste Recon & Backups, solange noch Android läuft |
| Fastboot (Bootloader) |
adb reboot bootloader aus laufendem ADB |
fastboot devices |
Einzel-Partitionen schreiben, das eigentliche Debian-Flashen (./flash.sh) |
| EDL 9008 (Emergency Download) |
adb reboot edl (alternativ aus Fastboot: fastboot oem reboot-edl) |
USB-Gerät 05c6:9008 („Qualcomm HS-USB QDLoader 9008") |
Voller Lese-/Schreibzugriff aufs eMMC + Rettung gebrickter Geräte |
# Bjoern Kerlers EDL-Client (tools/edl) + Firehose-Loader EDL=tools/edl/edl LOADER=tools/edl/edlclient/prog_emmc_firehose_8916.mbn # Gerät erkennen / Partitionstabelle lesen edl printgpt
Vom „alles auf einmal" bis zum chirurgischen Einzelzug. Lege die Dateien sicher ab — sie sind deine Rückfahrkarte.
# Voll-Dump aller Partitionen in eine Datei (~3.7 GB) edl rf uz801-stock.bin
# boot-Partition einzeln lesen python edl r boot boot.img
Das sind die Stücke, die du später für ein funktionierendes Modem brauchst.
# Alle Partitionen einzeln sichern — erzeugt modem.bin, modemst1.bin, # modemst2.bin, fsg.bin, fsc.bin … + rawprogram0.xml: edl rl uz801_stock --genxml # Kritische NV-Partitionen (IMEI/Kalibrierung): modemst1, modemst2, fsg, fsc
Offset = Start-Sektor (Sektorgröße 512 Bytes), Größe aus size_in_KB umgerechnet — beide verbatim aus der autogenerierten rawprogram0.xml. Die XML enthält keine Flags-Spalte. „Zweck" ist eine Standard-MSM8916-Beschreibung (nicht aus einem Repo-Kommentar).
| Name | Offset | Größe | Flags | Zweck |
|---|---|---|---|---|
| modem | 65536 | 64 MB | — | Modem-Firmware (NON-HLOS) |
| sbl1 | 196608 | 512 KB | — | Secondary Bootloader (SBL1) |
| sbl1bak | 197632 | 512 KB | — | SBL1-Backup |
| aboot | 198656 | 1 MB | — | Android-/LK-Bootloader (aboot) |
| abootbak | 200704 | 1 MB | — | aboot-Backup |
| rpm | 202752 | 512 KB | — | Resource Power Manager Firmware |
| rpmbak | 203776 | 512 KB | — | RPM-Backup |
| tz | 204800 | 512 KB | — | TrustZone (Secure World) |
| tzbak | 205824 | 512 KB | — | TrustZone-Backup |
| hyp | 206848 | 512 KB | — | Hypervisor |
| hypbak | 207872 | 512 KB | — | Hypervisor-Backup |
| pad | 208896 | 1 MB | — | Padding/Reserve |
| modemst1 | 210944 | 1.5 MB | — | Modem-NV-Speicher 1 (IMEI/Kalibrierung) |
| modemst2 | 214016 | 1.5 MB | — | Modem-NV-Speicher 2 |
| misc | 217088 | 1 MB | — | Boot-Mode-Flags (misc) |
| fsc | 219136 | 1 KB | — | Modem-FS-Cookie |
| ssd | 219138 | 8 KB | — | Secure Storage (SSD) |
| splash | 219154 | 10 MB | — | Boot-Logo |
| DDR | 262144 | 32 KB | — | DDR-Trainingsdaten |
| fsg | 262208 | 1.5 MB | — | Modem-Dateisystem (NV/Provisioning) |
| sec | 265280 | 16 KB | — | Security/Fuse-Daten |
| boot | 265312 | 16 MB | — | Kernel + Ramdisk (Boot-Image, DTB angehängt) |
| system | 298080 | 800 MB | — | Root-Dateisystem (Android system / Debian rootfs) |
| persist | 1936480 | 32 MB | — | Persistente Sensor-/Kalibrierungsdaten |
| cache | 2002016 | 128 MB | — | Cache |
| recovery | 2264160 | 16 MB | — | Recovery-Image |
| oem | 2296928 | 10 MB | — | OEM-Partition |
| userdata | 2317408 | ≈2.47 GB | — | Nutzerdaten (größte Partition) |
/lib/firmwareDer Punkt, an dem die meisten hängenbleiben: ohne die passenden Firmware-Dateien registriert sich das Modem unter Linux nicht.
Aus dem Stock-Android: /firmware/image/ (Android 4.4.4) per ADB ziehen — alternativ aus der gesicherten modem-Partition (modem.bin) des EDL-Backups.
# 58 Firmware-Dateien (Stock-Dump): # modem.* – 22 (modem.mdt + modem.b00 … Baseband-DSP) # wcnss.* – 9 (WLAN/Bluetooth, WCN3620) # cmnlib.* – 5 (Common Library) # keymaste.* – 5 (Keymaster) # isdbtmm.* – 5 (ISDB-T Multimedia) # playread.* – 5 (PlayReady DRM) # widevine.* – 5 (Widevine DRM) # modem_pr – 1 # mba.mbn – 1 (Modem Boot Authenticator)
Beide spielen dieselben Dateien nach /lib/firmware/ ein. Weg A ist am einfachsten, solange Stock-Android noch läuft; Weg B braucht nur das EDL-Backup.
Weg A — aus Stock-Android (ADB)
# Android läuft, ADB aktiv — Firmware-Ordner ziehen: adb pull /firmware/image/ firmware-backup/image/ # auf dem Debian-Stick einspielen: sudo cp firmware-backup/image/* /lib/firmware/ sudo systemctl restart ModemManager
Weg B — aus der gesicherten modem-Partition
# modem-Partition aus dem EDL-Backup (siehe 0x01): edl r modem modem.img --memory=emmc # Image read-only loopback mounten und Firmware kopieren: mkdir -p modem_mnt sudo mount -o loop,ro modem.img modem_mnt sudo cp modem_mnt/image/* /lib/firmware/ sudo umount modem_mnt
Hinweis: genauen Zielpfad bzw. Datei-Layout (z. B. ein image/-Unterordner) an dein Setup anpassen — der Einspiel-Schritt war im Repo nur Prosa, die Quelldateien sind verbatim.
/lib/firmware → Modem registriert sich nicht. Zusätzlich macht der Q6/remoteproc ~30 s nach dem Boot einen absichtlichen Reset (ModemManager verliert den QMI-Port); Fix: modem-fix.service startet ModemManager nach 45 s neu (seit v6.0).
Erst wenn das Backup steht. Das Flashen läuft im Fastboot-Modus — flash.sh sichert intern zuerst die NV-Partitionen und schreibt dann Bootloader, rootfs und boot.
# Im Fastboot-Modus (siehe 0x00). OpenStick-Release laden, entpacken, flashen: wget https://download.wvthoog.nl/projects/security/openstick/openstick-uz801-v3.0.zip cd OpenStick/flash/ ./flash.sh
Verwendetes Device-Tree (DTB): das DT ist im boot.img an das Kernel-zImage angehängt — es wird kein separates DTB-File geflasht. Custom-Kernel-Builds kompilieren msm8916-uz801-v3.dtb bzw. msm8916-handsome-openstick-uz801.dtb. (Ein fy-mf800.dtb existiert nicht — fy-mf800 ist nur ein Foto-Ordner.)
Stick einstecken, einloggen, LTE aktivieren.
ssh user@192.168.200.1 # USB (RNDIS), Standard ssh user@192.168.100.1 # WLAN-AP (SSID 4G-UFI-XX, PSK 1234567890) # Standard-Passwort des Users: 1
# NetworkManager bringt ein vorbereitetes Profil „lte" mit: sudo nmcli connection modify lte gsm.apn <your_apn> sudo nmcli connection up lte # prüfen: sudo mmcli -m 0 ip a show wwan0 # optional, falls SIM-PIN gesetzt: sudo nmcli connection modify lte gsm.pin <your_pin>
Wenn der Stick nicht mehr bootet: in EDL gehen (0x00) und das Backup zurückschreiben.
# Voll-Restore (Backup zurückschreiben): edl wf uz801-stock.bin # oder einzeln, z. B. boot: edl w boot boot.img # Modem-NV mit den Originalen dieses Sticks zurück (erhält IMEI): edl w modemst1 uz801_stock/modemst1.bin edl w modemst2 uz801_stock/modemst2.bin edl w fsg uz801_stock/fsg.bin edl w fsc uz801_stock/fsc.bin edl reset
„Das EDL-Backup vor dem ersten Flashen ist keine Empfehlung, sondern die Bedingung." — jeder, der schon mal einen Stick gebrickt hat