Quando é o mais antigo que posso lançar um programa no Linux?

1

Eu entendo que o processo init é o primeiro a ser executado e todos os processos são iniciados a partir dele, mas é possível iniciar qualquer programa antes do init? (Possivelmente escrevendo um driver de kernel que é executado cedo na seqüência de inicialização?)

Este programa testaria várias partes de seu próprio hardware e gravaria um arquivo de texto no sistema de arquivos raiz que transmitisse seu status. Se iniciar um programa durante a sequência de inicialização for possível, qual é a melhor maneira de fazer isso, já que o programa que estou executando deve acontecer depois do hardware? A verificação já foi inicializada anteriormente na inicialização?

Eu estou olhando para lançar este programa depois de alguns segundos do computador ligar enquanto todo o sistema leva cerca de 13 segundos para arrancar totalmente. Isso é necessário porque a aplicação é feita para testes de radiação. Durante os testes de radiação, há pulsos do feixe de água que inundam o computador em íons pesados, prótons, nêutrons, etc., e esses pulsos são separados por alguns segundos. Eu preciso lançar um programa antes de o feixe voltar e potencialmente travar o computador causando outra reinicialização.

    
por AustinTronics 13.01.2017 / 03:56

2 respostas

3

Existem maneiras de fazer isso, mas ...

Não faça isso.

Se você tiver um aplicativo de segurança, não confie exclusivamente em uma máquina baseada em Linux para controlá-lo. Você realmente deve ter algum tipo de cão de guarda baseado em HW para gerenciar isso para você.

Por favor.

    
por 13.01.2017 / 04:28
1

Se eu entendi bem, seu computador não consegue inicializar devido a raios de radiação que ocorrem periodicamente e você deseja iniciar o computador entre dois desses eventos para fazer uma verificação. Então, não importa que seu computador eventualmente inicialize, certo?

Você pode fazer isso:

  • criar um programa estático (ou seja, vinculado estaticamente, sem dependências para bibliotecas no disco)
  • coloque em sua initrd image
  • no prompt de inicialização do Linux (use o menu grub para alterá-lo), adicione init=/path/to/your/program

Seu programa iniciará em vez do padrão init , para que sua máquina não inicialize mais, mas seu programa será executado.

Espero que você não precise de nada fornecido por uma instalação padrão do Linux (pontos de montagem diferentes de / , daemons, acesso remoto, console serial, etc) porque você não terá nada disso, é claro, já que seu sistema não começou nada.

Observe que, se você precisar que sua máquina inicialize normalmente após seu código ser executado, provavelmente você poderá exec /sbin/init como uma última instrução.

    
por 13.01.2017 / 04:35