14 KiB
02 — Boot: vom U-Boot bis UI/AM/Services
Status: Boot-Kette, Skripte, Zeilennummern und Service-Reihenfolge CONFIRMED aus /etc, /basic, /3rd (live/static). Einzelne Bootloader-/Hardware-Details UNVERIFIED.
1. Boot-Reihenfolge (Überblick)
U-Boot (eMMC)
→ Linux 3.18.25 (cmdline: root=/dev/mmcblk0p9, rootfstype=squashfs, console=ttyMT0)
→ /sbin/init
→ /etc/inittab (getty ttyMT0, sysinit)
→ /etc/init.d/rcS
→ mount -a
→ /etc/rc.d/rc.local
→ rc.local.partial, mount_main.sh, mount_data.sh, 3rd_ini env
→ mount_3rd_ro.sh, mount_3rd.sh, mount_perm.sh
→ insmod /basic/fusion.ko
→ /etc/scripts/hisense_rc.sh (mount_userdata.sh async)
→ /basic/autorun.sh
→ OTA-Check, Wireless, /3rd_rw/developer.sh (Zeile 90)
→ preload_opera, core-dump, ms_service (162)
→ hisenseUI/start-UI.sh (168)
→ app_man -c am_config -s am_start.ini (177)
→ delayrun.sh (190)
→ swrc-server, runlogservice, LauncherService, Seriallog,
HamService, swap
→ usb_console.sh, Bluetooth
Wichtig: /3rd_rw/developer.sh läuft früh (Zeile 90) — vor ms_service, hisenseUI, app_man und delayrun. Das ist der beste Hook für frühe Bind-Mounts/Stubs/custom Services. Der HamService-Wrapper läuft spät (nach delayrun + 15 s) und ist der aktuelle SSH/Root-Loop-Boot-Hook.
2. U-Boot / Kernel / Partitionen
- Bootmedium: eMMC, MediaTek
mt53xx-emmc. - A/B-Slots:
ubootA/B,kernelA/B,rootfsA/B; root ist/dev/mmcblk0p9(rootfsA). - Rootfs: squashfs ro (38.8 MB, 100 %);
/3rdistdm-3squashfs ro (141 MB, 100 %). - Kernel-Cmdline (Auszug):
rootwait rootfstype=squashfs ro console=ttyMT0,115200n1 vmalloc=512mb quiet mtdparts=mt53xx-emmc:... root=/dev/mmcblk0p9 ... adb_enable=0 - U-Boot-Env:
fw_printenv→ „Bad CRC, using default environment“; Default ist NFS (bootcmd=bootp...). Die echte Boot-Konfiguration ist die/proc/cmdline; das gespeicherte U-Boot-Env ist nicht verlässlich. - Seriell:
ttyMT0115200 (getty);rootlogin.sh= USB-Key + doppelt-MD5-PIN (Hardware-Root). Nicht nötig für den Software-Root. - ADB:
adb_enable=0; kein ADB.
3. init / rcS / rc.local
/etc/inittab
id:3:initdefault:
1:012345:respawn:/sbin/getty -L ttyMT0 115200 vt100
si::sysinit:/etc/init.d/rcS
/etc/init.d/rcS
#! /bin/sh
source /etc/profile
# Don't use scripts. Just use mount -a for fast boot.
/bin/mount -avt nonfs,nosmbfs
[ -x /etc/rc.d/rc.local ] && /etc/rc.d/rc.local
/etc/rc.d/rc.local (Auszug)
echo "rc.local begin" > /proc/boottime
# /dev/shm/shm_tmp (Basis für /tmp)
sh /etc/rc.d/rc.local.partial &
sh /etc/scripts/mount_main.sh
sh /etc/scripts/mount_data.sh
for INI_3RD in `ls /basic/3rd_ini`; do source /basic/3rd_ini/$INI_3RD/global_env_setup.ini; done
# mount_3rd_ro.sh / mount_3rd.sh / mount_perm.sh
insmod /basic/fusion.ko
sh /etc/scripts/hisense_rc.sh # mount_userdata.sh async
# dtv_driver_adpt.ko / dtv_dolby_vision.ko / dtv_driver.ko
# BROWSER_3RD_RW=/3rd_rw/patch/opera4x; mount -o bind ... /3rd/opera4x
# preload_opera.sh, core-dump, ut_drv, aud_cpudec
# ms_service, hisenseUI/start-UI.sh, app_man, delayrun
/proc/boottimewird an mehreren Stellen geschrieben (Boot-Timing).file_upgradingin/proc/cmdlinetriggertchecker.sh+mount_perm/mount_3rd/mount_3rd_ro; nicht der normale Boot./basic/3rd_ini/*/global_env_setup.inisetztLD_LIBRARY_PATH/Env für die 3rd-Services.fusion.koist das MediaTek-AM-/App-Framework-Modul;dtv_driver*.kofür den Tuner/DTV./3rd_rw/patch/opera4x: Vendor-Overlay — wenn das Verzeichnis existiert, wird es als Ganzes über/3rd/opera4xgebindet (mount -o bind). Siehe Abschnitt 7./3rd_rw/developer.sh: früher Root-Hook (siehe Abschnitt 6).
4. /basic/autorun.sh — die Service-Zentrale
Reihenfolge (Zeilennummern aus der Datei):
| Zeile | Aktion |
|---|---|
| 1–~60 | Header, OTA-Strategie (ota_upgrade_strategy.sh), Wireless-Datei, Developer-Hook |
| 90–92 | if [ -f /3rd_rw/developer.sh ]; then sh /3rd_rw/developer.sh; fi |
| ~128 | preload_opera.sh (Opera-Libs) |
| ~137 | Core-Dump-Setup (optional) |
| ~162 | ms_service starten (/3rd/ms-screen/ms_service &) |
| 168 | hisenseUI/start-UI.sh & (TV-UI, /3rd_rw/UI/index.html) |
| 177 | /basic/app_man -c /basic/am_config -s /basic/am_start.ini -input_fifo & |
| 190 | sh /basic/delayrun.sh & |
| danach | usb_console.sh, Bluetooth-Service |
Wichtig: Der developer.sh-Hook ist vor ms_service/hisenseUI/app_man/delayrun. Damit lassen sich ro-Dateien (z. B. /basic/am_config, /basic/am_start.ini, /basic/delayrun.sh, /3rd/ms-screen/ms_service, /3rd/opera4x/hisenseUI/start-UI.sh) per Datei-Bind-Mount oder Stub ersetzen, bevor sie gelesen/ausgeführt werden.
5. AM (app_man), am_start, am_config, delayrun
5.1 app_man
cd /basic
/basic/app_man -c /basic/am_config -s /basic/am_start.ini -input_fifo &
- AM = MediaTek App Manager. Startet native Apps/Services aus
am_start.ini/am_config. - Steuerung:
:am,<app>,:<verb>=<val>; Verbs u. a.start,stop,pause,resume,URL,backgm,foregm,shutdown,suspend,wakeup;:am,am,...für den Manager. - Kein
exec/argsüber AM (nur die konfiguriertenexec/args).
5.2 am_start.ini — Boot-App-Sektionen
[ application_context ]
app_sect = securetime
app_sect = dialserver
app_sect = netflix
app_sect = samba_relay_agent
app_sect = browser_base
app_sect = dtv_app_mtk # first started
[ dtv_app_mtk ]
exec = /basic/dtv_svc
args = --am -input_fifo
coexist_set = [opera4x,factory_lite,diskcache,netflix]
[ netflix ]
exec = /3rd/netflix/nrd-app/netflix
...
dtv_app_mtk/dtv_svc: TV-Kern (Tuner/DTV/Navigator); wird zuerst gestartet.netflix: Netflix-App;coexist_setmitdtv_app_mtk,opera4x,factory_lite.dialserver: DIAL/CAST.samba_relay_agent: Samba-Relay (Port 9090).browser_base: Hintergrund-Browser (/3rd/internet_browser/browser -x bws_background),start_self=true.securetime: PlayReady Secure Time (/3rd/playready/securetime).
5.3 am_config — App-Definitionen (Auszug)
| App | exec / args | Bemerkung |
|---|---|---|
opera4x |
/3rd/opera4x/browser/run-Browser.sh |
Web-Browser (hisense_browser), start_self=true, DevTools 9224 |
netflix_niab |
/3rd/netflix/nrd-app/netflix |
Netflix |
opera_browser |
/3rd/internet_browser/browser -u http://www.google.com ... |
„Internet Browser“-Variante |
opera_tv_store |
/3rd/internet_browser/browser -u https://demo.tvstore.opera.com ... |
TV Store |
youtube |
/3rd/internet_browser/browser -u http://www.youtube.com/tv ... |
YouTube (Web) |
youtube_kids / youtube_tv |
/3rd/cobalt/cobalt ... |
Cobalt-YouTube |
cobalt |
/3rd/cobalt/cobalt ... |
Cobalt |
amazon_ignition |
/3rd/amazon/bin/ignition |
Amazon |
factory_lite |
/3rd/his_factory/factory_lite -qws |
Factory-Menü |
huluplus, hotlist, generic_osd |
Internet-Browser | Legacy/Store |
vudu (referenziert) |
— | Store/Region |
exec/args;coexist_set;start_self;backgm_support;keymap;timeout_4_stop;loosely_exclusive_set.- Der Web-Browser (
opera4x) wird nicht beim Boot ausam_start.inigestartet; er wird bei Bedarf (TV-Browser-Tile) über AM gestartet. Die UI (hisenseUI) startet separat ausautorun.sh(Zeile 168).
5.4 delayrun.sh — späte Services (nach 15 s)
sleep 15
export LD_LIBRARY_PATH=/3rd/loglevel/lib:$LD_LIBRARY_PATH
/3rd/swrc-server/swrc-server &
/3rd/his_runlog/runlogservice.sh &
/3rd/launcherservice/startLS.sh & # LauncherService
/3rd/Serial_log/Seriallog &
/3rd/hamservice/startHam.sh & # HamService (unser Wrapper)
mkswap /dev/mmcblk0p34; swapon /dev/mmcblk0p34
swrc-server: Software-Remote-Control-Server.runlogservice: Logging/Runlog.LauncherService: Launcher-/App-Daten/UI-Service (startLS.sh).Seriallog: serielles Logging.HamService: ACR/Hisense-Service; hier greift unser Wrapper (/3rd_rw/hamservice/HamService), der Root-Loop + Dropbear startet und dann das echte/3rd/hamservice/HamServiceausführt.- Swap:
mmcblk0p34(100M).
6. Boot-Hooks (die wichtigen)
| Hook | Zeitpunkt | Was |
|---|---|---|
/3rd_rw/developer.sh |
früh (autorun Zeile 90) | Root; vor ms_service/hisenseUI/app_man/delayrun. Bestens für: mount --bind von modifizierten am_start.ini/am_config/delayrun.sh, Stubs für ms_service/start-UI.sh/app_man, frühe eigene Services, SSH/Root-Loop. |
/3rd_rw/hamservice/HamService |
spät (delayrun + 15 s) | Root; unser Wrapper: root_loop.sh + start_sshd.sh, dann exec /3rd/hamservice/HamService. Aktuelle SSH/Root-Persistenz. |
/3rd_rw/patch/opera4x |
autorun (vor preload_opera/UI) |
Vendor-Overlay: mount -o bind /3rd_rw/patch/opera4x /3rd/opera4x. Full overlay — nur mit vollständigem Baum/Symlinks; für einzelne Dateien lieber Datei-Bind-Mount via developer.sh. |
/3rd_rw/UI |
UI-Start | Die aktive UI-Seite (/3rd_rw/UI/index.html); rw. |
/3rd_rw/appdata/launcher |
UI/LauncherService | App-Tiles/Daten (preset.txt, Appinfo.json, deletedPresetApp.txt, data/Category*.xml, res/). |
/3rd_rw/sshd |
via HamService/start_sshd.sh |
Dropbear, Host-Key, authorized_keys, Startskript. |
/3rd_rw/appdata/root_loop.sh |
via HamService/developer.sh |
Root-Kommandokanal (root_cmd.sh → root_out.txt). |
/3rd_rw/patch/opera4x |
autorun | full /3rd/opera4x overlay; siehe oben. |
Wichtig: Die ro-Dateien /basic/am_config, /basic/am_start.ini, /basic/delayrun.sh werden nach dem developer.sh gelesen/ausgeführt. Ein mount --bind in developer.sh wirkt daher. Ein Stub über /3rd/ms-screen/ms_service oder /3rd/opera4x/hisenseUI/start-UI.sh wirkt ebenfalls, weil die -x-Checks danach kommen.
7. /3rd_rw/patch/opera4x (Vendor-Overlay)
In autorun.sh:
BROWSER_3RD_RW=/3rd_rw/patch/opera4x
if [ -d $BROWSER_3RD_RW ]; then
mount -o bind $BROWSER_3RD_RW /3rd/opera4x
fi
- Full directory bind:
/3rd/opera4xwird komplett durch/3rd_rw/patch/opera4xersetzt. - Konsequenz: Der Patch-Ordner muss die komplette
opera4x-Struktur enthalten (oder ein Symlink-Baum auf/3rd/opera4xsein), sonst fehlen Browser/UI/Libs. - Für einzelne Dateien (z. B.
hisenseUI/start-UI.sh,opera_env.sh) ist ein Datei-Bind-Mount indeveloper.shsicherer:mount --bind /3rd_rw/patch/start-UI-custom.sh /3rd/opera4x/hisenseUI/start-UI.sh - Der Patch-Ordner ist nicht vorhanden; er ist ein optionaler Vendor-Hook. Siehe
04-modding.mdRoute E.
8. Logs / Verifikation
/proc/boottime: Timing-Marker (rc.local begin,mount_main.sh,fusion.ko,ms_serviceetc.)./tmp/am_*: AM-Infos (am_tv_model_name,am_tv_version,am_start.ini-Status)./tmp/fifo_am_*,/tmp/DmrLaunchedStatus.dat, …: AM/DIAL.- Hisense Runlog:
/3rd/his_runlog/runlogservice.sh,/3rd_rw/...(Logs). Seriallog:/3rd/Serial_log.- Unser SSH/Deploy:
/3rd_rw/sshd/dropbear.log,/3rd_rw/sshd/mount.log,/3rd_rw/appdata/root_out.txt,/3rd_rw/appdata/root_loop.log. - Prozesse:
ps,/proc/<pid>/cmdline,/proc/<pid>/status. - UI:
hisenseUI(PID z. B. 589),hisense_browser(PID z. B. 1320),app_man,dtv_svc,LauncherService,HamService.
Health-Check auf dem TV:
/bin/sh /3rd_rw/appdata/verify.sh
9. Risiken / Grenzen
developer.sh-Fehler könnenms_service/UI/app_man/delayrunverhindern → TV-UI schwarz, Apps starten nicht. Immer mitset -x/Log und Fallback (SSH/Root-Loop, Web-Browser) arbeiten.am_config/am_start.inibeschädigen → native Apps (TV, Netflix, DIAL) starten nicht. Modifizierte Kopien vorher testen;developer.sh-Bind nur mit Backup; Rollback = Bind lösen/reboot.app_man/dtv_svcdeaktivieren → TV/Remote/Apps kaputt; für eine reine Custom-UI riskant.dtv_svc/app_manlieber behalten./3rd_rw/patch/opera4xfull overlay → fehlende Dateien = Browser/UI kaputt. Nur mit vollständiger Kopie; besser Datei-Bind.ms_service/swrc/runlog/Seriallogabschalten ist meist unkritisch, kann aber DLNA/Remote/Logs kosten.securetimeist PlayReady/DRM; deaktivieren kann DRM/Netflix brechen.- Kein Flash/Recovery: Der TV hat kein UART angeschlossen; der Root/SSH-Weg und
developer.sh/HamService-Wrapper sind die Rettungswege. Keine Änderungen am ro Rootfs//3rdohne vollständiges Verständnis.
10. Unknowns
- Echter U-Boot-Flow/Env (Bad CRC), Secure Boot, Signaturprüfung, A/B-Slot-Auswahl.
- Voller Inhalt von
checker.sh,ota_upgrade_strategy.sh,file_upgrading,bspatch/OTA. dtv_svc/app_man/am-Interna,:am-Semantik im Detail,coexist_set/backgm/keymap.LauncherService-Datenquelle (Store/Foxxum/FCGI),hisenseUI-Template-Auswahl.- Ob
VIDAAU2Launcherauf diesem Modell je aktiv ist (die aktive UI ist/3rd_rw/UI). ms_service/swrc/runlog/Seriallog/HamService-Abschaltfolgen.- Exakte Service-PIDs/Reihenfolge variieren pro Boot; die Skript-/Zeilen-Reihenfolge ist stabil.