Display/GUI watchdog for the "backlight on, no picture" failure
On PoE sites the MIPI-DSI panel can lose its init on a supply dip while the RK3566 keeps running; the UI may also hang or exit. Three layers: - hardware watchdog: systemd RuntimeWatchdogSec=20s (system.conf.d) - GUI: SdWatchdog pings systemd per swapped frame (WATCHDOG_USEC=30s, enabled by the binary so older versions run under the same unit) and writes run/qt.frame; buttontask.service gets Restart=always, NotifyAccess=main, TimeoutAbortSec=10s - bt-displaywatch (root, buttontask-displaywatch.service): kernel DRM/DSI timeouts, eth link down->up (PoE dip hint), stale UI frames, restart storms -> panel re-init (stop UI, fb0 blank 4->0, start UI), repeated -> reboot (max 3/day, never during OTA); incident log in /var/log/buttontask/ Manual recovery: hold one finger 10 s in the bottom-left corner (panels are single-touch). Delivered by OTA via bt-update sync_system; the web service runs `bt-update sync-system` at start for devices updated by an older bt-update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -116,7 +116,8 @@ fi
|
||||
# 4. Привилегированные хелперы + sudoers
|
||||
# ---------------------------------------------------------------------------
|
||||
for s in bt-netconfig bt-netconfig-boot bt-update bt-service \
|
||||
bt-settime bt-reboot bt-access bt-brightness bt-set-master; do
|
||||
bt-settime bt-reboot bt-access bt-brightness bt-set-master \
|
||||
bt-displaywatch; do
|
||||
[ -f "$BUNDLE_DIR/scripts/$s" ] || die "нет scripts/$s в бандле"
|
||||
install -m0755 "$BUNDLE_DIR/scripts/$s" "$ROOT/scripts/"
|
||||
done
|
||||
@@ -168,6 +169,14 @@ if [ -f "$BT_OVR" ]; then
|
||||
sed 's/\r$//' "$BT_OVR" > /etc/systemd/system/bluetooth.service.d/override.conf
|
||||
log "bluetooth.service: Restart=always"
|
||||
fi
|
||||
# аппаратный вотчдог (/dev/watchdog): зависло ядро -> плата перезагрузится сама
|
||||
WD_CONF="$BUNDLE_DIR/webconfig/system.conf.d/buttontask-watchdog.conf"
|
||||
if [ -f "$WD_CONF" ]; then
|
||||
install -d /etc/systemd/system.conf.d
|
||||
sed 's/\r$//' "$WD_CONF" > /etc/systemd/system.conf.d/buttontask-watchdog.conf
|
||||
systemctl daemon-reexec || warn "daemon-reexec не удался — вотчдог включится после ребута"
|
||||
log "аппаратный вотчдог: RuntimeWatchdogSec из buttontask-watchdog.conf"
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 8. Авто-детект тачскрина -> override.conf (eventN зависит от платы)
|
||||
@@ -209,6 +218,8 @@ systemctl enable buttontask buttontask-web buttontask-network buttontask-collect
|
||||
systemctl enable buttontask buttontask-web buttontask-collector >/dev/null 2>&1 || \
|
||||
systemctl enable buttontask buttontask-web >/dev/null 2>&1 || \
|
||||
die "не удалось включить сервисы (проверьте имена юнитов)"
|
||||
# вотчдог дисплея/GUI (переинициализация DSI-панели, эскалация в ребут)
|
||||
systemctl enable buttontask-displaywatch >/dev/null 2>&1 || warn "не удалось enable buttontask-displaywatch"
|
||||
|
||||
# применить сеть сразу (не ждать ребута), если есть сохранённый профиль
|
||||
if [ -f "$ROOT/config/network.json" ] && [ -x "$ROOT/scripts/bt-netconfig-boot" ]; then
|
||||
|
||||
@@ -48,6 +48,7 @@ $scriptsSrc = Join-Path $web 'scripts'
|
||||
$needScripts = @(
|
||||
'bt-netconfig', 'bt-netconfig-boot', 'bt-update', 'bt-service',
|
||||
'bt-settime', 'bt-reboot', 'bt-access', 'bt-brightness', 'bt-set-master',
|
||||
'bt-displaywatch',
|
||||
'buttontask.sudoers'
|
||||
)
|
||||
foreach ($s in $needScripts) {
|
||||
@@ -180,7 +181,7 @@ $fix = @()
|
||||
$fix += Get-ChildItem (Join-Path $stage 'scripts') -File
|
||||
$fix += Get-ChildItem (Join-Path $stage 'systemd') -File
|
||||
$fix += Get-Item (Join-Path $stage 'device-install.sh')
|
||||
$fix += @(Get-ChildItem (Join-Path $stage 'webconfig') -Recurse -File -Include 'bt-*', '*.sh', '*.service', '*.sudoers', 'override.conf*')
|
||||
$fix += @(Get-ChildItem (Join-Path $stage 'webconfig') -Recurse -File -Include 'bt-*', '*.sh', '*.service', '*.sudoers', 'override.conf*', '*.conf')
|
||||
$fix | Sort-Object FullName -Unique | ForEach-Object { ConvertTo-Lf $_.FullName }
|
||||
|
||||
Log "пакую архив"
|
||||
|
||||
Reference in New Issue
Block a user