
रूट किए गए LG webOS TVs पर kexec के माध्यम से एक कस्टम Linux कर्नेल बूट करता है, साथ ही रिवर्स-इंजीनियर्ड SoC वॉचडॉग समर्थन, फ्रेमबफर पेलोड और एक initramfs कर्नेल बिल्ड फ्लो भी शामिल है।
एक रूटेड LG webOS TV पर kexec के ज़रिए कस्टम Linux kernel बूट करें — RAM में, बिना secure-boot bypass के।
स्थिति: कार्य प्रगति पर। एक कस्टम kernel स्टेज किया जा सकता है और userspace तक पहुँचता है, लेकिन यह अभी तक उपयोग योग्य OS के रूप में नहीं टिकता।
LG 50UP81009LR (webOS 6.5, Realtek RTD2875, armv7l)। Homebrew Channel के ज़रिए रूटेड; stock signed kernel + webOS userspace अछूते रहते हैं।
kexec -l एक (stock या source-से बना) kernel स्टेज करता है; /sys/kernel/kexec_loaded 1 हो जाता है।kexec -e चल रहे kernel को बदल देता है (TV उसके बाद stock पर रीसेट हो जाता है)।/sbin/init ने असली कोड चलाया।startup.sh से चलती है — signed bootloader / ATF / OP-TEE कभी नहीं छुए जाते।रीसेट SoC watchdog (TC block) के कारण होता है। Stock kernel का micom_wdt_thread()
तीन register pokes से इसे रोके रखता है (drivers/rtk_kdriver/platform/tv006/intmicom.c):
TCWCR @ 0xFE062204 <- 0xA5 // unlock
TCWOV @ 0xFE062210 <- 0x0FFFFFFF // max overflow => huge timeout
TCWTR @ 0xFE062208 <- 0x01 // kick
kexec के अंतर्गत driver का raw *(volatile*)0xFE062208 = 0x01 एक unmapped
VA पर पड़ता है और चुपचाप no-op रहता है, जिससे SoC watchdog फायर हो जाता है (~10–21 s)। micom-pet.c अब
userspace से /dev/mem (CONFIG_DEVMEM=y) के ज़रिए वही pokes करता है, जो सही ढंग से
map होता है, साथ ही defense-in-depth के रूप में /dev/sys-intmicom पर एक 0xB1 keepalive भी भेजता है।
Status: micom-pet.c फिर से लिखा गया, musl toolchain के साथ compile होता है, और लाइव TV पर
5 s के हानिरहित smoke test ने पुष्टि की कि यह चलता है और अपना breadcrumb लिखता है
(0x52455814 = "REX"+beat)। बचा हुआ एकमात्र प्रमाण एक kexec -e बूट है जो
~21 s से अधिक टिका रहे — यह TV को reboot करता है, इसलिए यह एक attended test है।
wlan module का vermagic load होने के लिए CONFIG_LOCALVERSION="" से मेल खाना चाहिए; अभी initramfs में नहीं जोड़ा गया।boot ROM → ATF → signed LG kernel (~2 s) → startup.sh
→ kexec -l <our zImage + dtb + initramfs>
→ kexec -e
→ OUR kernel runs in RAM (no eMMC writes)
बिजली काटो = stock। यह brick नहीं हो सकता।
इस repo का अधिकांश हिस्सा Rex — एक AI coding-agent इंस्टेंस — ने एक इंसान को उनके अपने TV पर, उनके अपने लिविंग रूम में काम करने में मदद करते हुए तैयार किया। AI ने kexec PoC, boot chain, framebuffer canaries और ये RE writeups लिखे। लेकिन इस README के दावे हमेशा बाद में किए गए जब इंसान ने TV चालू किया, स्क्रीन देखी और उसकी पुष्टि की। अगर कोई दावा hardware से वास्तविक screen/photo/uptime जाँच पर आधारित नहीं है, तो वह यहाँ नहीं है।
इस repo को बनाते समय कोई TV brick नहीं हुआ। कुछ अस्थायी रूप से भ्रमित हुए (बिना watchdog pet वाला kexec'd kernel ~15 s बाद आपका box रीसेट कर देता है), फिर power-cycle करके stock पर वापस आ गए। हर रीसेट पर /tmp wiped हो जाता है, इसलिए TV हमारे द्वारा किया गया सब कुछ भूल जाता है — यही पूरी बात है।
rexos/ — कस्टम OS: boot hook, kernel build, initramfs, RexBus stub।kexec-poc/ — केवल-load proof-of-concept + framebuffer canary payloads।docs/ — reverse-engineering writeups (boot/security, SAM app loading, surface map, luna2 schema)।ये चरण हमने ठीक उसी hardware पर जो किया, उसे दोहराते हैं। कुछ भी नकली नहीं है।
192.168.2.103 है; अगर आपका अलग है तो बदल लें।KERNEL_SRC=/path/to/linux-4.4.3 सेट करें (LG open-source से 03.53.45 K7LP GPL tarball डाउनलोड करें), या ~/lgtv-toolkit/kernel-src/kernel/linux-4.4.3 का symlink बनाएँ।kexec बनाएँ (TV की ज़रूरत नहीं, ~2 मिनट)git clone https://github.com/ggfuchsi-oss/lg-webos-kexec
cd lg-webos-kexec/kexec-poc && ./build.sh
अपेक्षित: kexec-arm पर एक static ARM kexec binary (168K, file दिखाता है ELF 32-bit LSB ... ARM ... statically linked)।
cd ../kexec-poc
./run-poc.sh 192.168.2.103 ~/.ssh/tv_key
अपेक्षित परिणाम:
staged before : 0
staged after load : 1 <- kernel accepted, DTB wired, segments allocated
staged after unload: 0 <- cleared, TV untouched
यह kexec के ज़रिए TV के अपने वर्तमान kernel को स्टेज करता है और फिर तुरंत अनलोड कर देता है। /sys/kernel/kexec_loaded 1 होकर वापस 0 हो जाता है। कोई reboot नहीं, कोई kernel switch नहीं, कुछ भी स्थायी नहीं। प्लग खींचो = stock।
ऐसा केवल TV चालू रहते और कोई मौजूद रहते हुए करें:
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)
चरण 3 की ईमानदार चेतावनियाँ (छिपाए गए बग नहीं):
kexec -e के बाद, नया kernel userspace तक पहुँचता है, लेकिन TV ~10–21 s बाद रीसेट हो जाता है क्योंकि micom/SOC watchdog को pet नहीं किया जा रहा। यही वर्तमान दीवार है, कोई crash bug नहीं। rexos/initramfs/micom-pet.c इसका समाधान करने वाला daemon है (अभी इसे जोड़ा जा रहा है)।kexec-poc/canary/)। असली graphics के लिए VCPU RPC path चाहिए (पूरा नहीं हुआ)।इस repo में source + docs + TV-से कैप्चर किए गए build inputs (kernel .config, wifi module + firmware, rootfs libs) शामिल हैं, लेकिन ~390 MB की LG K7LP GPL kernel source tree नहीं है — वह LG का वितरण है, हमारा re-host करना नहीं।
यदि kernel tree मौजूद नहीं है तो make स्पष्ट KERNEL_SRC missing त्रुटि के साथ विफल होगा — कोई silent half-build नहीं है।
जहाँ तक हम बता सकते हैं, यह LG webOS TV के लिए पहला सार्वजनिक kexec-आधारित custom-kernel बूट है। सभी primitives (kexec, रूटेड webOS, RTD2875) अलग-अलग रूप से ज्ञात हैं; इस locked-down consumer TV पर अनुप्रयोग नया प्रतीत होता है। हम secure-boot bypass का दावा नहीं कर रहे हैं — हम उसे sidestep करते हैं।
GPL-2.0 (kernel कार्य; LG का GPL kernel source GPL है)। हमारी scripts GPL-compatible हैं। upstream attribution के लिए CREDITS देखें।
| निर्भरता | इसे कैसे प्राप्त करें |
|---|
LG K7LP GPL linux-4.4.3 (RTD2875) | LG opensource साइट → 03.53.45 K7LP GPL tarball → kernel |
| musl armv7 cross-toolchain (~98 MB) | kexec-poc/build.sh द्वारा ऑटो-fetch (self-contained) |
| एक रूटेड TV (50UP81009LR) | पहली बार केवल .config कैप्चर करने के लिए चाहिए — लेकिन वह config अब rexos/kernel/rexos-tv.config पर committed है, इसलिए एक clone ऑफलाइन build कर सकता है |