Como criar uma imagem de disquete e sobrescrever a MBR

3

Estou tentando criar uma imagem de disquete com um sistema de arquivos em funcionamento para que eu possa testar um carregador de inicialização de dois estágios. Quando eu tento montar o disquete e, em seguida, cp o segundo binário sobre ele, mount fica todo infeliz. Aqui estão os passos que estou tentando usar:

dd if=/dev/zero of=floppy.img bs=512 count=2948
mkfs.vfat floppy.img
dd if=boot1.bin of=floppy.img bs=512 count=1
su -c 'mount -t msdos -o loop floppy.img /mnt'

dmesg | tail

[591461.669870] FAT: invalid media value (0x09)
[591461.669876] VFS: Can't find a valid FAT filesystem on dev loop0.
    
por Chris 15.08.2011 / 03:36

2 respostas

3

Você está aprendendo alguns dos problemas com o uso de um conjunto de ferramentas POSIX para esse tipo de coisa. Instalar um programa de bootstrap no VBR de um volume não é uma questão de apenas culpar um setor cheio de dados no setor # 0 de uma imagem. Você deve preservar o existente BIOS Parameter Block , lidando com as diversas variantes do BPB.

As ferramentas que vêm com sistemas operacionais como MS / PC / DR-DOS, OS / 2 e Windows NT sabem tudo sobre coisas como BPBs. Suas várias ferramentas sys , sysinstx , bootsect e outras ferramentas sabem como as coisas devem ser manipuladas. Mas se você usar ferramentas POSIX como dd , terá que manualmente informar quais bytes devem ser sobrescritos no VBR e quais preservar como estão.

ms-sys sabe como preservar BPBs também, mas não Você tem a opção de aplicar um programa de bootstrap personalizado. Vá e solicite-o como um novo recurso.

    
por 15.08.2011 / 05:11
2

Na verdade, eu escrevi um gerenciador de inicialização de disquete de dois estágios há muito tempo. Apesar do que várias especificações podem dizer (da Microsoft ou de outros "especialistas"), o primeiro setor do disquete deve estar em conformidade com um disquete padrão do MS-DOS com um BIOS Parameter Block, BPB. A mensagem de erro que você está vendo parece indicar que o "boot1.bin" não atende a esse requisito. A única coisa que você pode realmente mudar no setor de boot floppy cerca de 400 ou mais bytes de código. Você não pode personalizar os valores BPB do que o MS-DOS ou o Windows usa para disquetes.

Embora exista um valor para indicar o número de setores que o código de inicialização ocupa, cada BIOS e outro software que encontrei apenas esperam ou toleram um setor reservado para inicialização. Duas cópias do FAT são necessárias e, em seguida, o primeiro setor do diretório raiz. O método que usei para armazenar o carregador de boot secundário era alocar alguns setores seguindo o diretório raiz e marcá-los como "ruins" no FAT. Isso realizou os seguintes objetivos:

  1. os setores adicionais usados pelo carregador secundário estavam em um local fixo no disquete e eram conhecidos pelo boot de primeiro estágio, que tinha que ler / carregá-los.

  2. ocultou o carregador secundário dos usuários.

  3. tornou o carregador secundário indetectável.

  4. o disquete era utilizável em DOS e montável em Unix.

Os disquetes BTW têm um setor de inicialização. Não é chamado de MBR, pois não há tabela de partições.

    
por 15.08.2011 / 05:33