Como forçar a execução de um script quando / não está montado?

5

Eu gravei um dispositivo embutido em linux.

Eu estava experimentando e adicionei meu próprio caminho a /etc/ld.so.conf . O libc que eu incluí no meu caminho não é compatível com este dispositivo em particular, então eu perdi o acesso ssh a ele e é claro que ele não inicializa mais.

Eu posso entrar em uma espécie de modo de download, onde eu posso carregar na memória o bootloader, o kernel, o dtb e o initramfs. Eu posso então dizer ao processador para pular para um determinado endereço na memória, e fazer o boot do sistema.

Isso não resolve o problema, porque assim que o root é alterado do initramfs para a memória flash do dispositivo, as bibliotecas erradas são usadas e o dispositivo para de funcionar.

Meu plano é adicionar um script personalizado ao initramfs que monta o flash, apaga /etc/ld.so.conf e /etc/ld.so.cache . Eu não me importo se o deivice não inicializa então, assim que os arquivos são esvaziados e o dispositivo é reinicializado, ele deve retornar para usar as bibliotecas padrão. Eu posso então conectar via ssh e limpar a bagunça.

Não consegui entender exatamente onde devo injetar minha correção no initramfs, então a pergunta é:

Onde devo inserir algumas linhas do bash para que sejam executadas na inicialização, antes de / ser montado?

    
por Vladimir Cravero 28.12.2017 / 16:52

1 resposta

1

Adicione o código do seu script de shell ao arquivo /init na sua imagem initramfs .

Não use nada muito sofisticado - /bin/sh não será bash , provavelmente será busybox .

Leia as seções que começam com What is initramfs? em este doc.

    
por 30.12.2017 / 04:04

Tags