Estou usando um computador, o Dell OptiPlex 9010, que vem com o firmware UEFI, mas não suporta a inicialização de dispositivos PCI-Express NVMe.
Eu trabalhei em torno disso usando DUET para criar uma partição de boot EFI em um pendrive, que tem um driver NVMe que ele carrega e, em seguida, executa o programa de inicialização EFI do meu sistema operacional.
Os comandos para fazer isso são atualmente inseridos manualmente. Aqui está o processo:
- O computador está desativado.
- Insira meu pen drive DUET em uma porta USB (eu sempre deixo ligado)
- Ligue o computador
- (O UEFI está configurado para inicializar sempre a partir desse dispositivo USB e ignorar os carregadores de inicialização nas outras unidades em que eu me conectei)
- O dispositivo USB DUET carrega um shell EFI (
EFI Shell version 2.31 [4.653]
)
- (O comando
map
mostra que o dispositivo USB do DUET é montado automaticamente em fs0:
)
- eu carrego o driver NVMe:
load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
- Eu disparo uma atualização de mapeamentos de volume com
map -r
, este comando é concluído com sucesso sem nenhum problema.
- (Meu volume NVMe agora está listado, às vezes como
fs1:
, mas também como fs0:
)
- inicializo o Windows executando:
fs1:\EFI\Boot\Bootx64.efi
- A tela de inicialização do Windows é exibida e o computador é reiniciado para inicializar o Windows
Eu tentei automatizar isso colocando os comandos dentro de um script startup.nsh
(o equivalente EFI do DOS ' autoexec.bat
).
Meu script é este:
echo Step 1
load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
echo Step 2
map -r
echo Step 3
fs0:
echo Step 4
fs0:\EFI\Boot\Bootx64.efi
echo Step 5
(Esse script usa fs0:
em vez de fs1:
, porque quando startup.nsh
é executado, minha unidade NVMe é remapeada para fs0:
, mas quando executo os comandos interativamente ele é mapeado para fs1:
. Não sei porque ou como isso acontece).
Quando eu inicializo e deixo o shell executar startup.nsh
eu recebo esta saída:
startup.nsh> Step 1
startup.nsh> load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
load: Image fs0:\EFI\Drivers\NvmExpressDxe-64.efi loaded at D7C3F000 - Success
startup.nsh> Step 2
startup.nsh> map -r
Device mapping table
fs0 :PciRoot(0x0)/Pci(0x1c,0x4)/...
fs1 :PciRoot(0x0)/Pci(0x1c,0x4)/...
blk0 :PciRoot(0x0)/Pci(0x1c,0x4)/...
...
Shell: Cannot read from file - No Media
Shell> _
Portanto, quando map -r
é executado dentro de startup.nsh
, ele é executado, mas falha com o erro "Não é possível ler o arquivo - Sem mídia" e, em seguida, anula a execução do restante do script (como não há echo Step 3
output), no entanto, se eu digitar manualmente o comando fs0:\EFI\Boot\Bootx64.efi
, o Windows carregará bem.
Eu olhei para a documentação dos Comandos Shell da EFI e não vejo nenhum comando como try
ou on error resume next
ou on error goto :label
- então o script está fadado ao fracasso.