Я пытаюсь создать собственный загрузочный экран для моего Raspberry Pi, следуя инструкциям здесь.

Это включает в себя установку fbi и запуск его в сценарии init.d

Это прекрасно работает на выходе HDMI по умолчанию. Дело в том, что мне нужно, чтобы изображение отображалось на Adafruit PiTFT, который находится на /dev /fb1. Запуск fbi из командной строки с -d /dev/fb1 работает и отображает изображение на PiTFT.

Проблема заключается в том, что PiTFT загружается с использованием модуля ядра, который, согласно процессу загрузки Debian, загружается после запуска сценариев init.d Это означает, что ключ -d не будет работать, потому что /dev/fb1 еще не существует.

Можно ли настроить запуск сценария после загрузки модулей ядра, чтобы я мог отображать изображение на PiTFT?

1 ответ1

0

Здесь я предполагаю, что Raspbian похож на обычный Debian GNU/Linux, и что вы используете загрузку на основе зависимостей (не systemd, хотя, вероятно, это можно адаптировать и для systemd). То есть ваша среда похожа на Debian Wheezy (которая является текущей стабильной версией на момент написания этого ответа).

В процессе загрузки запускается /etc/init.d/kmod для загрузки всех модулей, перечисленных в /etc /modules. Убедившись, что в вашем скрипте есть зависимость от kmod , вы можете воспользоваться этим, чтобы убедиться, что необходимые модули ядра загружены перед выполнением вашего скрипта.

Чтобы сделать это, вы должны добавить заголовок INIT INFO в ваш скрипт (его можно скопировать из другого скрипта), который перечисляет kmod как Required-Start (требуется при запуске службы, предоставляемой скриптом) и Required-Stop (требуется при остановке оказание услуг). Вам также необходимо установить Default-Start и, возможно, Default-Stop соответствующим образом.

Хороший заголовок сценария инициализации может выглядеть примерно так:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          mybootdisplay
# Required-Start:    kmod
# Required-Stop:     kmod
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 
# Description:       
### END INIT INFO
# ... your magic goes down here ...

См. man 8 insserv для получения более подробной информации о различных информационных разделах и посмотрите на различные существующие сценарии инициализации для вдохновения.

После создания сценария инициализации с соответствующим информационным блоком инициализации запустите sudo update-rc.d mybootdisplay defaults чтобы добавить /etc/init.d/mybootdisplay в последовательность загрузки.


В качестве альтернативы вышеприведенному, вы можете сделать так, чтобы ваш скрипт специально загружал необходимые модули ядра, вызывая modprobe или insmod непосредственно перед запуском fbi . Тем не менее, я лично предпочел бы отложить для этого обычный сценарий инициализации, что означает, что приведенное выше решение, вероятно, лучше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .