dmitrij99925
dmitrij99925
124 просмотров0 комментариев

RepkaPi в качестве логгера последовательного порта

Постановка задачи #

Основная моя деятельность вращается вокруг устройств на базе контроллеров семейства ESP32, и иногда мне нужно отловить проблемы, которые возникают в течение длительной работы устройства, но нет возможности поставить компьютер/ноутбук записывать логи.
К тому же, при попытке подключения к устройству терминальной программой произойдет передергивание линий RTS/DTR, что приведет к перезагрузке тестируемого устройства, что уничтожит данные для отладки/воспроизведения проблемы.

Конечно, существуют решения, которые позволят отправлять напрямую с устройства логи в облако, однако есть ряд ограничений на это:

  • ОЗУ на устройстве не хватает для формирования логов собственной работы
  • Облачный провайдер накладывает ограничения на количество сообщений в день от устройства
  • Flash-память устройства слишком медленная

Когда возникла проблема с устройстве на ESP32, а попытка подключения ноутбуком привела к сбросу устройства, это стало последней каплей для реализации данных скриптов.

Введение #

Данные скрипты рассчитаны на работу на системе с системой инициализации systemd (например, Ubuntu). Для работы этих скриптов предполагается, что система уже настроена и в системе пользователю уже даны права на dialout (иначе не будет доступа к порту).

Набор скриптов для логирование умеет:

  1. Автоматически подключаться к устройству при обнаружении
  2. Автоматическая очистка старых логов старше 10 дней
  3. Копирование накопленных логов на внешнюю USB-флешку
  4. Не меняет состояния линий RTS/DTR, соответственно, не формирует сигналов сброса

Использование #

Просто включить одноплатный компьютер, который будет собирать логи с устройства, и подключить к нему. Для снятия логов нужно вставить в другой USB-порт флешку, отформатированную в FAT32 с названием USBLOGS (это важно!), желательно с индикатором, дождаться пока индикатор не успокоится (около минуты), затем вынуть флешку и смотреть логи на другом компьютере.

Развертывание скриптов #

Необходимые зависимости #

  • bash
  • stty

Подготовка скриптов #

Для выполнения действий нужно скачать/склонировать репозиторий, а эатем открыть папку в терминале.

  1. Для начала дайте права на выполнение этих скриптов:
chmod +x serial_logger.sh
chmod +x cleanup-logs.sh
chmod +x copy_logs_to_usb.sh
  1. В скрипте serial_logger.sh исправьте переменные DEVICE и BAUDRATE под Ваши нужды
  2. В скрипте copy_logs_to_usb.sh исправьте переменную USER_HOME на домашнюю папку Вашего пользователя, из-под которого предполагается логирование
  3. В serial-logger.service замените User на имя Вашего пользователя, а ExecStart - на АБСОЛЮТНЫЙ путь к скрипту serial_logger.sh
  4. В cleanup-logs.service замените User на имя Вашего пользователя, а ExecStart - на АБСОЛЮТНЫЙ путь к скрипту cleanup-logs.sh
  5. В 99-copy-logs.rules замените /home/dmitrij999/serial_logger/copy_logs_to_usb.sh на АБСОЛЮТНЫЙ путь к скрипту copy_logs_to_usb.sh
  6. Скрипт serial_logger.sh можно проверить, запустив так:
bash ./serial_logger.sh

Установка скриптов в систему на автозапуск #

  1. Установите сервисы systemd: Находясь в папке serial_logger:
sudo cp serial-logger.service /etc/systemd/system/serial-logger.service
sudo cp cleanup-logs.service /etc/systemd/system/cleanup-logs.service
sudo cp cleanup-logs.timer /etc/systemd/system/cleanup-logs.timer
  1. И активируйте их:
sudo systemctl daemon-reload
sudo systemctl enable --now serial-logger.service
sudo systemctl enable --now cleanup-logs.timer
  1. Установите сервис в udev (нужен для автоматического копирования логов на флешку): Находясь в папке serial_logger:
sudo cp 99-copy-logs.rules /etc/udev/rules.d/99-copy-logs.rules
  1. И перезагрузите правила udev:
sudo udevadm control --reload
sudo udevadm trigger

Опционально для RepkaPi #

После установки RepkaOS по умолчанию активировано графическое окружение. Рекомендуется настроить из графического окружения подключение к сети, статический адрес (если нужно), а затем отключить графическое окружение командой:

sudo systemctl set-default multi-user.target

Изменение вступит в силу после перезагрузки. Отключение графического окружение нужно для снятия нагрузки с процессора и ОЗУ.

Изменить имя искомой флешки #

Если нужно по какой-то причине поменять имя искомой флешки, то нужно править имя в двух местах:

  1. В скрипте - переменная FLASH_LABEL_TO_COPY
  2. В udev-правиле - в переменной ENV{ID_FS_LABEL}=="USBLOGS" подставить свое значение вместо USBLOGS.

Что дальше? #

Данный набор скриптов реализует необходимую и достаточную реализацию для сбора логов и изучения. Однако появляется и возможность “живого" просмотра логов, например, с помощью команды:

dmitrij999@Repka-Pi:~$ tail -f logs/14-06-2025.log

При этом, подключить одноплатник либо к Ethernet, либо к WiFi, либо вообще сделать автономным логгером, который раздает свою точку доступа WiFi, который даст возможность живого просмотра логов со смартфона.
Но это уже за пределами этой статьи;)

Ссылка на репозиторий с набором скриптов


Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Темы

Навигация

ВойтиРегистрация