Démarrez le dernier noyau Linux à partir d'une disquette sur un ordinateur 486



En août 2019, j'ai organisé un concours de la semaine de la chanson pour synchroniser un fichier MIDI avec un synthétiseur vocal qui chante une chanson. Dans mon entrepôt, j'ai trouvé une carte MIDI MQX-32M (clone Roland MPU-401) que je voulais utiliser pour convertir des signaux MIDI en une interface Apple II + avec un synthétiseur vocal Echo II, mais j'ai fini par utiliser un ordinateur portable avec USB MIDI. Un autre concours de la semaine de la pizza m'a intéressé à trouver un ordinateur 486 qui tiendrait dans une boîte à pizza, et maintenant une opportunité s'est présentée.



La recherche sur eBay n'a pas été facile car elle ne pouvait pas trouver un très bon terme de recherche. Je n'ai pas pris la peine d'enregistrer la recherche, car ce projet n'est pas une priorité. Au lieu de cela, de temps en temps, quelque chose m'a incité à aller sur eBay et à essayer de nouvelles recherches. Il y a quelques semaines, j'ai repéré cet ordinateur 486 et fait une hypothèse sur la taille du boîtier, à en juger par la hauteur de la baie de 5,25 pouces. Il est assez fin et dispose d'une carte dédiée pour insérer d'autres cartes sur le côté, et le châssis est plus court que la carte ISA. Bien que plus épaisse qu'une boîte à pizza, elle s'en rapproche!



Carte mère TMC PAT48PG4est livré avec 32 Mo de RAM (techniquement 36 Mo, il a quatre SIM à 30 broches) et quatre cartes: VGA, SoundBlaster, modem et E / S multifonctionnelles. Le vendeur a vérifié l'ordinateur et l'a vendu comme non fonctionnel, car il n'a pas réussi le POST, bien que toutes les cartes aient fonctionné. J'avais surtout besoin d'un cas, donc je ne me suis pas trop demandé. Bien sûr, quand j'ai eu l'ordinateur, j'ai dû vérifier si la carte mère était vraiment morte. Cela n'a pas fonctionné pour moi non plus, mais j'ai découvert que si j'appuyais sur le bouton de réinitialisation, il y avait plusieurs bips d'erreur. J'ai essayé une autre alimentation et les systèmes ont pris vie après avoir appuyé sur le bouton de réinitialisation! Il ne démarre toujours pas à partir d'un arrêt à froid en appuyant sur le bouton d'alimentation, je ne sais pas siil y a un couvercle défectueux ou un léger dommage à la batterie (la batterie a été remplacée auparavant) empêche la ligne de réinitialisation d'être déconnectée après la mise sous tension. Cependant, il a travaillé assez dur pour explorer ses possibilités.



Mon but ultime est d'installer la dernière distribution Linux et Python 3 sur un "gros" disque dur. Puisque nous avons un ordinateur 486, l'installation de la distribution Linux actuelle n'est pas une tâche facile. Les seules distributions Linux qui prennent encore en charge l'installation de disquettes sont plutôt obsolètes. J'ai généralement complètement contourné l'installation de la disquette et j'ai simplement démarré l'ancien ordinateur via PXE, puis installé le système sur le réseau. Je pensais que je pourrais écrire iPXE sur une disquette et l'insérer dans ISA NIC, mais iPXE se bloque sans aucun message d'erreur juste après le démarrage à partir de la disquette.



Le BIOS est ancien et a du mal à supporter le "gros" disque dur que j'ai branché. La taille du disque est de 8,45 Go, mais le BIOS ne voit que 8,0 Go. L'activation de LBA dans le BIOS provoque le blocage de l'ordinateur pendant le POST après la détection du disque. Win98 fdisk insiste sur le fait que le disque ne fait que 504 Mo. FreeDOS ne le voit pas du tout. J'ai essayé de brancher la carte réseau de la ROM XTIDE dans la prise, et XTIDE insiste également sur le fait que le lecteur n'est pas connecté.



Puisque je voulais voir comment Linux détecterait le lecteur, je devais trouver un moyen de démarrer Linux. Après quelques recherches sur Google, j'ai découvert l'option make tinyconfigce qui fait un noyau très petit (mais inutile) assez petit pour tenir sur une disquette. J'ai activé quelques autres options, j'ai trouvé un fichier initramfs assez petit et j'ai pu le charger sur le 486. Comme prévu, Linux voit le disque et sa pleine capacité sans aucun problème.



L'étape suivante consiste à installer Linux sur votre disque dur. Je préférerais ne pas publier ma propre distribution, mais vous devrez peut-être le faire. Une autre possibilité est de démarrer Linux à partir d'une disquette, puis de démarrer le noyau et initrd à partir de la distribution actuelle et de kexec dessus. Mais j'ai l'impression que c'est comme réinventer l'iPXE.



Compilation du noyau Linux à partir de la source



Un résumé des étapes pour créer une image de disquette:



  • 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


Vous avez besoin de rootfs, récupérez l' image système-486 de l'image Linux autochtone , extrayez rootfs.cpio.gz.



Tester le démarrage de qemu:



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


Créer une image de disquette vide:



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


Création de /mnt/syslinux.cfg:



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


Ecrire une image sur une disquette:



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



All Articles