新增:FPGA 升级后热恢复射频链路
This commit is contained in:
Executable
+88
@@ -0,0 +1,88 @@
|
||||
#!/bin/sh
|
||||
# The upgrade shell is forked by the running app and inherits every app socket.
|
||||
# Re-exec after closing inherited non-stdio descriptors so the old process can
|
||||
# release its ports cleanly. Keep upgrade diagnostics on the debug serial port.
|
||||
if [ "$SMOD_FD_CLEAN" != "1" ]; then
|
||||
export SMOD_FD_CLEAN=1
|
||||
exec /bin/sh -c '
|
||||
i=3
|
||||
while [ $i -lt 256 ]; do
|
||||
eval "exec ${i}>&-" 2>/dev/null
|
||||
i=$((i + 1))
|
||||
done
|
||||
exec /bin/sh "$1" </dev/null >/dev/ttymxc0 2>&1
|
||||
' smod_fd_clean "$0"
|
||||
fi
|
||||
|
||||
# Kernel and device-tree updates only take effect after an IMX reboot. Pure
|
||||
# userspace packages keep the clock/RF hardware powered and restart only the
|
||||
# application so RF can recover without a power cycle.
|
||||
need_reboot=0
|
||||
reboot_reason=""
|
||||
|
||||
if [ -f ./src/zImage ]; then
|
||||
need_reboot=1
|
||||
reboot_reason="kernel"
|
||||
echo "kernel image found: reboot required"
|
||||
fi
|
||||
|
||||
if [ -f ./src/imx6ull-S-gpmi-1024x600c7.dtb ]; then
|
||||
need_reboot=1
|
||||
if [ -n "$reboot_reason" ]; then
|
||||
reboot_reason="$reboot_reason+device-tree"
|
||||
else
|
||||
reboot_reason="device-tree"
|
||||
fi
|
||||
echo "device-tree image found: reboot required"
|
||||
fi
|
||||
|
||||
killall logrotateStart daemon_system 2>/dev/null
|
||||
sh remove.sh
|
||||
sh cp.sh
|
||||
sync
|
||||
sleep 2
|
||||
|
||||
if [ "$need_reboot" = "1" ]; then
|
||||
echo "boot component updated ($reboot_reason), reboot IMX now"
|
||||
reboot
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# pthread_setname_np changes the app's /proc comm, so identify it by the exact
|
||||
# executable path. Also match "(deleted)" after cp.sh replaces the running ELF.
|
||||
find_app_pids()
|
||||
{
|
||||
for exe in /proc/[0-9]*/exe; do
|
||||
target=`readlink "$exe" 2>/dev/null` || continue
|
||||
case "$target" in
|
||||
/aw/anywave/app/imx_atsc_app|/aw/anywave/app/imx_atsc_app\ \(deleted\))
|
||||
echo "$exe" | sed 's#/proc/##;s#/exe##'
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
old_pids=`find_app_pids`
|
||||
[ -n "$old_pids" ] && kill $old_pids 2>/dev/null
|
||||
i=0
|
||||
while [ -n "`find_app_pids`" ] && [ $i -lt 15 ]; do
|
||||
sleep 1
|
||||
i=$((i + 1))
|
||||
done
|
||||
old_pids=`find_app_pids`
|
||||
[ -n "$old_pids" ] && kill -9 $old_pids 2>/dev/null
|
||||
while [ -n "`find_app_pids`" ]; do sleep 1; done
|
||||
|
||||
# Remove stale logging pipelines only after the old application has exited.
|
||||
killall loglog 2>/dev/null
|
||||
|
||||
# Start without the legacy argument 1 so the normal no-power-off RF recovery
|
||||
# path rebuilds the TALISE handle and FPGA-side JESD link.
|
||||
sleep 2
|
||||
cd /aw/anywave/app && nohup sh -c './imx_atsc_app 2>&1 | /usr/sbin/loglog /var/module_log/ imx_atsc_app.log 1' </dev/null >/dev/ttymxc0 2>&1 &
|
||||
|
||||
# Restore the system watchdog/housekeeper and log rotation. BusyBox on this
|
||||
# target has no setsid, and /usr/sbin is not in the default PATH.
|
||||
sleep 2
|
||||
nohup sh -c '/usr/sbin/daemon_system 2>&1 | /usr/sbin/loglog /var/module_log/ daemon_system.log 1' >/dev/null 2>&1 &
|
||||
nohup sh -c '/usr/sbin/logrotateStart 2>&1 | /usr/sbin/loglog /var/module_log/ logrotateStart.log 0' >/dev/null 2>&1 &
|
||||
Reference in New Issue
Block a user