Execute um script de inicialização * após * carregar os módulos do kernel no Debian / Raspbian (Raspberry Pi)

0

Estou tentando criar uma tela de inicialização personalizada para o meu Raspberry Pi por seguindo as instruções aqui .

Isso envolve instalar fbi e executá-lo em um script init.d .

Isso funciona bem na saída HDMI padrão. O problema é que preciso que a imagem seja exibida no Adafruit PiTFT que está em / dev / fb1. Executando fbi a partir do prompt de comando com a opção -d /dev/fb1 funciona e exibe a imagem no PiTFT.

A questão é que o PiTFT é carregado usando um Módulo do Kernel que, de acordo com o processo de inicialização do Debian, é carregado após a execução dos scripts init.d . Isso significa que a opção -d não funcionará porque /dev/fb1 ainda não existe.

Existe uma maneira de definir um script de inicialização para ser executado após o carregamento dos módulos do kernel, para que eu possa exibir a imagem no PiTFT?

    
por Kayleigh Swift 05.02.2015 / 20:40

1 resposta

0

Estou assumindo aqui que o Raspbian é similar ao Debian GNU / Linux regular, e que você está usando a inicialização baseada em dependência (não o systemd; embora isso provavelmente possa ser adaptado para o systemd também). Ou seja, o seu ambiente é semelhante ao Debian Wheezy (que é a versão estável atual no momento de escrever esta resposta).

Durante o processo de inicialização, o /etc/init.d/kmod é iniciado para carregar todos os módulos listados em / etc / modules. Ao garantir que seu script tenha kmod como dependência, você pode tirar proveito disso para garantir que os módulos do kernel necessários sejam carregados antes do seu script ser executado.

Para fazer isso, você deve adicionar um INIT INFO ao seu script (isso pode ser copiado de outro script), que lista kmod como Required-Start (necessário ao iniciar o serviço fornecido pelo script) e Required-Stop (necessário ao parar o serviço). Você também precisará definir Default-Start e possivelmente Default-Stop apropriadamente.

Um bom cabeçalho de script de inicialização pode ser algo como:

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

Veja man 8 insserv para obter mais detalhes sobre as diferentes sub-rotinas de informações e veja os diferentes scripts de inicialização existentes para inspiração.

Após criar seu script de inicialização com um bloco de informações init apropriado, execute sudo update-rc.d mybootdisplay defaults para adicionar /etc/init.d/mybootdisplay à sequência de inicialização.

Como alternativa alternativa ao acima, você pode fazer com que seu script carregue especificamente o (s) módulo (s) do kernel necessário chamando modprobe ou insmod antes de executar fbi . Dito isso, eu pessoalmente prefiro adiar para o script de inicialização normal para isso, o que significa que a solução acima é provavelmente melhor.

    
por 05.02.2015 / 20:47