Usando o Shell UEFI para restaurar a configuração de inicialização

1

Estou usando uma placa incorporada que suporta UEFI. É uma nova placa e vem com American Megatrends BIOS e um shell UEFI (estou mais acostumado a lidar com um bootloader e não com um BIOS de PC em uma placa embarcada).

Os detalhes do tabuleiro não são tão importantes.

O que é importante é que, sob certas condições (no software, enquanto escrevemos para o espaço PCI de maneira incorreta), podemos equipar o setor de inicialização no Flash onboard.

Como este hardware será uma peça REMOTA de hardware, não há a opção de ir a lugar algum, aterrissar em um USB e reflashing essa coisa.

Eu gostaria de escrever um script para fazer o BIOS Shell fazer isso. Se a máquina for lavada e tivermos corrompido o setor de inicialização em um sistema implementado, eu gostaria de executar automaticamente uma sequência de restauração. Isso é possível? Posso fazer isso com um shell UEFI? Isso é factível de alguma forma?

Agora eu entendo que o UEFI foi criado para fornecer inicialização 'segura', posso estar fazendo o oposto do que ele pretendia fazer!

    
por Xofo 10.05.2013 / 23:43

1 resposta

2

EFI não usa o setor de inicialização do disco. Assim, suspeito que você entenda mal o que está acontecendo com o seu sistema. Meu palpite é que você está realmente danificando as entradas da NVRAM que mantêm a ordem de inicialização do dispositivo. A maneira mais fácil de lidar com esse problema é não usar essas entradas e, em vez disso, nomear seu carregador de boot EFI EFI/BOOT/bootx64.efi (ou mais geralmente, boot{arch}.efi , onde {arch} é um código de arquitetura; x64 é o código de arquitetura para x86-64). Se você não quer fazer isso por algum motivo, e se o seu shell EFI é um shell versão 2 , você pode usar o comando bcfg em um shell EFI roteiro para fazer o trabalho. Este comando é documentado em diferentes extensões em vários lugares, como o wiki do Arch Linux e site da Intel. Infelizmente, a versão anterior do shell EFI não suporta o comando bcfg , então esta opção não funcionará com ele, embora seja possível extrair o código relevante do código-fonte do TianoCore e criar um comando standalone bcfg que você poderia usar com um shell mais antigo.

Se você realmente precisa escrever para o MBR, escrever um aplicativo EFI em C pode ser uma escolha melhor do que tentar fazer isso no shell EFI. Há muita documentação de programação EFI por aí, mas a maior parte é como páginas de manual do Unix - presume-se que você já conhece o tópico e só precisa verificar os detalhes. Escrevi uma breve introdução ao tutorial, mas é muito básica e não abrange o disco I / O. (Você poderia usar isso e o código-fonte para gptsync , que está incluído nas últimas versões de rEFInd, , para aprender a ler e gravar o MBR de um disco.)

Se eu entendi corretamente, o que quer que você faça (a menos que o uso do nome de arquivo de fallback seja suficiente), você precisa encaixá-lo na seqüência de inicialização normal. Isso seria possível com um programa shell EFI lançado como padrão ou como um programa binário; mas você terá que ter certeza de que seu programa personalizado será concluído com o lançamento do gerenciador de inicialização "real" ou que o carregador de inicialização "real" será iniciado após o novo programa.

    
por 11.05.2013 / 02:47