Files
hisense-root/modding/01-system-linux.md
T
2026-10-27 15:56:27 +01:00

10 KiB
Raw Blame History

01 — System: Linux, SoC, Userland, Package Manager, Storage

Ziel: Hisense HE40E5600FFWTS, FW V0100.01.00A.N0410, LAN 192.168.188.94. Quelle: Live-Root-Reads am TV (/proc, /lib, /bin, /etc, Mounts) + statische Dumps. Status: Systemfakten CONFIRMED (live/static); einzelne Hardware-/Bootloader-Details UNVERIFIED.


1. Linux / Kernel

Linux version 3.18.25 (gfkfcmo@docker01.89.12045.pzgl.com)
(gcc version 4.8.2 20131014 (prerelease) (Linaro GCC 4.8-2013.10) )
#1 SMP PREEMPT Mon Apr 10 17:40:02 CST 2023
  • Kernel 3.18.25, ARM (32-bit), SMP, PREEMPT.
  • Gebaut mit Linaro GCC 4.8.2 (2013.10), Build 2023-04-10.
  • Kein Standard-Distro-Userland, kein /etc/os-release, kein /etc/issue, kein /etc/version.
  • Firmware-Kennung: V0100.01.00A.N0410.

Kernel-Cmdline (Auszug, /proc/cmdline)

rootwait rootfstype=squashfs ro console=ttyMT0,115200n1 vmalloc=512mb quiet
mtdparts=mt53xx-emmc:2M(ubootA),2M(ubootB),256k(bt_flag),256k(ra_data),
2M(uboot_envA),2M(uboot_envB),5M(kernelA),5M(kernelB),40M(rootfsA),40M(rootfsB),
256k(basic),8M(perm),205M(3rd_ro),1152M(rw_area),256k(reserved),1M(channelA),
1M(channelB),4M(pq),4M(aq),48M(logo),1M(acfg_descr),256k(part_21),4M(adsp),
256k(part_23),256k(part_24),1M(eeprom_A),1M(eeprom_B),8M(facset),1M(hiscfg),
2040M(data),1M(cidata),1M(dbdata),40M(spdata),100M(swapdt)
root=/dev/mmcblk0p9 usbportusing=1,1,1,0 ... adb_enable=0
androidboot.serialno=000018300ced9b74 ...
  • Bootmedium: eMMC (mmcblk0), MediaTek mt53xx-emmc-Partitionierung.
  • Rootfs: /dev/mmcblk0p9 (rootfsA), squashfs ro; A/B-Slots für U-Boot/Kernel/Rootfs.
  • /3rd: Device-Mapper dm-3, squashfs ro (~141 MB).
  • console=ttyMT0,115200n1: serielle Konsole existiert, ist aber nicht angeschlossen (kein Öffnen des TVs nötig).
  • adb_enable=0: kein ADB.
  • U-Boot-Env: fw_printenv meldet „Bad CRC, using default environment“ und zeigt nur einen NFS-Default (bootcmd=bootp...). Die echte Boot-Konfiguration ist die /proc/cmdline; das U-Boot-Env ist nicht verlässlich (UNVERIFIED im Detail).

CPU / SoC

/proc/cpuinfo:

model name : ARMv7 Processor rev 4 (v7l)
Features   : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU part        : 0xd03
CPU revision    : 4
  • ARMv7, Cortex-A53 (part 0xd03), NEON/VFPv4, Thumb-2.
  • SoC-Klasse: MediaTek MT53xx/MT5863 (Belege: mt53xx-emmc in cmdline; Browser-Build mt5863_sa_768_linux in run-Browser.sh; mt5863 im Build).
  • Exakte Kernanzahl aus dem Dump: processor 0..2 sichtbar; mt5863 ist 4×A53. Als 4 Kerne dokumentiert, exakter Count UNVERIFIED (der Dump war auf 28 Zeilen begrenzt).
  • GPU: ARM Mali (/3rd/Arm_Mali, /basic/lib/libMali.so, ins_arm_mali_mod.sh); die UI nutzt GLES (--hw-gles).

2. Userland

libc / Laufzeit

  • glibc 2.18:
    • /lib/ld-linux.so.3, /lib/ld-2.18.so
    • /lib/libc-2.18.so, libm-2.18.so, libdl-2.18.so, libpthread-2.18.so
    • /lib/libstdc++.so.6.0.18, libgcc_s.so.1
  • ABI: ARM EABI5, hard-float (VFPv4), Tag_ABI_align_needed: 8-byte.
  • Zusätzliche Libs: /basic/lib (libcrypto/ssl/curl/nss/…), /3rd/lib (libxml2/mxml/iconv/…), /3rd_rw/opera4xLib (Browser-Libs), /lib (glibc).
  • Dynamische Binaries brauchen die TV-glibc 2.18. Statisch ist der sichere Weg (siehe 06).

