
يشغّل نواة لينكس مخصصة على تلفزيونات LG webOS المجذَّرة عبر kexec، مع دعم مقلوب الهندسة لمراقب نظام SoC، وحمولات framebuffer، وسير عمل بناء نواة initramfs.
قم بتشغيل نواة Linux مخصّصة على تلفاز LG webOS مُجذَّر عبر kexec — في الذاكرة RAM، دون تجاوز الإقلاع الآمن.
الحالة: قيد التطوير. يمكن تجهيز نواة مخصّصة وتصل إلى فضاء المستخدم، لكنها لا تبقى بعدُ كنظام تشغيل قابل للاستخدام.
LG 50UP81009LR (webOS 6.5, Realtek RTD2875, armv7l). مُجذَّر عبر Homebrew Channel؛ النواة الموقّعة الأصلية وبيئة webOS تبقيا دون أيّ تعديل.
kexec -l يجهّز نواة (أصلية أو مبنية من المصدر)؛ يتحوّل /sys/kernel/kexec_loaded إلى 1.kexec -e يستبدل النواة قيد التشغيل (يعود التلفاز إلى الحالة الأصلية بعد ذلك)./sbin/init نفّذ كودًا حقيقيًا.startup.sh — مُحمّل الإقلاع الموقّع / ATF / OP-TEE لا تُلمس أبدًا.إعادة التشغيل هي كلب حراسة SoC (كتلة 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، تقع *(volatile*)0xFE062208 = 0x01 الخام في المُشغِّل على عنوان افتراضي غير مُعيَّن وتُعدّ عملية صامتة بلا تأثير، لذلك ينطلق كلب حراسة SoC (بعد ~10–21 ثانية). الآن يقوم micom-pet.c بنفس اللمسات من فضاء المستخدم عبر /dev/mem (CONFIG_DEVMEM=y)، وهو ما يُعيَّن بشكل صحيح، بالإضافة إلى رسالة إبقاء على الحياة 0xB1 إلى /dev/sys-intmicom كدفاع مُعمَّق.
الحالة: أُعيدت كتابة micom-pet.c، وتُترجم مع سلسلة أدوات musl، واختبار دخان آمن لمدة 5 ثوانٍ على التلفاز الحي أكّد أنه يعمل ويكتب أثره (0x52455814 = "REX"+نبضة). الدليل الوحيد المتبقي هو إقلاع kexec -e يبقى قائمًا بعد ~21 ثانية — وهذا يعيد تشغيل التلفاز، لذا فهو اختبار بحضور شخص.
wlan الأصلية مع 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 — وهي نسخة من وكيل برمجة بالذكاء الاصطناعي — لمساعدة إنسان على العمل على تلفازه الخاص، في غرفة معيشته الخاصة. كتب الذكاء الاصطناعي إثبات المفهوم kexec، وسلسلة الإقلاع، وحمولات الكناري على إطار العرض، والتقارير الهندسية العكسية هذه. لكن الادعاءات في هذا README لم تُذكر أبدًا إلا بعد أن شغّل الإنسان التلفاز، ونظر إلى الشاشة، وتأكد من ذلك. إذا لم يكن الادعاء مدعومًا بفحص حقيقي للشاشة/صورة/وقت التشغيل من العتاد، فهو غير مذكور هنا.
لم يُتلف أي تلفاز في صنع هذا المستودع. بعضها أصيب بارتباك مؤقت (نواة kexec دون إطعام كلب الحراسة تعيد تشغيل جهازك بعد ~15 ثانية)، ثم أُعيد تشغيلها كهربائيًا لتعود إلى الحالة الأصلية. يتم مسح /tmp مع كل إعادة تشغيل، لذلك ينسى التلفاز كل ما فعلناه — هذا هو بيت القصيد.
rexos/ — نظام التشغيل المخصّص: خطاف الإقلاع، بناء النواة، initramfs، واجهة RexBus.kexec-poc/ — إثبات المفهوم للتحميل فقط + حمولات الكناري على إطار العرض.docs/ — تقارير الهندسة العكسية (الإقلاع/الأمان، تحميل تطبيقات SAM، خريطة الأسطح، مخطط luna2).هذه الخطوات تعيد إنتاج ما فعلناه، على العتاد نفسه. لا شيء مُزيَّف.
192.168.2.103 في الأوامر أدناه؛ عدّله إذا كان جهازك مختلفًا.KERNEL_SRC=/path/to/linux-4.4.3 (حمّل أرشيف 03.53.45 K7LP GPL من موقع LG مفتوح المصدر)، أو اعمل رابطًا رمزيًا ~/lgtv-toolkit/kernel-src/kernel/linux-4.4.3.kexec الثابت (لا يحتاج تلفازًا، ~دقيقتان)git clone https://github.com/ggfuchsi-oss/lg-webos-kexec
cd lg-webos-kexec/kexec-poc && ./build.sh
المتوقع: ملف ثنائي ARM ثابت kexec عند kexec-arm (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 ثم يفرّغها فورًا. يتحوّل /sys/kernel/kexec_loaded إلى 1 ثم يعود إلى 0. لا إعادة تشغيل، لا تبديل نواة، لا شيء يبقى. اسحب الكهرباء = الحالة الأصلية.
افعل هذا فقط مع تشغيل التلفاز ووجود شخص:
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، تصل النواة الجديدة إلى فضاء المستخدم لكن التلفاز يُعاد تشغيله بعد ~10–21 ثانية لأن كلب حراسة micom/SOC لا يُطعَم. هذا هو الجدار الحالي، وليس خطأ تعطّل. rexos/initramfs/micom-pet.c هو البرنامج الخفي المصمم لإصلاح هذا (ما زلنا نوصّله).kexec-poc/canary/). الرسوميات الحقيقية تحتاج مسار RPC الخاص بـ VCPU (لم يُنجز).يحتوي هذا المستودع على المصدر + التوثيق + مدخلات البناء الملتقطة من التلفاز (.config النواة، وحدة واي فاي + البرنامج الثابت، مكتبات rootfs)، لكنه لا يحتوي على شجرة مصدر نواة LG K7LP GPL نفسها (~390 MB) — تلك ملك لتوزيع LG، وليست لنا لإعادة استضافتها.
سيفشل make برسالة واضحة KERNEL_SRC missing إذا لم تكن شجرة النواة موجودة — لا يوجد بناء نصف صامت.
بقدر ما نعلم، هذا هو أول إقلاع علني لنواة مخصّصة عبر kexec لتلفاز LG webOS. اللبنات الأولية (kexec، webOS مُجذَّر، RTD2875) كلها معروفة بشكل فردي؛ لكن تطبيقها على هذا التلفاز الاستهلاكي المُقيَّد يبدو جديدًا. نحن لا ندّعي تجاوز الإقلاع الآمن — نحن نلتفّ حوله.
GPL-2.0 (عمل النواة؛ شفرة مصدر نواة GPL من LG هي GPL). سكربتاتنا متوافقة مع GPL. انظر CREDITS للإسناد إلى المصادر العليا.
| التبعية | كيف تحصل عليها |
|---|
LG K7LP GPL linux-4.4.3 (RTD2875) | موقع LG مفتوح المصدر → أرشيف 03.53.45 K7LP GPL → kernel |
| سلسلة أدوات musl armv7 المتقاطعة (~98 MB) | تُجلب تلقائيًا بواسطة kexec-poc/build.sh (مكتفية ذاتيًا) |
| تلفاز مُجذَّر (50UP81009LR) | لازم في المرة الأولى فقط لالتقاط .config — لكن هذا الإعداد أصبح الآن مُلتزمًا في rexos/kernel/rexos-tv.config، لذا يمكن للاستنساخ البناء دون اتصال |