Как отключить консоль ttyAMA0 при загрузке (Raspberry Pi)?

Запуск сервера Ubuntu на Raspberry Pi 3 B+, ​​и я не могу отключить консоль, подключенную к GPIO UART, для начальной последовательности загрузки. Я могу отключить его в общем исполнении (и сделали это), но при каждом перезапуске он включается для диалога «Нажмите любую клавишу, чтобы остановить автозагрузку».

Плата должна быть размещена в автономном транспортном средстве, сопровождающая доска постоянно телеметрия через интерфейс.Если он запускается первым (это всегда происходит, если только он не был намеренно отложен), то RPi не может загрузиться из-за этого диалога.Помимо неудобства отложенного запуска, существует очевидная опасность того, что RPi не сможет восстановиться в случае отключения питания в середине миссии.

Ubuntu Server 18.04.4.LTS Малиновый Пи 3 Б+ GPIO UART (ttyAMA0)

Чтобы отключить автоматический запуск, я сделал следующее:

  • Удалено console=ttyAMA0,115200 из /boot/firmware/nobtcmd.txt
  • Добавлено dtoverlay=pi3-miniuart-bt в /boot /firmware/config.txt (или usercfg.txt, не имеет большого значения)
  • Отключено (скрыто)

Вышеуказанные шаги обеспечили его функциональность только для общего использования. Как предотвратить запуск начальной службы?

0
задан 10 March 2020 в 06:16

3 ответа

В версии 18.04 эта проблема была решена путем полного обхода grub путем добавления этих строк в раздел [ALL] файла /boot/firmware/config.txt :

kernel=vmlinuz
initramfs initrd.img followkernel

I дерево устройств также закомментировано в том же файле, но не уверен, что это необходимо.

2
ответ дан 30 April 2020 в 13:34

Перед загрузкой ядра Pi запускает u-boot, который по умолчанию прерывается данными, полученными через UART, даже если впоследствии он отключен для ядра.

Я решил эту проблему для Ubuntu 20.04 на моем Raspberry Pi 4, изменив u-boot так, чтобы он не прослушивал сигнал прерывания.

Вы можете настроить загрузку без задержки и не проверять прерывание, установив для переменной среды bootdelay значение -2. Для этого вы можете либо скомпилировать новый двоичный файл u-boot, либо подключиться к вашему Pi с помощью последовательной консоли (например, с помощью экрана):

$ sudo screen /dev/ttyUSB0 115200

Загрузите Pi и прервите процесс загрузки, нажав и установите для переменной bootdelay значение -2:

U-Boot> setenv bootdelay -2
U-Boot> saveenv

Команда saveenv сохраняет переменную среды, чтобы сделать изменение постоянным.

Дополнительную информацию о переменных среды u-boot можно найти здесь.

0
ответ дан 27 September 2020 в 17:50

Вот видео, в котором пошагово объясняется, как сделать так, чтобы консоль U-boot не прерывала автозагрузку и не отправляла отладочные сообщения по UART. Я знаю, что ответы только на ссылки не одобряются, поэтому вот краткое описание решения:

Установите зависимости

sudo apt install git make gcc gcc-aarch64-linux-gnu

Git клонирует официальный репозиторий u-boot. В качестве альтернативы можно клонировать мой форк репозитория, где у меня уже есть необходимые изменения для тихой автозагрузки — но если вам нужна последняя версия, то вам нужно клонировать официальный репозиторий и вносить изменения самостоятельно.

git clone --depth 1 git://git.denx.de/u-boot.git

cd u-boot

Найдите файлы конфигурации Raspberry Pi — они зависят от модели, rpi_3_defconfig для Raspberry Pi 3, rpi_4_defconfig для Raspberry Pi 4 и так далее.

Добавьте следующие строки в конец файла:

CONFIG_BOOTDELAY=-2
CONFIG_SILENT_CONSOLE=y
CONFIG_SYS_DEVICE_NULLDEV=y
CONFIG_SILENT_CONSOLE_UPDATE_ON_SET=y
CONFIG_SILENT_U_BOOT_ONLY=y

Первая строка убирает задержку загрузки, поэтому автозагрузка не будет прерываться сообщениями, отправляемыми по интерфейсу UART. Следующие четыре строки включают тихую загрузку, поэтому U-boot не будет отправлять никаких сообщений на сам UART, потому что сообщения, в свою очередь, могут запутать ваше устройство. Осталась еще одна мелочь, установить переменную среды тихой загрузки. Измените файл include/configs/rpi.h

#define CONFIG_EXTRA_ENV_SETTINGS \
    "dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \
    "silent=1\0" \
    ENV_DEVICE_SETTINGS \
    ENV_DFU_SETTINGS \
    ENV_MEM_LAYOUT_SETTINGS \
    BOOTENV

Теперь настройте с помощью

make rpi_3_defconfig

из основной папки репозитория

И соберите с помощью

make CROSS_COMPILE=aarch64-linux-gnu-

Когда процесс сборки завершится, у вас будет u- ботинок.bin, который необходимо переименовать и скопировать на SD-карту Raspberry Pi. Теперь вашему Raspberry Pi не будут мешать никакие сообщения по UART во время загрузки. Функциональность UART после загрузки не пострадает.

1
ответ дан 29 October 2020 в 01:49

Другие вопросы по тегам:

Похожие вопросы: