Files
pmaports-rtwo/device/testing/device-motorola-rtwo/initfs-hook.sh
T
snlavaiseandClaude Opus 5.5 c028f63183 device-motorola-rtwo: initramfs debug shell, panel revive, power key
- deviceinfo / modules-initfs: boot through the U-Boot chainload, modules
  needed in the initramfs for the display, USB and the DSPs.
- initfs hooks: dropbear/telnet debug shell over USB networking.
- rtwo-panel-revive.service: blank/unblank the NT37705 if it comes up
  dead from the ABL handoff.
- logind-power-key.conf: ignore the power key (handled by the dashboard).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DnHwDU5yL8L6qgPEN5CV5m
2026-09-26 20:02:56 -03:00

71 lines
3.1 KiB
Bash

#!/bin/sh
# Arranca dropbear (SSH) en el debug-shell, ademas del telnetd que ya trae
# postmarketos-mkinitfs-hook-debug-shell. Ningun paquete oficial de
# postmarketOS declara dropbear para el initramfs (solo para el rootfs real,
# via postmarketos-base-downstream, que es otra cosa) -- se agrega aca a
# mano porque hace falta poder scriptear el debug-shell (heredocs, comandos
# no interactivos por SSH), cosa que telnet no permite bien.
#
# Corre via run_hooks() en init_2nd.sh, DESPUES de setup_usb_network +
# start_unudhcpd (la red ya esta arriba en este punto) y ANTES de
# debug_shell(). Ver init_functions.sh:run_hooks (invoca cada hook con
# 'sh "$hook"', no hace falta que sea ejecutable).
# Panel NT37705 (2026-09-25): el ABL deja el subsistema de display encendido
# (mdss_gdsc on) y el primer encendido de msm sobre ese estado no logra
# arrancar el panel (sin TE, lecturas DCS -61). Probado en hardware: ni un
# ciclo de alimentacion del panel ni uno del host DSI/PHY alcanzan; lo unico
# que lo arranca es apagar mdss_gdsc (reinicia todo el hardware de display),
# y eso pasa con un blank/unblank del framebuffer. Se hace aca, antes del
# debug-shell, para que la consola ya se vea. El estado de mdss_gdsc durante
# el blank queda en dmesg para confirmar que el dominio se apago.
if [ -e /sys/class/graphics/fb0/blank ]; then
mount -t debugfs none /sys/kernel/debug 2>/dev/null
echo 1 > /sys/class/graphics/fb0/blank
sleep 1
gdsc=$(grep '^mdss_gdsc ' /sys/kernel/debug/pm_genpd/pm_genpd_summary 2>/dev/null)
echo "rtwo-panel: mdss_gdsc durante blank: ${gdsc:-desconocido}" > /dev/kmsg
echo 0 > /sys/class/graphics/fb0/blank
fi
# Este initramfs no trae /etc/passwd ni /etc/shadow (confirmado: ni
# siquiera una entrada minima de root) -- sin esto dropbear no puede
# resolver el home de root para buscar authorized_keys, y 'passwd root'
# falla con "unknown uid 0". El shadow con el campo de clave vacio entre
# los primeros dos ':' permite login sin contrasena (para cuando -B mas
# abajo si esta soportado por este build de dropbear).
if [ ! -f /etc/passwd ]; then
cat > /etc/passwd <<'PASSWD'
root:x:0:0:root:/root:/bin/sh
PASSWD
fi
if [ ! -f /etc/group ]; then
cat > /etc/group <<'GROUP'
root:x:0:
GROUP
fi
if [ ! -f /etc/shadow ]; then
cat > /etc/shadow <<'SHADOW'
root::10933:0:99999:7:::
SHADOW
chmod 600 /etc/shadow
fi
mkdir -p /etc/dropbear
mkdir -p /root/.ssh
cat > /root/.ssh/authorized_keys <<'KEYS'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPpCHmYjP+h7qod3HLcAU55A05c/ZDSkzKEXhU8OpJZG rtwo-debug-shell
KEYS
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
# -R: genera las claves de host al vuelo (el initramfs es tmpfs, no
# persisten entre arranques, no tiene sentido guardarlas)
# -B: tambien permite login con clave en blanco, por si /etc/passwd trae
# root sin contrasena (mismo modelo de acceso que telnetd -l
# pmos_getty, que da shell sin ninguna autenticacion) -- si el build de
# dropbear no tiene compilado el soporte de blank-password esta opcion
# simplemente no hace nada, la clave publica de arriba sigue funcionando
# -E: loguea a stderr/consola, para poder ver por que no conecta si falla
/usr/sbin/dropbear -R -B -E -p 22 &