O UEFI: NTFS é um carregador de inicialização genérico, projetado para permitir a inicialização de partições NTFs ou Exfat, no modo UEFI puro, mesmo que o seu sistema não o suporte nativamente. Isso se destina principalmente ao uso com Rufus, mas também pode ser usado de forma independente.
Em outras palavras, o UEFI: NTFS foi projetado para remover a restrição, que a maioria dos sistemas UEFI possui, apenas fornecendo suporte de inicialização de uma partição FAT32 e permitir a capacidade de inicializar também nas partições NTFS.
Isso pode ser usado, por exemplo, para usar um mídia de instalação do Windows NTFS, contendo uma install.wim .
Como um aparte, e como parece existir muitas informações imprecisas sobre isso na Internet, é preciso enfatizar que não há absolutamente nada nas especificações da UEFI que realmente força o uso do FAT32 para a inicialização da UEFI. Pelo contrário, a UEFI inicializará com prazer qualquer sistema de arquivos, desde que seu firmware tenha um driver para ele. Como tal, é apenas a escolha dos fabricantes de sistemas, que tendem a incluir apenas um driver para o FAT32, que limita os recursos de inicialização padrão da UEFI, e isso leva muitos a acreditarem erroneamente que apenas o FAT32 pode ser usado para a inicialização da UEFI.
No entanto, como demonstrado neste projeto, é muito possível contornar essa limitação e permitir que qualquer firmware UEFI inicialize a partir de sistemas de arquivos não-FAT32.
A maneira como a UEFI: NTFS funciona, em conjunto com Rufus, é a seguinte:
/efi/boot/bootia32.efi , /efi/boot/bootx64.efi , /efi/boot/bootarm.efi or /efi/boot/bootaa64.efi that resides there. Isso alcança exatamente o mesmo resultado de se o firmware da UEFI tivesse suporte nativo para o NTFS e pudesse inicializar diretamente. O UEFI: NTFS é compatível com Boot Secure e foi assinado pela Microsoft.
Você pode encontrar binários assinados de inicialização segura (para x86_64, x86_32 e arm64) no arquivo uefi-ntfs.img de rufus.
Observe, no entanto, que, devido às restrições arbitrárias da Microsoft em relação ao GPLV3, os únicos drivers que atualmente podem ser usados com o UEFI: NTFS em um ambiente de inicialização seguro são os NTFS-3G licenciados GPLV2. Especialmente, os drivers NTFs e EXFAT dos EFIFs, derivados do GRUB 2.0 e, portanto, GPLV3, não podem ser enviados à Microsoft para assinar.
Finalmente, as políticas atuais de assinatura de inicialização segura da Microsoft requerem validação adicional para o braço de 32 bits; portanto, os binários de braço de 32 bits não são assinados pela inicialização segura. Isso não afeta o braço de 64 bits (também conhecido como ARM64 / AARCH64 / AA64 ), para o qual temos binários de inicialização totalmente segura.
Por conveniência, o projeto pode ser compilado contra a biblioteca GNU-EFI em vez do EDK2, portanto, pode ser necessário inicializar os submódulos Git com:
git submodule update --init
Se estiver usando a solução do Visual Studio ( .sln ), basta pressionar F5 para que o aplicativo seja compilado e iniciado no emulador Qemu.
Se estiver usando o GCC com o GNU-EFI, você poderá simplesmente emitir make .
Se necessário, você também pode emitir algo como make ARCH=<arch> CROSS_COMPILE=<tuple> onde <arch> é um dos ia32 , x64 , arm ou aa64 e Tupla é o do seu compilador cruzado (por exemplo, aarch64-linux-gnu- ).
Você também pode depurar o Qemu especificando qemu para sua make . Esteja atento, no entanto, que isso liga o modo especial _DEBUG e você deve ser feito sem invocar qemu para produzir binários de liberação adequados.
Se estiver usando o VS2022 com o EDK2 no Windows, assumindo que seu diretório EDK2 esteja em D:edk2 e que nasm reside em D:edk2BaseToolsBinWin32 , você poderá emitir:
set EDK2_PATH=D:edk2
set NASM_PREFIX=D:edk2BaseToolsBinWin32
set WORKSPACE=%CD%
set PACKAGES_PATH=%WORKSPACE%;%EDK2_PATH%
%EDK2_PATH%edksetup.bat reconfig
build -a X64 -b RELEASE -t VS2022 -p uefi-ntfs.dsc
Se estiver usando o GCC com EDK2 no Linux, assumindo que seu diretório EDK2 reside em /usr/src/edk2 :
export EDK2_PATH="/usr/src/edk2"
export WORKSPACE=$PWD
export PACKAGES_PATH=$WORKSPACE:$EDK2_PATH
. $EDK2_PATH/edksetup.sh --reconfig
build -a X64 -b RELEASE -t GCC5 -p uefi-ntfs.dsc
Você pode encontrar uma imagem de partição de gordura pronta para uso, contendo as versões x86 e braço do carregador UEFI: NTFS (32 e 64 bits) e driver no projeto Rufus, Under /Res /UEFI.
Se você criar uma partição do mesmo tamanho no final da sua unidade e copiar uefi-ntfs.img lá (no modo DD, é claro), você deve ter tudo o que precisa para fazer a primeira partição do NTFS nessa unidade UEFI inicializável.
Lembre -se de que, para ativar o suporte de compilação ARM ou ARM64 no Visual Studio 2022, você deve ir à tela de componentes individuais no aplicativo de configuração e selecionar as ferramentas de construção do ARM/ARM64 lá, pois não aparecem na tela de cargas de trabalho padrão: