Files
philips-tv-speicher-voll/patches/phase7/OTA-COMPONENT-MAP.md

4.2 KiB
Raw Blame History

Phase 7D – Philips/TPVision OTA component map

Proven update path

USB `/upgrades/autorun*.upg`
  -> org.droidtv.settings AutoRunUpgrade / SilentUpgradeService (UID1000)
     -> product/version filter (`TPM191E_R`, current SW version)
     -> ZIP parse
        ├─ payload.bin
        ├─ payload_properties.txt
        └─ META-INF/updateinfo/upg.xml
     -> android.os.UpdateEngine.applyPayload(URL, offset, size, properties)
        -> root update_engine daemon
        -> inactive A/B partitions
        -> boot-control / update_verifier after reboot

This graph is reconstructed from the installed Settings DEX, init/fstab files, live services and bugreport logs. No update was initiated.

Components

Component Evidence / path Role Confidence
org.droidtv.settings /system/priv-app/settings/settings.apk Software-update UI and OEM orchestration confirmed
SilentUpgradeService Settings manifest/DEX/logs watches USB/staging; registers mounted-volume receiver confirmed
AutoRunUpgrade Settings DEX code_off=0x3b6ba0 scans /upgrades, pattern [aA]utorun.*.upg, product/version checks confirmed
UpdateParser.parse(File) Settings DEX code_off=0x3c01ec opens .upg with ZipFile; locates payload and properties; computes payload offset/size confirmed
UpdateUtils.installUpdate Settings DEX code_off=0x3c71e4 binds Android UpdateEngine, calls applyPayload confirmed
UpdateUtils.getUpgXml Settings DEX code_off=0x3c2e88 extracts META-INF/updateinfo/upg.xml to staging confirmed
android.os.UpdateEngineService live service list Binder API for payload update confirmed
/system/bin/update_engine init/process evidence root A/B payload writer/verifier confirmed
update_verifier init/fstab inventory verifies post-boot slot and marks successful through boot control confirmed architecture
android.hardware.boot@1.0 vendor init/HAL inventory A/B slot state/control confirmed service definition; status query failed
/data/ota_package /dev/mmcblk0p32, label upgrade, ~1,352 MiB update staging/history (last_install, upg.xml, payload metadata) confirmed; shell contents inaccessible
/data/vendor/user_setting/rw/upgrade DEX strings / prior private-state report OEM upgrade state/history confirmed path reference
org.droidtv.oad /system/priv-app/oad/oad.apk broadcast/OAD TV firmware feed integration, writes autorun.upg staging confirmed; not the primary USB parser
com.easy.oad /system/app/btota/btota.apk Bluetooth/remote-device OTA confirmed distinct role
org.droidtv.usbbreakin /system/app/USBService/USBService.apk USB service/trigger surface confirmed installed; exact firmware-writer role not proven
uncrypt, BCB services /system/etc/init/uncrypt.rc setup/clear bootloader-control-block paths used by Android recovery flows confirmed definitions; not invoked
RecoverySystem/system_update services live service list Android framework recovery/update coordination confirmed present

Metadata and state names found

The installed update code references /data/ota_package/build.prop, installstatus, last_install, version/history files, persist.odm.tpv.sys.upg_filename, persist.odm.tpv.sys.upg_source, reboot-ab-update and native slot APIs. Logs show the Settings service starting and observing USB mounts; they do not show a staged current update.

What was not proven

  • No official .upg file is present locally, so outer-container signature, exact payload metadata and Philips private key identities remain unknown.
  • No call to RecoverySystem.verifyPackage was found on the current Settings A/B path. This does not prove the outer ZIP is unsigned; it proves only that the inspected path hands the inner payload/properties to UpdateEngine.
  • Factory/emergency USB modes, key combinations and recovery ADB were not found in local resources.
  • upgrade_loader, upgrade.pkg, Android non-A/B update.zip and sideload are not established as valid paths for this build.

Android's A/B OTA model writes the inactive slot and uses boot-control rollback: https://source.android.com/docs/core/ota/ab.