Esegui uno script di avvio * dopo * caricando i moduli del kernel in Debian / Raspbian (Raspberry Pi)


0

Sto cercando di creare una schermata di avvio personalizzata per il mio Raspberry Pi seguendo le istruzioni qui .

Ciò comporta l'installazione fbie l'esecuzione in uno init.dscript.

Funziona bene sull'uscita HDMI predefinita. Il fatto è che ho bisogno che l'immagine sia visualizzata sull'Adafruit PiTFT che è su / dev / fb1. L'esecuzione di fbi dal prompt dei comandi con -d /dev/fb1l'opzione funziona e visualizza l'immagine sul PiTFT.

Il problema è che PiTFT viene caricato usando un Kernel Module che, secondo il processo di avvio di Debian, viene caricato dopo l' init.desecuzione degli script. Ciò significa che l'opzione -d non funzionerà perché /dev/fb1non esiste ancora.

Esiste un modo per impostare uno script di avvio da eseguire dopo il caricamento dei moduli del kernel, in modo da poter visualizzare l'immagine su PiTFT?


1
Se non ricevi una risposta qui, potresti provare a chiedere a raspberrypi.stackexchange.com
Nifle,

Risposte:


0

Sto assumendo qui che Raspbian sia simile al normale Debian GNU / Linux e che tu stia usando l'avvio basato sulla dipendenza (non systemd; sebbene questo possa probabilmente essere adattato anche per systemd). Cioè, il tuo ambiente è simile a Debian Wheezy (che è l'attuale versione stabile al momento della stesura di questa risposta).

Durante il processo di avvio, /etc/init.d/kmod viene avviato per caricare tutti i moduli elencati in / etc / modules. Assicurando che lo script abbia kmodcome dipendenza, è possibile trarne vantaggio per assicurarsi che i moduli del kernel richiesti siano caricati prima che lo script venga eseguito.

Per fare ciò, è necessario aggiungere INIT INFOun'intestazione allo script (questo può essere copiato da un altro script) che elenca kmodcome Required-Start(richiesto all'avvio del servizio fornito dallo script) e Required-Stop(richiesto durante l'interruzione del servizio). Dovrai anche impostare Default-Starte possibilmente in modo Default-Stopappropriato.

Una buona intestazione dello script init potrebbe essere qualcosa del tipo:

#! /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 ...

Vedi man 8 insservper maggiori dettagli sulle diverse stanze di informazioni e guarda diversi script di init esistenti per ispirazione.

Dopo aver creato lo script init con un blocco info init appropriato, eseguire sudo update-rc.d mybootdisplay defaultsper aggiungere /etc/init.d/mybootdisplay alla sequenza di avvio.


In alternativa a quanto sopra, puoi fare in modo che il tuo script carichi specificamente i moduli del kernel necessari chiamando modprobeo insmodse stesso prima di essere eseguito fbi. Detto questo, personalmente preferirei rimandare al normale script init per questo, il che significa che la soluzione sopra è probabilmente migliore.


Brillante! Funzionava perfettamente, esattamente quello che stavo cercando. Grazie!
Kayleigh Swift,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.