BusyBox / Shell

  • BusyBox 1.18.5 (Build 2017-12-05), multi-call.
  • Viele Applets sind nicht als Symlink vorhanden (uname, tr, tail, id fehlen z. B. als /bin/<name>); nutze:
    /bin/busybox uname -a
    /bin/busybox tail -n 10 /pfad
    /bin/busybox tr '\0' '\n' < /proc/.../environ
    
  • /bin/sh existiert (Shell), /bin/bash ebenfalls; /bin, /sbin, /usr/bin, /basic/bin gemischt.
  • Nützliche vorhandene Tools: mount, umount, insmod, mknod, mkfs.ext4, tar, sed, grep, awk, find, ping, nc? (nicht geprüft), ps, kill, reboot, fw_printenv, busybox.
  • Nicht vorhanden / nicht gebaut: uname (Applet), tr (Applet), id (Applet), ssh, sshd, scp, sftp, opkg, apt, dpkg, rpm, curl (BusyBox), wget? (nicht geprüft), python, perl.

Init / Services

  • SysV-artig, kein systemd:
    • /etc/inittab: id:3:initdefault:; 1:012345:respawn:/sbin/getty -L ttyMT0 115200 vt100; si::sysinit:/etc/init.d/rcS.
    • /etc/init.d/rcS: source /etc/profile; mount -avt nonfs,nosmbfs; /etc/rc.d/rc.local.
    • /etc/rc.d/rc.local: /proc/boottime, /dev/shm/shm_tmp, rc.local.partial, mount_main.sh, mount_data.sh, /basic/3rd_ini/*/global_env_setup.ini, mount_3rd*, mount_perm.sh, fusion.ko, hisense_rc.sh, dtv_driver*.ko, autorun.sh, patch/opera4x, preload_opera, ms_service, hisenseUI, app_man, delayrun.
  • Seriell: ttyMT0 115200; rootlogin.sh (USB-Key + doppelt-MD5-PIN) ist der Hardware-Root-Login. Nicht nötig für den Software-Root.
  • USB-Console: usb_console.sh nur wenn ttyUSB in /proc/cmdline; hier nicht.

3. Package Manager: keiner

Live-Root-Check:

for c in apt apt-get dpkg rpm opkg ipkg apk yum pacman; do command -v $c; done
# -> keine Ausgabe / nicht gefunden
ls -la /etc/opkg /etc/opkg.conf /var/lib/opkg /var/lib/dpkg /usr/lib/opkg
# -> No such file or directory
/bin/busybox --list | grep -E '^(opkg|dpkg|rpm|apk|ipkg)$'
# -> keine Treffer
cat /etc/os-release
# -> No such file or directory

Fazit: Es gibt keinen Package Manager, kein Paket-Repo, kein opkg install, kein apt.
Modding-Konsequenz:

  • Eigene Tools als statische ARM-Binaries bauen (arm-linux-gnueabihf-gcc -static) oder Shell-Skripte verwenden.
  • Deployment per File.download (Browser root) nach /3rd_rw/appdata, per SSH (cat/base64/tar) oder USB.
  • Nichts „installieren“ im Sinne einer Distro; Dateien nach /3rd_rw//data//perm legen und per developer.sh/HamService-Wrapper starten.
  • Siehe 06-toolchain-deploy.md.

4. Storage / Mounts / Partitionen

Mounts (live)

rootfs / rootfs rw 0 0
/dev/root / squashfs ro,relatime 0 0
none /proc proc rw
none /sys sysfs rw
none /opt tmpfs rw              # 304.6M
none /dev/shm tmpfs rw          # 304.6M; /tmp -> /dev/shm/shm_tmp
none /var/run tmpfs rw          # 304.6M
/dev/mmcblk0p30 /data ext4 rw   # 1.9G
/dev/mmcblk0p30 /vddt ext4 rw   # gleiche Partition
/dev/mapper/dm-3 /3rd squashfs ro
/dev/mmcblk0p33 /spdata ext4 ro
/dev/mmcblk0p14 /3rd_rw ext4 rw # 1.1G
/dev/mmcblk0p12 /perm ext4 rw   # 3.9M
/dev/sda1 /dev/shm/shm_tmp/mnt/usb/sda1 ext4 rw
/dev/mmcblk0p14 /etc/passwd ext4 rw   # unser Bindmount (Root-Home)
devpts /dev/shm/pts devpts rw
devpts /dev/pts devpts rw             # Bind für PTY

Größen (df -h)

Mount Größe Belegt Frei FS
/ 38.8M 38.8M 0 squashfs ro (100 %)
/3rd 141.0M 141.0M 0 squashfs ro (100 %)
/3rd_rw 1.1G 610.6M 489.3M ext4 rw (56 %)
/data 1.9G 3.0M 1.9G ext4 rw
/perm 3.9M 172K 3.5M ext4 rw
/spdata 35.4M 1.3M 33.3M ext4 ro
/opt 304.6M 0 304.6M tmpfs
/dev/shm 304.6M 58.8M 245.8M tmpfs
/var/run 304.6M 0 304.6M tmpfs
USB 927.7M 264K 863.5M ext4 rw
  • Kein OverlayFS (/proc/filesystems: sysfs, rootfs, ramfs, bdev, proc, tmpfs, debugfs, sockfs, pipefs, devpts, ext2/3/4, squashfs, vfat, iso9660, udf, mqueue, ntfs; kein overlay).
  • Modding-Mechanik: rw-Partitionen + mount --bind (Datei oder Verzeichnis), kein Overlay.
  • /dev ist Teil des ro Squashfs (kein devtmpfs); /dev/pts enthält statische Nodes 136,0–4; PTY-Workaround nötig (siehe 06/Root-Guide).
  • /tmp ist ein Symlink auf /dev/shm/shm_tmp (tmpfs).
  • eMMC-Partitionen (Auszug): p9 rootfsA (40M), p10 rootfsB, p12 perm, p13 3rd_ro (205M), p14 rw_area/3rd_rw (1152M), p30 data (2040M), p33 spdata (40M), p34 swap (100M); dm-3 = 141M /3rd; zram0 200M.
  • Swap: delayrun.sh macht mkswap /dev/mmcblk0p34 + swapon; zram0 200M.
  • Rootfs/3rd 100 % voll; neue Daten gehören nach /3rd_rw (489M frei) oder /data (1.9G frei), nicht in ///3rd.

5. Toolchain-Constraints (Kurz)

Constraint Wert
Architektur ARMv7, EABI5, hard-float, VFPv4/NEON
Kernel 3.18.25 (kein overlayfs, kein devtmpfs, devpts ja)
libc glibc 2.18 (TV)
Compiler arm-linux-gnueabihf-gcc (Host)
Static empfohlen; -static; der mitglieferte Dropbear ist statisch (glibc 2.39) und läuft
Dynamic nur mit TV-glibc 2.18 / passendem Sysroot; sonst GLIBC_2.xx-Fehler
Package Manager keiner
Deploy File.download (Browser root), SSH (cat/base64/tar), USB
PTY devpts auf /dev/shm/pts → bind /dev/pts; /dev ro
Overlay nein → mount --bind + developer.sh

Details, Dropbear-Build und Deploy: 06-toolchain-deploy.md.


6. Evidence

  • /proc/version, /proc/cmdline, /proc/cpuinfo, /proc/filesystems, /proc/mounts, /proc/partitions
  • df -h, ls -l /lib, ls -l /bin, ls -l /etc, /etc/inittab, /etc/init.d/rcS, /etc/rc.d/rc.local
  • command -v apt/dpkg/opkg/... leer; /etc/opkg//var/lib/dpkg fehlen; /bin/busybox --list
  • Der alte Run-Ordner (docs/re/20261025-vidaa-takeover/) enthält die Roh-Captures; für die Replikation nicht nötig.

7. Bekannte Unknowns

  • Exakte SoC-Bezeichnung (MT5863 vs. MT53xx-Familie), exakte Kernanzahl, Secure-Boot-/Signaturstatus.
  • Vollständige Kernel-Config, dm-3-Konstruktion, spdata/perm/facset/hiscfg/eeprom-Inhalte.
  • U-Boot-Env (Bad CRC; default NFS) und echter Bootloader-Flow im Detail.
  • DRM/securetime/PlayReady/Widevine, Netflix/Cobalt/Amazon, OTA/checker.sh/file_upgrading.
  • dtv_svc/app_man-Interna, LauncherService-Datenquelle, Hisense_*-API-Signaturen.
  • Ob VIDAAU2Launcher auf diesem Modell je aktiv ist (die aktive UI ist /3rd_rw/UI; launcher/VIDAAU2 sind Alt-/Alternativ-Skins).
  • Ob der preset.txt-Cache vom LauncherService/der UI bei jedem Start neu geschrieben wird (die deletedPresetApp.txt ist die persistente Hide-Liste).