Boot kernel Linux terbaru dari floppy disk di komputer 486



Kembali pada Agustus 2019, saya menjalankan kompetisi Sing-Along Week untuk menyinkronkan file MIDI dengan synthesizer ucapan yang menyanyikan lagu. Di gudang saya, saya menemukan kartu MIDI MQX-32M (klon Roland MPU-401) yang ingin saya gunakan untuk mengubah sinyal MIDI ke antarmuka Apple II + dengan synthesizer ucapan Echo II, tetapi akhirnya menggunakan laptop dengan antarmuka USB MIDI. Kompetisi Pizza Week yang lain membuat saya tertarik menemukan komputer 486 yang cocok dengan kotak pizza, dan sekarang ada peluang.



Pencarian di eBay itu tidak mudah karena tidak bisa datang dengan istilah pencarian yang sangat bagus. Saya tidak repot-repot menyimpan pencarian, karena proyek ini bukan prioritas. Sebagai gantinya, dari waktu ke waktu, sesuatu menginspirasi saya untuk pergi ke eBay dan mencoba pencarian baru. Beberapa minggu yang lalu, saya melihat komputer 486 ini dan membuat asumsi tentang ukuran kasing, dilihat dari ketinggian teluk 5,25 inci. Ini cukup tipis dan memiliki kartu khusus untuk memasukkan kartu lain ke samping, dan sasis lebih pendek dari kartu ISA. Meskipun lebih tebal dari kotak pizza, sudah semakin dekat!



Motherboard TMC PAT48PG4hadir dengan RAM 32MB (secara teknis 36MB, ia memiliki empat SIM 30-pin) dan empat kartu: VGA, SoundBlaster, modem dan I / O multifungsi. Penjual memeriksa komputer dan menjualnya sebagai tidak berfungsi, karena tidak lulus POST, meskipun semua kartu berfungsi. Saya lebih membutuhkan sebuah case, jadi saya tidak terlalu repot. Tentu saja, ketika saya mendapatkan komputer, saya harus memeriksa apakah motherboard benar-benar mati. Itu tidak bekerja untuk saya juga, tetapi kemudian saya menemukan bahwa jika saya menekan tombol reset, ada beberapa kesalahan bip. Saya mencoba catu daya lain dan sistem menjadi hidup setelah menekan tombol Reset! Itu masih tidak bisa boot dari shutdown dingin dengan menekan tombol power, tidak yakin apakahada penutup yang buruk atau sedikit kerusakan pada baterai (baterai telah diubah sebelumnya) mencegah saluran Reset terputus setelah menyalakan daya. Namun, dia bekerja cukup keras untuk mengeksplorasi kemungkinannya.



Tujuan utama saya adalah untuk menginstal terbaru Linux dan Python 3 distribusi pada "besar" hard drive. Karena kami memiliki komputer 486, menginstal distribusi Linux saat ini bukanlah tugas yang sepele. Satu-satunya distribusi Linux yang masih mendukung instalasi floppy agak ketinggalan jaman. Saya biasanya benar-benar melewati instalasi floppy dan hanya boot komputer lama melalui PXE dan kemudian menginstal sistem melalui jaringan. Saya pikir saya bisa menulis iPXE ke disket dan masukkan ke ISA NIC, tetapi iPXE hanya hang tanpa pesan kesalahan segera setelah boot dari floppy.



BIOS kuno dan berjuang dengan dukungan untuk hard drive "besar" yang saya gunakan. Ukuran disk adalah 8,45 GB, tetapi BIOS hanya melihat 8,0 GB. Mengaktifkan LBA di BIOS menyebabkan komputer membeku selama POST setelah deteksi disk. Win98 fdisk menegaskan disk hanya 504 MB. FreeDOS tidak melihatnya sama sekali. Saya mencoba memasukkan NIC dari ROM XTIDE ke dalam soket, dan XTIDE juga menegaskan bahwa drive tidak terhubung.



Karena saya ingin melihat bagaimana Linux akan mendeteksi drive, saya perlu menemukan cara untuk mem-boot Linux. Setelah sedikit googling, saya menemukan opsi make tinyconfigyang membuat kernel yang sangat kecil (tapi tidak berguna) cukup kecil untuk muat di floppy disk. Saya menyalakan beberapa opsi lain, menemukan initramf yang cukup kecil dan dapat memuatnya di 486. Seperti yang diharapkan, Linux melihat disk dan kapasitas penuhnya tanpa masalah.



Langkah selanjutnya adalah menginstal Linux di hard drive Anda. Saya lebih suka tidak merilis distribusi saya sendiri, tetapi Anda mungkin perlu melakukannya. Kemungkinan lain adalah mem-boot Linux dari floppy disk, dan kemudian mem-boot kernel dan initrd dari distribusi saat ini dan kexec ke sana. Tapi saya merasa seperti menciptakan kembali iPXE.



Mengkompilasi Kernel Linux dari Source



Ringkasan langkah-langkah untuk membuat gambar floppy:



  • 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


Anda perlu rootfs, ambil sistem-image-486 dari gambar Linux Aborigin , ekstrak rootfs.cpio.gz.



Tes boot dari qemu:



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


Membuat gambar floppy kosong:



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


Membuat /mnt/syslinux.cfg:



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


Menulis gambar ke floppy disk:



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



All Articles