qemu: start every panel daemon, and keep Modbus off the control channel
Stage-2 init started only warden-flared and warden-modbus from the payload, so every daemon-backed screen (Automation, MikroTik, Mining, RS485, Starlink, Services) sat in its "not running" state on the rig while the bench panel showed the daemons up with nothing attached. It now starts every warden-* daemon it finds in the panel's own S-number order (ai, automation, modbus, mikrotik, asic, starlink, stratum, flared), each with no arguments as start-stop-daemon runs them on the panel. flare-edge tools/rig-pull-daemons.sh copies a panel's static binaries in. Doing that exposed a latent alias: init pointed warden-modbus's /dev/ttyS4 at /dev/ttyS0 whenever ttyS0 existed, and with --ctl that port IS the control channel, so Modbus polls arrived inside the wake reply and the bridge hung. run.sh now always attaches an RS485 pci-serial (a null chardev without --rs485), and init aliases ttyS4 to ttyS1 when warden.ctl is on the cmdline, ttyS0 otherwise. Verified on a boot with all eight daemons: status json reports automation.engine, mikrotik.backend, mining.available and rs485.available true with the Modbus scan sweeping the empty UART; six daemon-backed pages matched screenshots of the bench panel structurally (0/256 cells differ). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013aHKWzT5EF86RFKRMtAv9n
This commit is contained in:
+11
-2
@@ -126,8 +126,17 @@ fi
|
||||
# Modbus wire.
|
||||
[ -n "$CTL" ] && ARGS+=( -chardev "socket,id=ctl,path=$CTL,server=on,wait=off"
|
||||
-device "pci-serial,chardev=ctl" )
|
||||
[ -n "$RS485" ] && ARGS+=( -chardev "socket,id=rs485,path=$RS485,server=on,wait=off"
|
||||
-device "pci-serial,chardev=rs485" )
|
||||
# Without --rs485 the UART is still there, wired to nothing: warden-modbus
|
||||
# then polls a port that never answers, which is what a panel with an empty
|
||||
# RS485 header looks like, rather than failing to open a port that does not
|
||||
# exist (a different UI state) or, worse, being aliased onto the control
|
||||
# channel by init (which happened: Modbus frames in the wake reply).
|
||||
if [ -n "$RS485" ]; then
|
||||
ARGS+=( -chardev "socket,id=rs485,path=$RS485,server=on,wait=off"
|
||||
-device "pci-serial,chardev=rs485" )
|
||||
else
|
||||
ARGS+=( -chardev "null,id=rs485" -device "pci-serial,chardev=rs485" )
|
||||
fi
|
||||
[ -n "$QMP" ] && ARGS+=( -qmp "unix:$QMP,server=on,wait=off" )
|
||||
|
||||
case "$DISPLAY_MODE" in
|
||||
|
||||
Reference in New Issue
Block a user