Praxis-Guide

Vom 8-Dollar-Stick zum Debian-Server — der nachbaubare Weg

Sichern, flashen, verbinden. Erst Backup, dann Mut.

runterscrollen

Schnellstart

Fünf Schritte. Jeder führt zum passenden Detail-Abschnitt — keine Sackgassen.

1
Modus
ADB → Fastboot → EDL 9008 verstehen.
→ 0x00 Modi
2
Backup
Voll-Dump + boot/modem einzeln sichern.
→ 0x01 Backup
3
Modem-FW
Firmware retten, später nach /lib/firmware.
→ 0x02 Modem-FW
4
Flashen
Debian-Image schreiben.
→ 0x03 Flashen
5
Verbinden
SSH, LTE/APN, fertig.
→ 0x04 Verbinden
0x00

Die drei Modi: ADB · Fastboot · EDL

Bevor irgendetwas geschrieben wird: Wie kommst du in welchen Modus, wie sieht der Host-PC das Gerät, und wofür ist es da?

ModusWie reinkommenHost-PC siehtWofü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
Reihenfolge: EDL ist der Rettungsanker — alles, was du in EDL sichern kannst, kannst du in EDL auch zurückschreiben. Deshalb gilt: erst vollständiges Backup ziehen (0x01), dann erst flashen.
# 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
0x01

Backup zuerst — drei Granularitäten

Vom „alles auf einmal" bis zum chirurgischen Einzelzug. Lege die Dateien sicher ab — sie sind deine Rückfahrkarte.

Voll-Dump (die Versicherung)

# Voll-Dump aller Partitionen in eine Datei (~3.7 GB)
edl rf uz801-stock.bin

boot-Partition einzeln

# boot-Partition einzeln lesen
python edl r boot boot.img

modem + NV (die „extra Dateien")

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

Partitionstabelle (Referenz)

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).

NameOffsetGrößeFlagsZweck
modem6553664 MBModem-Firmware (NON-HLOS)
sbl1196608512 KBSecondary Bootloader (SBL1)
sbl1bak197632512 KBSBL1-Backup
aboot1986561 MBAndroid-/LK-Bootloader (aboot)
abootbak2007041 MBaboot-Backup
rpm202752512 KBResource Power Manager Firmware
rpmbak203776512 KBRPM-Backup
tz204800512 KBTrustZone (Secure World)
tzbak205824512 KBTrustZone-Backup
hyp206848512 KBHypervisor
hypbak207872512 KBHypervisor-Backup
pad2088961 MBPadding/Reserve
modemst12109441.5 MBModem-NV-Speicher 1 (IMEI/Kalibrierung)
modemst22140161.5 MBModem-NV-Speicher 2
misc2170881 MBBoot-Mode-Flags (misc)
fsc2191361 KBModem-FS-Cookie
ssd2191388 KBSecure Storage (SSD)
splash21915410 MBBoot-Logo
DDR26214432 KBDDR-Trainingsdaten
fsg2622081.5 MBModem-Dateisystem (NV/Provisioning)
sec26528016 KBSecurity/Fuse-Daten
boot26531216 MBKernel + Ramdisk (Boot-Image, DTB angehängt)
system298080800 MBRoot-Dateisystem (Android system / Debian rootfs)
persist193648032 MBPersistente Sensor-/Kalibrierungsdaten
cache2002016128 MBCache
recovery226416016 MBRecovery-Image
oem229692810 MBOEM-Partition
userdata2317408≈2.47 GBNutzerdaten (größte Partition)
0x02

Modem-Firmware → /lib/firmware

Der Punkt, an dem die meisten hängenbleiben: ohne die passenden Firmware-Dateien registriert sich das Modem unter Linux nicht.

Woher die Dateien kommen

Aus dem Stock-Android: /firmware/image/ (Android 4.4.4) per ADB ziehen — alternativ aus der gesicherten modem-Partition (modem.bin) des EDL-Backups.

Welche Dateien

# 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)

In Debian einsetzen — zwei Wege

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.

Gotcha: Unvollständige /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).
0x03

Debian flashen

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.

Vorher: Backup aus 0x01 vorhanden? Falsches Image kann das Gerät softbricken. Recovery-Weg liegt in 0x05.
# 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.)

0x04

Verbinden & Internet

Stick einstecken, einloggen, LTE aktivieren.

SSH

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

LTE / APN

# 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>
0x05

Recovery / Brick zurückholen

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