Автоматическая прошивка Zynq и запуск приемника — различия между версиями
Korogodin (обсуждение | вклад) (→receiver аки демон) |
Dneprov D (обсуждение | вклад) |
||
(не показаны 5 промежуточных версий 1 участника) | |||
Строка 50: | Строка 50: | ||
Аналогично пишем скрипт для запуска receiver (слизано со скрипта демона rsync): | Аналогично пишем скрипт для запуска receiver (слизано со скрипта демона rsync): | ||
− | <source lang="bash"> | + | |
+ | {{Hider | ||
+ | |title = Содержимое /etc/init.d/receiver | ||
+ | |content = <source lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
### BEGIN INIT INFO | ### BEGIN INIT INFO | ||
Строка 202: | Строка 205: | ||
exit 0 | exit 0 | ||
</source> | </source> | ||
+ | |frame-style = border:1px solid Plum | ||
+ | |title-style = color:black;background-color:lavender;font-weight:bold | ||
+ | |content-style = color:black;background-color:ghostwhite;text-align:left | ||
+ | |footer = | ||
+ | |footer-style = background-color:lightgray;text-align:right | ||
+ | |hidden = | ||
+ | }} | ||
Делаем исполняемым: | Делаем исполняемым: | ||
Строка 227: | Строка 237: | ||
== В случае Импалы == | == В случае Импалы == | ||
+ | В Импале есть ряд отличий: | ||
+ | * нет некоторых скриптов SystemV; | ||
+ | * вместо bash используется sh; | ||
+ | * после перезагрузки стирается /tmp, | ||
+ | поэтому скрипт иной: | ||
{{Hider | {{Hider | ||
|title = Содержимое /etc/init.d/receiver | |title = Содержимое /etc/init.d/receiver | ||
Строка 233: | Строка 248: | ||
# | # | ||
# | # | ||
− | + | ||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin | ||
DAEMON=/tmp/receiver | DAEMON=/tmp/receiver | ||
+ | DAEMON_TAG=/home/root/receiver | ||
NAME=receiver | NAME=receiver | ||
DESC="GNSS Receiver" | DESC="GNSS Receiver" | ||
PIDFILE=/var/run/receiver.pid | PIDFILE=/var/run/receiver.pid | ||
− | + | ||
REC_EXTRA_ARGS= | REC_EXTRA_ARGS= | ||
NO_START=0 | NO_START=0 | ||
+ | |||
+ | test -x "$DAEMON_TAG" || exit 0 | ||
+ | |||
+ | test -x "$DAEMON" || cp "$DAEMON_TAG" "$DAEMON" | ||
test ! -r /etc/default/receiver || . /etc/default/receiver | test ! -r /etc/default/receiver || . /etc/default/receiver | ||
Строка 256: | Строка 276: | ||
esac | esac | ||
done | done | ||
− | |||
case "$1" in | case "$1" in | ||
start) | start) | ||
echo -n "Starting $DESC: " | echo -n "Starting $DESC: " | ||
− | start-stop-daemon - | + | start-stop-daemon --start --quiet --background \ |
− | + | --pidfile $PIDFILE --make-pidfile \ | |
− | + | --exec "$DAEMON" -- $KEY_ARGS \ | |
+ | --no-detach --daemon $REC_EXTRA_ARGS | ||
echo "$NAME." | echo "$NAME." | ||
;; | ;; | ||
Строка 291: | Строка 311: | ||
|frame-style = border:1px solid Plum | |frame-style = border:1px solid Plum | ||
|title-style = color:black;background-color:lavender;font-weight:bold | |title-style = color:black;background-color:lavender;font-weight:bold | ||
− | |content-style = color:black;background-color:ghostwhite;text-align: | + | |content-style = color:black;background-color:ghostwhite;text-align:left |
|footer = | |footer = | ||
|footer-style = background-color:lightgray;text-align:right | |footer-style = background-color:lightgray;text-align:right | ||
+ | |hidden = 1 | ||
}} | }} | ||
+ | |||
+ | Перед исполнением скрипт проверяет, есть ли /tmp/receiver. Если нет - копирует туда файл /home/root/receiver. | ||
[[Category:HOWTO]] | [[Category:HOWTO]] | ||
[[Category:Oryx]] | [[Category:Oryx]] | ||
[[Category:Impala]] | [[Category:Impala]] |
Текущая версия на 11:57, 25 ноября 2020
Накопились претензии к степени автоматизации работы с ПНП.
Во-первых, ПЛИС'овская часть Zynq'а шьется через процессор командой типа:
Что приходится исполнять после каждой перезагрузки ящика.
Во-вторых, хотелось бы, чтобы ПНП сразу мог начать работать после подачи питания.
В-третьих, на приемной стороне приходится вручную запускать srns_parse_all, tail и матлабовские скрипты.
[править] Автоматическая прошивка ПЛИС
На ум приходит два способа автоматически прошить ПЛИС при запуске ОС: через cron и через init.d. Т.к. далее воспользуемся init для старта службы receiver, то для единообразия и ПЛИС будем шить так.
В Debian нашего модуля по умолчанию используется второй run-level. Напишем скрипт, который будет выполняться при запуске. Для этого в /etc/init.d создаем файл burnzynq:
### BEGIN INIT INFO
# Provides: burnedzynq
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start:
# Should-Stop:
# Default-Start: 2
# Default-Stop:
# Short-Description: Load .bit to Zynq
### END INIT INFO
echo Zynq burning...
cat /tmp/somz.bit > /dev/xdevcfg
Файл делаем исполняемым:
Далее добавляем ссылку на него в /etc/rc2.d специальной командой:
Здесь defaults - воспользоваться Default-Start/Default-Stop.
В результате в /etc/rc2.d получаем файл S01burnzynq -> ../init.d/burnzynq.
Если потребуется обновить ссылки на burnzynq или вообще отказаться от его использования, то выполняем:
Выключаем/включаем питание приемника. После загрузки ПЛИС готова к работе.
[править] receiver аки демон
Аналогично пишем скрипт для запуска receiver (слизано со скрипта демона rsync):
Делаем исполняемым:
Создаем конфигурационный файл (пока не используется):
Создаем ссылки:
Выключаем/включаем питание приемника. Убеждаемся, что приемник отсылает пакеты.
Теперь с приемником можно работать как со службой:
Например:
[ ok ] receiver is running.
[править] В случае Импалы
В Импале есть ряд отличий:
- нет некоторых скриптов SystemV;
- вместо bash используется sh;
- после перезагрузки стирается /tmp,
поэтому скрипт иной:
Перед исполнением скрипт проверяет, есть ли /tmp/receiver. Если нет - копирует туда файл /home/root/receiver.