
kexec를 통해 루팅된 LG webOS TV에서 커스텀 Linux 커널을 부팅하며, 리버스 엔지니어링된 SoC 워치독 지원, 프레임버퍼 페이로드 및 initramfs 커널 빌드 흐름을 포함합니다.
kexec를 통해 루팅된 LG webOS TV에서 커스텀 Linux 커널 부팅 — RAM에서 실행, secure-boot 우회 없음.
상태: 작업 진행 중. 커스텀 커널을 스테이징하여 userspace에 도달할 수 있지만, 아직 사용 가능한 OS로 유지되지는 않습니다.
LG 50UP81009LR (webOS 6.5, Realtek RTD2875, armv7l). Homebrew Channel로 루팅됨; 스톡 서명 커널 + webOS userspace는 그대로 유지됩니다.
kexec -l이 (스톡 또는 소스 빌드) 커널을 스테이징하며, /sys/kernel/kexec_loaded가 1로 바뀝니다.kexec -e가 실행 중인 커널을 교체합니다 (이후 TV는 스톡으로 리셋됩니다)./sbin/init이 실제 코드를 실행했습니다.startup.sh에서 실행됩니다 — 서명된 부트로더 / ATF / OP-TEE는 절대 건드리지 않습니다.리셋의 원인은 SoC watchdog (TC 블록)입니다. 스톡 커널의 micom_wdt_thread()가 세 개의 레지스터 쓰기로 이를 막아둡니다 (drivers/rtk_kdriver/platform/tv006/intmicom.c):
TCWCR @ 0xFE062204 <- 0xA5 // unlock
TCWOV @ 0xFE062210 <- 0x0FFFFFFF // max overflow => huge timeout
TCWTR @ 0xFE062208 <- 0x01 // kick
kexec 상태에서 드라이버의 raw *(volatile*)0xFE062208 = 0x01은 매핑되지 않은 VA에 기록되어 조용히 무시되므로 SoC watchdog이 작동합니다 (~10–21초). micom-pet.c는 이제 userspace에서 /dev/mem (CONFIG_DEVMEM=y)을 통해 동일한 쓰기를 수행하며 이는 올바르게 매핑됩니다. 추가로 심층 방어 차원에서 /dev/sys-intmicom에 0xB1 keepalive를 보냅니다.
상태: micom-pet.c 재작성 완료, musl 툴체인으로 컴파일되며, 실기기에서 5초간의 무해한 스모크 테스트로 실행 및 breadcrumb 기록(0x52455814 = "REX"+beat)을 확인했습니다. 남은 유일한 검증은 ~21초를 넘겨 유지되는 kexec -e 부팅입니다 — 이는 TV를 재부팅하므로 입회 상태로 진행해야 하는 테스트입니다.
wlan 모듈이 로드되려면 vermagic이 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)
전원 차단 = 스톡 복귀. 벽돌이 될 수 없습니다.
이 저장소의 대부분은 Rex(AI 코딩 에이전트 인스턴스)가 사람이 자신의 거실에서 자신의 TV를 조작하는 것을 돕는 과정에서 만들어졌습니다. AI가 kexec PoC, 부트 체인, framebuffer canary, 그리고 이 리버스 엔지니어링 문서를 작성했습니다. 하지만 이 README의 주장은 언제나 사람이 TV를 켜고 화면을 확인한 후에만 기록되었습니다. 실제 하드웨어의 화면/사진/업타임 확인으로 뒷받침되지 않는 주장은 여기에 없습니다.
이 저장소를 만드는 과정에서 벽돌이 된 TV는 없습니다. 일부는 일시적으로 혼란스러웠을 뿐입니다 (watchdog pet이 없는 kexec 커널은 약 15초 후 TV를 리셋합니다), 이후 전원 사이클로 스톡에 복귀했습니다. /tmp는 모든 리셋 때마다 지워지므로 TV는 우리가 한 모든 것을 잊어버립니다 — 그것이 바로 핵심입니다.
rexos/ — 커스텀 OS: 부트 훅, 커널 빌드, initramfs, RexBus 스텁.kexec-poc/ — 로드 전용 개념 증명 + framebuffer canary 페이로드.docs/ — 리버스 엔지니어링 문서 (boot/security, SAM 앱 로딩, surface map, luna2 스키마).다음 단계는 정확히 동일한 하드웨어에서 우리가 수행한 작업을 재현합니다. 조작된 것은 없습니다.
192.168.2.103입니다. 다르면 수정하세요.KERNEL_SRC=/path/to/linux-4.4.3 설정 (LG 오픈소스 사이트에서 03.53.45 K7LP GPL tarball 다운로드), 또는 ~/lgtv-toolkit/kernel-src/kernel/linux-4.4.3에 심링크.kexec 빌드 (TV 불필요, 약 2분)git clone https://github.com/ggfuchsi-oss/lg-webos-kexec
cd lg-webos-kexec/kexec-poc && ./build.sh
예상 결과: kexec-arm에 정적 ARM kexec 바이너리 생성 (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
이 과정은 TV 자신의 현재 커널을 kexec로 스테이징한 후 즉시 언로드합니다. /sys/kernel/kexec_loaded가 1로 바뀌었다가 다시 0으로 돌아갑니다. 재부팅 없음, 커널 전환 없음, 영속되는 것 없음. 플러그를 뽑으면 스톡으로 복귀합니다.
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 이후 새 커널은 userspace에 도달하지만 micom/SOC watchdog이 pet되지 않아 약 10–21초 후 TV가 리셋됩니다. 이것은 크래시 버그가 아니라 현재의 벽입니다. rexos/initramfs/micom-pet.c가 이 문제를 해결할 데몬입니다 (아직 연결 중).kexec-poc/canary/ 참조). 실제 그래픽은 VCPU RPC 경로가 필요합니다 (미구현).이 저장소에는 소스 + 문서 + TV에서 캡처한 빌드 입력물 (커널 .config, wifi 모듈 + 펌웨어, rootfs 라이브러리)이 포함되어 있지만, 약 390MB의 LG K7LP GPL 커널 소스 트리 자체는 포함되어 있지 않습니다 — 그것은 LG가 배포할 것이며 우리가 재호스팅할 것이 아닙니다.
커널 트리가 없으면 make는 명확한 KERNEL_SRC missing 오류와 함께 실패합니다 — 조용히 반쯤 빌드되는 일은 없습니다.
우리가 아는 한, 이것은 LG webOS TV를 위한 최초의 공개 kexec 기반 커스텀 커널 부팅입니다. 프리미티브(kexec, 루팅된 webOS, RTD2875)는 각각 이미 알려져 있지만, 이 잠긴 소비자 TV에의 적용은 새로운 것으로 보입니다. 우리는 secure-boot 우회를 주장하는 것이 아닙니다 — 우리는 이를 비켜갑니다.
GPL-2.0 (커널 작업물; LG의 GPL 커널 소스는 GPL입니다). 우리의 스크립트는 GPL 호환입니다. 업스트림 저작자 표기는 CREDITS를 참조하세요.
| 의존성 | 획득 방법 |
|---|
LG K7LP GPL linux-4.4.3 (RTD2875) | LG 오픈소스 사이트 → 03.53.45 K7LP GPL tarball → kernel |
| musl armv7 크로스 툴체인 (~98 MB) | kexec-poc/build.sh가 자동으로 가져옴 (자체 포함) |
| 루팅된 TV (50UP81009LR) | 처음에만 필요하며 .config 캡처용으로만 사용 — 하지만 해당 설정은 이제 rexos/kernel/rexos-tv.config에 커밋되어 있으므로 클론만으로 오프라인 빌드 가능 |