从486计算机上的软盘引导最新的Linux内核



早在2019年8月,我进行了一场《唱歌周》比赛,以将MIDI文件与唱歌的语音合成器同步。在我的仓库中,我找到了MQX-32M MIDI卡(Roland MPU-401克隆),我想使用它将MIDI信号通过Echo II语音合成器转换为Apple II +接口,但最终使用带USB MIDI的笔记本电脑。另一场“ 比萨周”比赛使我对找到一台可以放在比萨盒中的486电脑感兴趣,现在机会来了。



在eBay上搜索并不容易,因为它无法提出一个非常好的搜索词。我没有打扰保存搜索,因为该项目不是优先事项。取而代之的是,时不时地有一些事情启发了我去eBay尝试新的搜索。几周前,从5.25英寸托架的高度来看,我发现了这台486电脑,并对该机箱的尺寸进行了假设。它非常薄,并且有专用卡可以横向插入其他卡,并且机箱比ISA卡短。尽管比披萨盒厚,但距离越来越近!



主板TMC PAT48PG4带有32MB的RAM(技术上为36MB,它具​​有四个30针SIM)和四个卡:VGA,SoundBlaster,调制解调器和多功能I / O。卖方检查了计算机,然后将其出售,因为所有卡都可以使用,因为它没有通过POST,因此无法正常工作。我最需要一个案例,所以我不必太在意。当然,当我拿到计算机时,我必须检查主板是否真的坏了。这对我也不起作用,但是后来我发现,如果我按下“重置”按钮,会发出多次错误蜂鸣声。我尝试了另一个电源,然后按下“重置”按钮,使系统重新启动!仍然无法通过按电源按钮从冷关机中启动,不确定是否电池盖不好或轻微损坏(在更换电池之前),以防在打开电源后断开复位线。但是,他努力工作以探索他的可能性。



我的最终目标是在“大型”硬盘驱动器上安装最新的 Linux和Python 3发行版。由于我们有一台486计算机,因此安装当前的Linux发行版并非易事。唯一仍支持软盘安装的Linux发行版已经过时了。我通常完全绕过软盘安装,只是通过PXE引导旧计算机,然后通过网络安装系统。我以为可以将iPXE写入软盘并插入ISA NIC,但是从软盘启动后,iPXE只是挂起而没有任何错误消息。



BIOS很旧,并且在支持插入的“大”硬盘方面遇到了困难。磁盘大小为8.45 GB,但BIOS仅看到8.0 GB。在BIOS中启用LBA会导致计算机在磁盘检测后的POST期间冻结。 Win98 fdisk坚持认为磁盘只有504 MB。 FreeDOS根本看不到它。我尝试将NIC从XTIDE ROM插入插座,并且XTIDE也坚持未连接驱动器。



由于我想了解Linux如何检测驱动器,因此我需要找到一种引导Linux的方法。稍作搜索后,我发现了make tinyconfig选项这使得非常小的(但没用的)内核小到足以容纳在软盘上。我打开了其他几个选项,找到了足够小的initramfs,并能够将其加载到486上。如预期的那样,Linux可以看到磁盘及其全部容量,而不会出现任何问题。



下一步是在硬盘上实际安装Linux。我不希望发布自己的发行版,但您可能需要这样做。另一种可能性是从软盘引导Linux,然后从当前发行版和kexec引导内核和initrd。但是我觉得这就像在重塑iPXE。



从源代码编译Linux内核



创建软盘映像的步骤摘要:



  • 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


您需要rootfs,从Aboriginal Linux映像中获取system-image-486,然后提取rootfs.cpio.gz。



从qemu测试启动:



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


创建一个空的软盘映像:



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


创建/mnt/syslinux.cfg:



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


将映像写入软盘:



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



All Articles