I am trying to write a bootloader to a USB device.
"dispositivo USB" é ambíguo. Existem dispositivos de áudio e vídeo USB, bem como vários dispositivos de armazenamento. Por "drive USB" você supostamente quer dizer uma unidade Flash USB, em vez de um HDD USB (que sempre tem um MBR no primeiro setor, em vez de um setor de inicialização do sistema de arquivos).
It was already formatted as FAT32, but sector 0 had a completely different structure than described on this webpage
O pendrive parece ter um MBR (Master Boot Record) com uma tabela de partição (no setor 0), e o sistema de arquivos FAT estava localizado em uma partição primária.
Como essa página menciona, são os dumps de setor dos setores de inicialização, que são instalados no primeiro setor de um sistema de arquivos que normalmente residiria em uma partição (ou no primeiro setor de um disquete).
And how can I reproduce this for new USB drives?
Eu posso instalar o setor de inicialização do sistema de arquivos no setor 0 de uma unidade flash USB
-
zerando qualquer MBR no setor zero. Em um problema do sistema Linux
sudo dd if=/dev/zero of=/dev/sdX count=64
Este talvez o passo crucial, especialmente se já houver um MBR. Eu não sei como fazer este passo no Windows. -
Use o Windows para formatar a unidade Flash USB (o Windows insistirá em formatá-la antes de poder usá-la). Eu usei o Win7 para "formatar rapidamente" o disco para obter os resultados abaixo.
O setor 0 resultante na unidade Flash USB se parece com o que você deseja (ou seja, não é um MBR e não há tabela de partições).
Adendo
IamnotsureifIunderstandthedifferencebetweenanMBRandaFilesystembootsectorcorrectly
OMasterBootRecord,MBR,éinstaladonoprimeirosetordeumdispositivodearmazenamentoemmassacompartiçãodePC.Napartefinaldosetor,háumatabeladepartiçõesquedivideodispositivoemdispositivoslógicosmenores.Umapartiçãoserámarcadacomo"ativa" e o código de inicialização no MBR carregará e executará o primeiro setor dessa partição "ativa".
O primeiro setor de uma partição inicializável (ou o primeiro setor de um disquete) contém um gerenciador de inicialização. O sistema de arquivos instalado nessa partição terá o código apropriado nesse primeiro setor para continuar o processo de inicialização quando um sistema operacional for instalado. Quando não há nenhum SO instalado ou próximo programa de inicialização para carregar (por exemplo, BOOTMGR), o carregador de boot envia um texto que indica que não é uma partição / dispositivo inicializável (por exemplo, "Remover discos ou outra mídia". Erro de disco. Pressione qualquer tecla para reiniciar. ")
IOW você deseja que a unidade flash USB se assemelhe a um disquete de alta capacidade em vez de um disco rígido (particionado). Cuidado com os limites do sistema de arquivos, por exemplo O sistema de arquivos mais portátil, o FAT32, é limitado a 32 GB.
FYI Estou ciente desta peculiaridade com drives Flash USB e SDcards, porque a omissão do MBR & A tabela de partição torna essa mídia de armazenamento ilegível em alguns dispositivos incorporados ao Linux (que esperam partições). Tutoriais sobre a inicialização de mídia VFAT inicializável para Linux embarcado geralmente especificam o particionamento & formmatting no Linux para evitar esta peculiaridade do Windows.