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.