Starten Sie den neuesten Linux-Kernel von einer Diskette auf einem 486-Computer



Im August 2019 habe ich einen Wettbewerb der Sing-Along-Woche durchgeführt , um eine MIDI-Datei mit einem Sprachsynthesizer zu synchronisieren, der ein Lied singt. In meinem Lager fand ich eine MQX-32M-MIDI-Karte (Roland MPU-401-Klon), mit der ich MIDI-Signale mit dem Echo II-Sprachsynthesizer in eine Apple II + -Schnittstelle konvertieren wollte, aber schließlich einen Laptop mit USB-MIDI-Schnittstelle verwendete. Ein weiterer Wettbewerb der Pizza Week hat mich daran interessiert, einen 486-Computer zu finden, der in eine Pizzaschachtel passt, und jetzt bot sich eine Gelegenheit.



Die Suche bei eBay war nicht einfach, da kein wirklich guter Suchbegriff gefunden werden konnte. Ich habe die Suche nicht gespeichert, da dieses Projekt keine Priorität hat. Stattdessen hat mich von Zeit zu Zeit etwas dazu inspiriert, zu eBay zu gehen und neue Suchanfragen auszuprobieren. Vor ein paar Wochen entdeckte ich diesen 486-Computer und machte eine Annahme über die Größe des Gehäuses, gemessen an der Höhe der 5,25-Zoll-Bucht. Es ist ziemlich dünn und verfügt über eine dedizierte Karte, mit der andere Karten seitlich eingesetzt werden können. Das Gehäuse ist kürzer als die ISA-Karte. Obwohl dicker als eine Pizzaschachtel, kommt es näher!



Hauptplatine TMC PAT48PG4kommt mit 32 MB RAM (technisch 36 MB, es hat vier 30-Pin-SIMs) und vier Karten: VGA, SoundBlaster, Modem und multifunktionale E / A. Der Verkäufer überprüfte den Computer und verkaufte ihn als nicht funktionierend, da er den POST nicht bestand, obwohl alle Karten funktionierten. Ich brauchte meistens einen Fall, also habe ich mich nicht zu sehr darum gekümmert. Als ich den Computer bekam, musste ich natürlich überprüfen, ob das Motherboard wirklich tot war. Es hat auch bei mir nicht funktioniert, aber dann habe ich festgestellt, dass beim Drücken der Reset-Taste mehrere Fehlertöne auftreten. Ich habe ein anderes Netzteil ausprobiert und die Systeme wurden nach Drücken der Reset-Taste zum Leben erweckt! Es wird immer noch nicht von einem kalten Herunterfahren durch Drücken des Netzschalters gestartet, nicht sicher, obEine schlechte Abdeckung oder eine leichte Beschädigung der Batterie (die Batterie wurde zuvor gewechselt) verhindern, dass die Reset-Leitung nach dem Einschalten der Stromversorgung getrennt wird. Er arbeitete jedoch hart genug, um seine Möglichkeiten zu erkunden.



Mein oberstes Ziel ist es, die neueste Linux- und Python 3-Distribution auf einer "großen" Festplatte zu installieren. Da wir einen 486-Computer haben, ist die Installation der aktuellen Linux-Distribution keine triviale Aufgabe. Die einzigen Linux-Distributionen, die noch die Disketteninstallation unterstützen, sind ziemlich veraltet. Normalerweise habe ich die Disketteninstallation komplett umgangen und einfach den alten Computer über PXE gebootet und dann das System über das Netzwerk installiert. Ich dachte, ich könnte iPXE auf Diskette schreiben und in ISA NIC einfügen, aber iPXE hängt direkt nach dem Booten von Diskette ohne Fehlermeldungen.



Das BIOS ist uralt und hat Probleme mit der Unterstützung der "großen" Festplatte, die ich angeschlossen habe. Die Festplattengröße beträgt 8,45 GB, im BIOS werden jedoch nur 8,0 GB angezeigt. Durch Aktivieren von LBA im BIOS friert der Computer während des POST nach der Festplattenerkennung ein. Win98 fdisk besteht darauf, dass die Festplatte nur 504 MB groß ist. FreeDOS sieht es überhaupt nicht. Ich habe versucht, die Netzwerkkarte vom XTIDE-ROM in den Sockel einzustecken, und XTIDE besteht auch darauf, dass das Laufwerk nicht angeschlossen ist.



Da ich sehen wollte, wie Linux das Laufwerk erkennen würde, musste ich einen Weg finden, um Linux zu booten. Nach ein wenig googeln entdeckte ich die Option make tinyconfigDies macht einen sehr kleinen (aber nutzlosen) Kernel klein genug, um auf eine Diskette zu passen. Ich schaltete ein paar andere Optionen ein, fand ein ausreichend kleines Initramfs und konnte es auf den 486 laden. Wie erwartet sieht Linux die Festplatte und ihre volle Kapazität ohne Probleme.



Der nächste Schritt besteht darin, Linux tatsächlich auf Ihrer Festplatte zu installieren. Ich würde es vorziehen, meine eigene Distribution nicht zu veröffentlichen, aber Sie müssen dies möglicherweise tun. Eine andere Möglichkeit besteht darin, Linux von einer Diskette zu booten und dann den Kernel und initrd von der aktuellen Distribution und kexec zu booten. Aber ich denke, es ist wie eine Neuerfindung des iPXE.



Kompilieren des Linux-Kernels aus dem Quellcode



Eine Zusammenfassung der Schritte zum Erstellen eines Diskettenabbilds:



  • Git-Klon 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


Sie benötigen rootfs, holen sich das System-Image-486 aus dem Linux-Image der Aborigines und extrahieren rootfs.cpio.gz.



Teststart von qemu:



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


Erstellen eines leeren Diskettenbildes:



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


Erstellen von /mnt/syslinux.cfg:



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


Schreiben eines Bildes auf eine Diskette:



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



All Articles