
Startet einen benutzerdefinierten Linux-Kernel auf gerooteten LG-webOS-TVs über kexec, mit reverse-engineerter SoC-Watchdog-Unterstützung, Framebuffer-Payloads und einem Initramfs-Kernel-Build-Ablauf.
Boote einen eigenen Linux-Kernel auf einem gerooteten LG-webOS-TV per kexec — im RAM, ohne Secure-Boot-Bypass.
Status: Work-in-Progress. Ein eigener Kernel kann gestaged werden und erreicht den Userspace, bleibt aber noch nicht als nutzbares OS aktiv.
LG 50UP81009LR (webOS 6.5, Realtek RTD2875, armv7l). Gerootet per Homebrew Channel; der signierte Stock-Kernel und der webOS-Userspace bleiben unangetastet.
kexec -l staged einen Kernel (Stock oder aus dem Quellcode); /sys/kernel/kexec_loaded wechselt auf 1.kexec -e ersetzt den laufenden Kernel (der TV setzt danach auf Stock zurück)./sbin/init hat echten Code ausgeführt.startup.sh von webOS — der signierte Bootloader / ATF / OP-TEE werden nie angefasst.Der Reset kommt vom SoC-Watchdog (TC-Block). Der micom_wdt_thread() des Stock-Kernels
hält ihn mit drei Register-Zugriffen in Schach (drivers/rtk_kdriver/platform/tv006/intmicom.c):
TCWCR @ 0xFE062204 <- 0xA5 // unlock
TCWOV @ 0xFE062210 <- 0x0FFFFFFF // max overflow => huge timeout
TCWTR @ 0xFE062208 <- 0x01 // kick
Unter kexec landet das rohe *(volatile*)0xFE062208 = 0x01 des Treibers auf einer nicht
gemappten virtuellen Adresse und ist ein stiller No-Op, wodurch der SoC-Watchdog auslöst (~10–21 s). micom-pet.c führt dieselben Zugriffe jetzt aus dem Userspace über /dev/mem (CONFIG_DEVMEM=y) aus, was korrekt mappt, plus ein 0xB1-Keepalive an /dev/sys-intmicom als Defense-in-Depth.
Status: micom-pet.c neu geschrieben, kompiliert mit dem musl-Toolchain, und ein 5-Sekunden-Smoke-Test auf dem Live-TV hat bestätigt, dass es läuft und seine Brotkrumen schreibt (0x52455814 = "REX"+Beat). Der einzige fehlende Beweis ist ein kexec -e-Boot, der länger als ~21 s oben bleibt — das startet den TV neu, ist also ein beaufsichtigter Test.
wlan-Modul muss in der Vermagic zu CONFIG_LOCALVERSION="" passen, um zu laden; noch nicht in das Initramfs eingebunden.boot ROM → ATF → signierter LG-Kernel (~2 s) → startup.sh
→ kexec -l <unser zImage + dtb + initramfs>
→ kexec -e
→ UNSER Kernel läuft im RAM (keine eMMC-Schreibvorgänge)
Netzstecker ziehen = Stock. Es kann nicht gebrickt werden.
Der größte Teil dieses Repos wurde von Rex zusammengestellt — einer KI-Coding-Agent-Instanz — die einem Menschen half, an seinem eigenen TV im eigenen Wohnzimmer zu arbeiten. Die KI hat den kexec-PoC, die Boot-Kette, die Framebuffer-Canaries und diese RE-Ausarbeitungen geschrieben. Aber die Behauptungen in dieser README wurden immer erst aufgestellt, nachdem der Mensch den TV eingeschaltet, auf den Bildschirm geschaut und es bestätigt hat. Wenn eine Behauptung nicht durch einen echten Screen-/Foto-/Uptime-Check der Hardware gestützt ist, steht sie nicht hier.
Beim Erstellen dieses Repos wurde kein TV gebrickt. Einige waren kurzzeitig verwirrt (ein gekexecter Kernel ohne Watchdog-Pet setzt die Box nach ~15 s zurück), wurden dann aber per Netzstecker zurück auf Stock gebracht. /tmp wird bei jedem Reset gelöscht, also vergisst der TV alles, was wir getan haben — genau das ist der Punkt.
rexos/ — das eigene OS: Boot-Hook, Kernel-Build, Initramfs, RexBus-Stub.kexec-poc/ — der Load-only-Proof-of-Concept + Framebuffer-Canary-Payloads.docs/ — Reverse-Engineering-Ausarbeitungen (Boot/Security, SAM-App-Laden, Surface-Map, luna2-Schema).Diese Schritte reproduzieren das, was wir getan haben, auf genau dieser Hardware. Nichts ist gefälscht.
192.168.2.103; anpassen, falls deiner abweicht.KERNEL_SRC=/path/to/linux-4.4.3 setzen (das 03.53.45-K7LP-GPL-Tarball von LG Open Source herunterladen) oder ~/lgtv-toolkit/kernel-src/kernel/linux-4.4.3 verlinken.kexec bauen (kein TV nötig, ~2 Min.)git clone https://github.com/ggfuchsi-oss/lg-webos-kexec
cd lg-webos-kexec/kexec-poc && ./build.sh
Erwartet: ein statisches ARM-kexec-Binary unter kexec-arm (168K, file zeigt ELF 32-bit LSB ... ARM ... statically linked).
cd ../kexec-poc
./run-poc.sh 192.168.2.103 ~/.ssh/tv_key
Erwartetes Ergebnis:
staged before : 0
staged after load : 1 <- kernel accepted, DTB wired, segments allocated
staged after unload: 0 <- cleared, TV untouched
Das staged den eigenen aktuellen Kernel des TVs per kexec und entlädt ihn sofort wieder. /sys/kernel/kexec_loaded wechselt auf 1 und dann zurück auf 0. Kein Neustart, kein Kernel-Wechsel, nichts bleibt erhalten. Netzstecker ziehen = Stock.
Nur durchführen, wenn der TV an ist und jemand anwesend ist:
cd ../rexos
make # builds rexos-kernel.zImage + rexos-initramfs.cpio.gz into out/
./boot/rexos-kexec --load-only # stage, do NOT fire (same safe state as step 2)
# then, when ready to actually jump:
./boot/rexos-kexec # kexec -e -> our kernel runs in RAM (TV will reset)
Bekannte ehrliche Einschränkungen bei Schritt 3 (keine versteckten Bugs):
kexec -e erreicht der neue Kernel den Userspace, aber der TV setzt nach ~10–21 s zurück, weil der Micom/SoC-Watchdog nicht gepetted wird. Das ist die aktuelle Hürde, kein Crash-Bug. rexos/initramfs/micom-pet.c ist der Daemon, der das beheben soll (noch nicht eingebunden).kexec-poc/canary/). Echte Grafik braucht den VCPU-RPC-Pfad (nicht erledigt).Dieses Repo enthält Quellcode + Doku + die vom TV erfassten Build-Inputs (Kernel-.config, WLAN-Modul + Firmware, Rootfs-Bibliotheken), aber nicht den ~390 MB großen LG-K7LP-GPL-Kernelquellbaum selbst — der gehört LG, nicht uns zum erneuten Hosten.
make schlägt mit einer klaren KERNEL_SRC missing-Meldung fehl, wenn der Kernelbaum nicht vorhanden ist — es gibt keinen stillen Halb-Build.
Soweit wir das beurteilen können, ist dies der erste öffentliche kexec-basierte Custom-Kernel-Boot für einen LG-webOS-TV. Die Bausteine (kexec, gerootetes webOS, RTD2875) sind einzeln alle bekannt; die Anwendung auf diesen abgesicherten Consumer-TV scheint neu zu sein. Wir behaupten keinen Secure-Boot-Bypass — wir umgehen ihn.
GPL-2.0 (Kernel-Arbeit; LGs GPL-Kernelquelle ist GPL). Unsere Skripte sind GPL-kompatibel. Siehe CREDITS für Upstream-Attribution.
| Abhängigkeit | Wie du sie bekommst |
|---|
LG-K7LP-GPL linux-4.4.3 (RTD2875) | LG-Open-Source-Seite → 03.53.45-K7LP-GPL-Tarball → kernel |
| musl-armv7-Cross-Toolchain (~98 MB) | automatisch geladen von kexec-poc/build.sh (in sich geschlossen) |
| Ein gerooteter TV (50UP81009LR) | nur beim ersten Mal nötig, um die .config zu erfassen — diese Config ist jetzt aber eingecheckt unter rexos/kernel/rexos-tv.config, ein Klon baut also offline |