add stuff
This commit is contained in:
commit
26cd15d899
65 files changed
+4820
No files matched your search
@@ -0,0 +1,278 @@
|
||||
# 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)
|
||||
|
||||
```text
|
||||
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 %); `/3rd` ist `dm-3` squashfs 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:** `ttyMT0` 115200 (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`
|
||||
|
||||
```text
|
||||
id:3:initdefault:
|
||||
1:012345:respawn:/sbin/getty -L ttyMT0 115200 vt100
|
||||
si::sysinit:/etc/init.d/rcS
|
||||
```
|
||||
|
||||
### `/etc/init.d/rcS`
|
||||
|
||||
```sh
|
||||
#! /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)
|
||||
|
||||
```sh
|
||||
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/boottime`** wird an mehreren Stellen geschrieben (Boot-Timing).
|
||||
- **`file_upgrading`** in `/proc/cmdline` triggert `checker.sh` + `mount_perm`/`mount_3rd`/`mount_3rd_ro`; nicht der normale Boot.
|
||||
- **`/basic/3rd_ini/*/global_env_setup.ini`** setzt `LD_LIBRARY_PATH`/Env für die 3rd-Services.
|
||||
- **`fusion.ko`** ist das MediaTek-AM-/App-Framework-Modul; `dtv_driver*.ko` für den Tuner/DTV.
|
||||
- **`/3rd_rw/patch/opera4x`**: Vendor-Overlay — wenn das Verzeichnis existiert, wird es **als Ganzes** über `/3rd/opera4x` gebindet (`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`
|
||||
|
||||
```sh
|
||||
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 konfigurierten `exec`/`args`).
|
||||
|
||||
### 5.2 `am_start.ini` — Boot-App-Sektionen
|
||||
|
||||
```ini
|
||||
[ 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_set` mit `dtv_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 aus `am_start.ini` gestartet; er wird bei Bedarf (TV-Browser-Tile) über AM gestartet. **Die UI** (`hisenseUI`) startet separat aus `autorun.sh` (Zeile 168).
|
||||
|
||||
### 5.4 `delayrun.sh` — späte Services (nach 15 s)
|
||||
|
||||
```sh
|
||||
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/HamService` ausfü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`:
|
||||
|
||||
```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/opera4x` wird komplett durch `/3rd_rw/patch/opera4x` ersetzt.
|
||||
- **Konsequenz:** Der Patch-Ordner muss die **komplette** `opera4x`-Struktur enthalten (oder ein Symlink-Baum auf `/3rd/opera4x` sein), sonst fehlen Browser/UI/Libs.
|
||||
- **Für einzelne Dateien** (z. B. `hisenseUI/start-UI.sh`, `opera_env.sh`) ist ein **Datei-Bind-Mount** in `developer.sh` sicherer:
|
||||
```sh
|
||||
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.md` Route E.
|
||||
|
||||
---
|
||||
|
||||
## 8. Logs / Verifikation
|
||||
|
||||
- **`/proc/boottime`**: Timing-Marker (`rc.local begin`, `mount_main.sh`, `fusion.ko`, `ms_service` etc.).
|
||||
- **`/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:**
|
||||
|
||||
```sh
|
||||
/bin/sh /3rd_rw/appdata/verify.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Risiken / Grenzen
|
||||
|
||||
- **`developer.sh`-Fehler** können `ms_service`/UI/`app_man`/`delayrun` verhindern → TV-UI schwarz, Apps starten nicht. Immer mit `set -x`/Log und Fallback (SSH/Root-Loop, Web-Browser) arbeiten.
|
||||
- **`am_config`/`am_start.ini` beschä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_svc` deaktivieren** → TV/Remote/Apps kaputt; für eine reine Custom-UI riskant. `dtv_svc`/`app_man` lieber behalten.
|
||||
- **`/3rd_rw/patch/opera4x` full overlay** → fehlende Dateien = Browser/UI kaputt. Nur mit vollständiger Kopie; besser Datei-Bind.
|
||||
- **`ms_service`/`swrc`/`runlog`/`Seriallog`** abschalten ist meist unkritisch, kann aber DLNA/Remote/Logs kosten.
|
||||
- **`securetime`** ist 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/`/3rd` ohne 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 `VIDAAU2Launcher` auf 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.
|
||||
Reference in new issue
Block a user