Inicialize o kernel Linux mais recente de um disquete em um computador 486



Em agosto de 2019, realizei uma competição da Semana Sing-Along para sincronizar um arquivo MIDI com um sintetizador de voz que canta uma música. No meu armazém, encontrei uma placa MIDI MQX-32M (clone Roland MPU-401) que queria usar para converter sinais MIDI para a interface Apple II + com sintetizador de fala Echo II, mas acabei usando um laptop com interface USB MIDI. Outra competição da Pizza Week me interessou em encontrar um computador 486 que cabesse em uma caixa de pizza, e agora uma oportunidade se apresentava.



Pesquisando no eBay não foi fácil, porque não conseguiu um termo de pesquisa realmente bom. Não me preocupei em salvar a pesquisa, pois esse projeto não é uma prioridade. De vez em quando, algo me inspirava a ir ao eBay e tentar novas pesquisas. Algumas semanas atrás, vi esse computador 486 e assumi o tamanho do caso, a julgar pela altura da baia de 5,25 polegadas. É muito fino e possui um cartão dedicado para inserir outros cartões lateralmente, e o chassi é mais curto que o cartão ISA. Embora mais grosso que uma caixa de pizza, está chegando perto!



Placa-mãe TMC PAT48PG4vem com 32 MB de RAM (tecnicamente 36 MB, possui quatro SIMs de 30 pinos) e quatro cartões: VGA, SoundBlaster, modem e E / S multifuncional. O vendedor verificou o computador e o vendeu como não funcionando, pois não passou no POST, embora todos os cartões funcionassem. Eu principalmente precisava de um caso, então não me incomodei muito. Obviamente, quando recebi o computador, tive que verificar se a placa-mãe estava realmente morta. Também não funcionou para mim, mas descobri que, se eu pressionar o botão de redefinição, há vários bipes de erro. Tentei outra fonte de alimentação e os sistemas ganharam vida depois de pressionar o botão Redefinir! Ele ainda não inicializa com o desligamento a frio pressionando o botão liga / desliga, não tenho certeza sehá uma tampa defeituosa ou um leve dano à bateria (a bateria foi trocada antes) impede que a linha de redefinição seja desconectada após ligar a energia. No entanto, ele trabalhou duro o suficiente para explorar suas possibilidades.



Meu objetivo final é instalar a distribuição Linux e Python 3 mais recente em um disco rígido "grande". Como temos um computador 486, instalar a distribuição atual do Linux não é uma tarefa trivial. As únicas distribuições Linux que ainda suportam instalação de disquete estão desatualizadas. Normalmente, eu ignorei completamente a instalação do disquete e apenas inicializei o computador antigo através do PXE e depois instalei o sistema pela rede. Eu pensei que poderia escrever o iPXE para disquete e inserir no ISA NIC, mas o iPXE trava sem nenhuma mensagem de erro logo após a inicialização do disquete.



O BIOS é antigo e luta com o suporte para o "grande" disco rígido conectado. O tamanho do disco é 8,45 GB, mas o BIOS vê apenas 8,0 GB. A ativação do LBA no BIOS faz com que o computador congele durante o POST após a detecção do disco. O Win98 fdisk insiste que o disco tem apenas 504 MB. O FreeDOS não vê nada disso. Tentei conectar a NIC da ROM do XTIDE no soquete e o XTIDE também insiste que a unidade não está conectada.



Como eu queria ver como o Linux detectaria a unidade, eu precisava encontrar uma maneira de inicializar o Linux. Depois de pesquisar um pouco, descobri a opção make tinyconfigo que torna um kernel muito pequeno (mas inútil) pequeno o suficiente para caber em um disquete. Liguei algumas outras opções, encontrei um initramfs pequeno o suficiente e pude carregá-lo no 486. Como esperado, o Linux vê o disco e sua capacidade total sem problemas.



O próximo passo é instalar o Linux no seu disco rígido. Eu preferiria não liberar minha própria distribuição, mas você pode precisar fazê-lo. Outra possibilidade é inicializar o Linux a partir de um disquete e, em seguida, inicializar o kernel e o initrd da distribuição atual e o kexec. Mas sinto que é como reinventar o iPXE.



Compilando o kernel do Linux a partir do código-fonte



Um resumo das etapas para criar uma imagem de disquete:



  • git clone git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git



    • v5.8-rc2-1-g625d3449788f 
  • make ARCH=x86 tinyconfig
  • make ARCH=x86 menuconfig



    • 486: CONFIG_M486=y



      • Processor type and features > Processor family > 486
    • tty: CONFIG_TTY=y

      • Device Drivers > Character devices > Enable TTY
    • printk: CONFIG_PRINTK=y



      • General Setup > Configure standard kernel features (expert users) > Enable support for printk
    • initramfs: CONFIG_INITRAMFS_COMPRESSION_GZIP=y



      • General Setup > Initial RAM filesystem and RAM disk (initramfs/initrd) support > Support initial ramdisk/ramfs compressed using gzip
    • ELF: CONFIG_BINFMT_ELF=y

      • Executable file formats > Kernel support for ELF binaries
  • make ARCH=x86 bzImage


Você precisa do rootfs, pegue o system-image-486 na imagem do Aboriginal Linux , extraia rootfs.cpio.gz.



Teste a inicialização do qemu:



qemu-system-i386 -kernel arch/x86/boot/bzImage -initrd ../system-image-486/rootfs.cpio.gz


Criando uma imagem de disquete vazia:



dd if=/dev/zero of=linux-boot.img bs=1k count=1440
mkdosfs linux-boot.img
syslinux --install linux-boot.img
mount -o loop linux-boot.img /mnt
cp arch/x86/boot/bzImage /mnt
cp rootfs.cpio.gz /mnt


Criando /mnt/syslinux.cfg:



DEFAULT linux
LABEL linux
 SAY Now booting the kernel from SYSLINUX...
 KERNEL bzImage
 APPEND initrd=rootfs.cpio.gz


Gravando uma imagem em um disquete:



umount /mnt
fdformat /dev/fd0
ddrescue -f -D linux-boot.img /dev/fd0



All Articles