486コンピューターのフロッピーディスクから最新のLinuxカーネルを起動する



2019年8月に私はSing-Along Weekコンテスト開催して、MIDIファイルを歌を歌うスピーチシンセサイザーと同期させました。私の倉庫で、MQX-32M MIDIカード(Roland MPU-401クローン)を見つけました。これを使用して、MIDI信号をEcho IIスピーチシンセサイザーを備えたApple II +インターフェイスに変換しましたが、USB MIDIインターフェイスを備えたラップトップを使用することになりました。別のピザウィークコンテストで、ピザの箱に収まる486コンピューターを見つけることに興味を持ち、今ではチャンスが訪れました。



eBayでの検索は、本当に良い検索語句を思い付かなかったため、簡単ではありませんでした。このプロジェクトは優先事項ではないので、検索を保存する必要はありませんでした。その代わり、時々、何かが私にeBayに行って新しい検索を試すように促しました。数週間前、私はこの486コンピュータを見つけ、5.25インチベイの高さから判断して、ケースのサイズを推測しました。それは非常に薄く、他のカードを横に挿入するための専用カードがあり、シャーシはISAカードより短いです。ピザの箱よりも厚みがありますが、間近に迫っています!



マザーボードTMC PAT48PG4には、32MBのRAM(技術的には36MB、4つの30ピンSIM)と4つのカード(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をハードドライブにインストールすることです。自分のディストリビューションをリリースしたくないのですが、リリースする必要があるかもしれません。もう1つの可能性は、フロッピーディスクからLinuxをブートしてから、現在のディストリビューションからカーネルとinitrdをブートし、それにkexecを実行することです。しかし、それは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が必要です。AboriginalLinux イメージから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