====== Polycom Pano Hax ====== Bringing Linux and Other Operating Systems to the Polycom Pano. Work in progress, no end-user guide yet! ===== Hardware ===== Jetson TX1 module + Polycom carrier board. ==== TX1 ==== Stock module, 4GiB LPDDR4, 16GB eMMC. Production-fused. ==== I/O ==== ^ Port ^ Description ^ | 2x GbE | 1x PoE, in wired to on-board USB3-ethernet adapter, 1x Non-PoE port wired directly to TX1-internal USB3-ethernet adapter | | 2x USB | USB A 2.0 (OTG, upper) + USB A Super Speed | | HDMI Out | Directly from TX1 | | HDMI In | Through ??? under a metal can. | | DC In | 5.5x2.5(?), Labeled 54VDC, runs from 36VDC min. | | WiFi? Antenna | Built-in Jetson TX1 2.4 + 5G WIFI + Bluetooth radio | | Button | Capacitive touch + RGB indicator LED | ^ Header ^ Description ^ | SW1102 RECOVERY | Internal RCM button | | SW1101 RESET | Internal SoC Reset button | | J901 SERIAL | Pinout: 1.8V, TX, GND, RX. Mind the logic 1.8V levels! 1.8V line dips when ''RESET'' button is pushed down. | | TP1201 | Unmarked 12V DC rail test point (between AON_P5VO and T1502 transformer), can be used to power up the device directly (bypasses PoE/DC IN circuit), boots from ~11V DC | ===== Stock Software ===== It's running highly customized Android. Serial port exposes password prompt. Unencrypted update bundle from Polycom/HPE reveals default password: ''EyZeBuYTQ'' - this should land a ''user'' shell, from which ''su'' just gets you root access. "Devfeatures" (disabled iptables firewall, enabled adb, disabled serial password, enabled telnet I think) can be enabled via ''fw_setenv devfeatures true''. ''fw_printenv'' can be used to check current environment variables. Jetson TX1 is SecureBoot/Production-fused. Standard CBoot (first-stage bootloader) is **unlocked** ie. it does not do any signature verification over loaded ''boot'' partition or the operating system altogether. ==== Flash Layout ==== (in bold our current best guess for what the bootchain needs to get to CBOOT. ^ Number ^ Start ^ Size ^ Name ^ Description ^ | 1 | 17.4kB | 2097kB | **BPF** | TegraBoot (a.k.a. nvtboot) for BPMP | | 2 | 2115kB | 262kB | **TBC** | TegraBoot for CPU | | 3 | 2377kB | 262kB | TBC-B | TegraBoot for CPU, B-partition | | 4 | 2639kB | 2097kB | **EBT** | CBOOT, loaded by TegraBoot | | 5 | 4736kB | 2097kB | RBL | CBOOT, B-partition | | 6 | 6833kB | 2097kB | NCT | Non-volatile vital product data | | 7 | 8930kB | 6291kB | WB0 | Warm Boot Firmware for device unsuspend | | 8 | 15.2MB | 2097kB | DFI | all 0x00 | | 9 | 17.3MB | 4194kB | **RP1** | DTB for CBOOT | | 10 | 21.5MB | 4194kB | RP2 | 0x24 random bytes, then 0x00 | | 11 | 25.7MB | 6291kB | **TOS** | Trusted OS/Firmware, loaded by TegraBoot | | 12 | 32.0MB | 80.9kB | EKS | "Encrypted Key Storage" | | 13 | 32.1MB | 2097kB | UKS | all 0x00 | | 14 | 34.2MB | 2097kB | FB | all 0x00 | | 15 | 36.3MB | 134MB | BMP | Splashscreen partition | | 16 | 170MB | 26.7MB | SOS | Android Recovery image | | 17 | 197MB | 4194kB | DTB | DTB for Kernel | | 18 | 201MB | 26.7MB | LNX | Android Boot image ("boot" fastboot partition) | | 19 | 228MB | 2147MB | APP | ext4 /system | | 20 | 2376MB | 2147MB | CAC | ext4 /cache | | 21 | 4523MB | 805MB | vendor | ext4 /vendor | | 22 | 5328MB | 2097kB | MSC | all 0x00 | | 23 | 5331MB | 33.6MB | USP | all 0x00 | | 24 | 5364MB | 2097kB | MDA | verity metadata partition | | 25 | 5366MB | 8389kB | RP3 | empty ext4 | | 26 | 5375MB | 8389kB | RP4 | all 0x00 | | 27 | 5383MB | 16.8MB | FCT | empty ext4 | | 28 | 5400MB | 8389kB | UCB | empty ext4, "touchscreen" and "mpu" directories | | 29 | 5408MB | 2147MB | FAC | ext4 with "factory_restore.zip" update image applied when touch button is pressed on boot | | 30 | 7556MB | 1074MB | PLC | ext4 with some polycom config stuff | | 31 | 8629MB | 262kB | CRT | public/private key pair? | | 32 | 8630MB | 7128MB | UDA | ext4 /data | ===== Flashing ===== ==== Fastboot ==== Flashing is possible via Fastboot (implemented in cboot) over USB-A 2.0 connector (via cursed USB A-A or USB A-C connector). In order to enter Fastboot you can either: * ''reboot bootloader'' from Android firmware * Use customized [[https://code.hackerspace.pl/informatic/fusee-launcher|fusee-launcher]] with ''force_fastboot.bin'' payload: ''./fusee-launcher.py -w -V 0x0955 -P 0x7721 force_fastboot.bin'' **QUIRK:** Fastboot tends to crash/reset whenever HDMI Out is not connected to any display lmao. ==== RCM/TegraFlash ==== Alternative: ''tegraflash.py'' from L4T BSP. **NOTE:** Latest L4T tooling doesn't really seem to work very well. Use [[https://developer.nvidia.com/embedded/dlc/tx1-driver-package-r2423|R24.2.3]]. Issue seems to be with ''nvtboot_recovery.bin'': $ sha256sum */Linux_for_Tegra/bootloader/nvtboot_recovery.bin f3a54b2e29857ad627c6ae96352e8d1a2e9b538cca502f3565896c6f6cb51746 l4t24/Linux_for_Tegra/bootloader/nvtboot_recovery.bin # works 3d97c0c37201a5b98fabcc509ac57326bbde8076cee0b5294f969634d4b43a42 l4t28/Linux_for_Tegra/bootloader/nvtboot_recovery.bin # hangs cd6ec5b3c212fdc44d6d36e043448d2b3484749105005b612fcd043869bd53ac l4t32/Linux_for_Tegra/bootloader/nvtboot_recovery.bin # crashes with error 4 ^ Known Error ^ Reason ^ | [ 0.0221 ] Boot Rom communication failed Error: Return value 3 | Device is fused, needs fusee-launcher | | [ 0.0667 ] Cboot is not running on device. Error: Return value 4 | Device crashed, needs a reset (or different ''nvtboot_recovery.bin'') | As ''--bl'' use cboot from our device (''mmcblk0p4''). ./fusee-launcher.py -w -V 0x0955 -P 0x7721 ipatch_rcm_sample.bin python3 tegraflash.py --bl mmcblk0p4.img --applet nvtboot_recovery.bin --chip 0x21 --cmd "read DTB dtb-extracted.bin" ===== Booting Linux ===== Mainline U-Boot (d0615e4a67c commit tested) with ''p2371-2180_defconfig'' can be flashed over ''boot'' (''mmcblk0p18'') partition. CROSS_COMPILE=aarch64-unknown-linux-gnu- make V=1 && \ mkbootimg --kernel u-boot.bin --pagesize 4096 --base 0x10008000 --output u-boot.aimg && \ fastboot flash boot u-boot.aimg && \ fastboot reboot ===== References ===== * https://yifan.lu/2022/06/17/unbricking-shield-tv-2015-with-a-bootrom-exploit/ * https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3275/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/part_config.html