Slackware
Established back in 1993, Slackware (The Slackware Linux Project; Wikipedia) is the oldest surviving Linux distribution...
Slackware Linux 3.0 was the first Slackware release to have an official CD-ROM distribution and support installation from CD-ROM. Released in November 1995, the same month as the Pentium Pro, it doesn't have support for a lot of the more modern hardware emulated by QEMU...
QEMU
The default QEMU i386 system emulation ('pc') is based on Intel's "Natoma" (Intel 440FX & PIIX3) chipset for Pentium Pro and Pentium II processors, which was released in 1996 (List of Intel chipsets - Wikipedia):
- Model: "pc" - Intel 440FX & PIIX3 "Natoma"
- CPU: "qemu32" - QEMU Virtual CPU (default)
- RAM: 128 MiB default, 2 GiB max.
- Bus: PCI and ISA
- Storage controller: IDE (PIIX3)
- Network interface: "e1000" - Intel 82540EM Gigabit Ethernet Controller, 1,000 Mb/s ethernet
- Graphics: "std" - Standard VGA (with Bochs VBE)
Since the kernels included with Slackware 3.0 are older than this, they don't recognize the hardware and use generic methods to run on the system. Distributions based on the Linux 2.0 series or later kernels would be a better choice for the 'pc' machine (Linux Version 2.0 | Linux Journal).
Fortunately QEMU has a generic ISA based PC system profile ('isapc') which provides an option that is more in keeping with the hardware available when Slackware 3.0 was released:
- Model: "isapc" - ISA bus PC
- CPU: "486" - Intel i486DX/4
- RAM: 128 MiB default, 2 GiB max.
- Bus: ISA
- Storage controller: IDE
- Network interface: "ne2k_isa" - NE2000 ISA, 10 Mb/s ethernet (IRQ 9, I/O 0x300)
- Graphics: "cirrus" - Cirrus GD-5446 VGA ISA
Installation
- Fetch the Slackware Linux 3.0 CD-ROM image from Archive.org (https://archive.org/details/Slackware_Linux_3.0_Walnut_Creek_October_1995), for installation we only need CD 1.
- Sadly the CD is not bootable (the El Torito CD-ROM specification was released in 1995), so we need to use floppy boot images. We need a boot and a root image.
- For the 'isapc' and 'pc' machines the 'idecd' and 'color.gz' floppy images are what we are looking for to get IDE CD-ROM support and nice menus for installation.
- On Linux:
mkdir tmp_mnt fuseiso slackware3_cd1.iso tmp_mnt # Mount the ISO cp tmp_mnt/bootdsks.144/idecd ./ # Boot disk (only 600KB) truncate -s 1440K idecd # Pad boot disk to 1.44MB cp tmp_mnt/rootdsks/color.gz ./ # Root disk (already 1.44MB) guestunmount tmp_mnt/ # Unmount the ISO rmdir tmp_mnt
- And a disk image for the install, a 2 GB disk will be more than enough: qemu-img create -f qcow2 hda_Slackware3.qcow2 2G
- Now we can boot the system for installation. In QEMU 5.2.0, the floppy support in 'isapc' appears to be broken, so we have to use 'pc' for installation:
qemu-system-i386 \ -machine type=pc \ -cpu 486 \ -m size=512M \ -fda idecd \ -fdb color.gz \ -hda hda_Slackware3.qcow2 \ -cdrom slackware3_cd1.iso \ -net nic -net user \ -device sb16 \ -boot order=a \ -no-reboot \ -name "Install Slackware Linux 3.0 on pc/486"
- Since we're using boot and root floppies in different drives, use "ramdisk root=/dev/fd1" as detailed on the boot screen.
- The hard drive is blank, so once we've logged in as "root", we need to partition the disk: fdisk /dev/hda
- Use 'm' to familiarize yourself with the options.
- Since we have plenty memory we can skip having a swap partition. For illustration I will create one, but the whole disk can be used as root instead.
- New 'n', primary partition 'p', partition '1', from cylinder '1' to '504'
- New 'n', primary partition 'p', partition '2', from cylinder '505' to '520' (at ~4 MB per cylinder, 16 cylinders is about 64 MB).
- Type 't', partition '2', type list 'L', type '82' (Linux swap).
- Write changes to disk 'w'
- With the disk partitioned, run setup to continue the installation and follow the prompts...
- If your plan to use the manual pages (man) be sure to install GNU troff (gtroff)
- The QEMU 'cirrus' display will work with the SVGA XFree86 server
- The QEMU mouse is PS/2
- For QEMU user networking the IP addresses are (from Documentation/Networking - QEMU):
- Host: 10.0.2.15
- Gateway: 10.0.2.2
- Netmask: 255.255.255.0
- DNS: 10.0.2.3
- In order to use the configured 512 MiB RAM, remember to tell LILO to use "mem=512M" as a kernel parameter
- After packages are installed, and the system shutdown, we can switch to an 'isapc':
qemu-system-i386 \ -machine type=isapc \ -cpu 486 \ -m size=512M \ -hda hda_Slackware3.qcow2 \ -cdrom slackware3_cd1.iso \ -net nic -net user \ -device sb16 \ -boot order=c \ -no-reboot \ -name "Slackware Linux 3.0 on isapc/486"
- Once logged in you can give 'root' a password (passwd), add a regular user account (adduser), enable serial port login (/etc/inittab) and configure the X server (xf86config)
- When configuring the X server, you can assume the monitor is the most capable option each time. The emulated card is a Cirrus Logic GD-5446 VGA ISA with 4MB RAM, so any of the Cirrus Logic cards will do, I used the "Cirrus Logic GD543x" option.
With the system installed further exploration will involve hitting the documentation:
- Installed docs:
- FAQs and HOWTOs: /usr/doc/faq/
- Manual pages: apropos <term>, man -k <term>, man <pagename>
- GNU info: info
- CD-ROM: docs/
- The Linux Documentation Project
- Various Linux usenet groups, such as:
System Information
So what does Slackware Linux 3.0 have to say about the 'isapc' system...
uname
Operating system release information:
$ uname -a Linux q-slack3 1.2.13 #1 Wed Aug 23 00:34:56 CDT 1995 i486
A "Linux" kernel, on a node named "q-slack3", kernel release "1.2.13", version "#1 Wed Aug 23 00:34:56 CDT 1995", on a "i486" machine.
/proc/cpuinfo
Processor information:
$ cat /proc/cpuinfo cpu : 486 model : DX/4 mask : Unknown vid : GenuineIntel fdiv_bug : no math : yes hlt : yes wp : yes Integrated NPU : yes Enhanced VM86 : no IO Breakpoints : no 4MB Pages : yes TS Counters : no Pentium MSR : no Mach. Ch. Exep. : no CMPXCHGB8B : no BogoMips : 516.22
So QEMU's '486' processor is an Intel 486DX/4 (from other Linux versions the CPUID is: family 4, model 8, stepping 0). The CPUID (Wikipedia) feature flags are shown in order, starting with "Integrated NPU" for the first 8 bits. Interestingly it appears that a real Intel 486DX/4 would set the "Enhanced VM86" flag for VME support (Virtual-8086 Mode Extensions), and not set the "4MB Pages" flag for PSE (Page Size Extension).
From the BogoMips result we can estimate the processor clock to be:
516 * 2 = 1,032 MHz = 1.0 GHz
That shows how far Intel processors have come... Intel's fastest 486 was the 486DX/4 100 MHz, and here we are running an emulated 486 on an i7 860 2.80 GHz and we get a ridiculously fast 486.
/proc/meminfo
Memory information:
$ cat /proc/meminfo total: used: free: shared: buffers: Mem: 533798912 5627904 528171008 4648960 2146304 Swap: 66056192 0 66056192
So 512 MiB RAM, with 64 MB of swap.
Linux 1.2 used the BIOS to get RAM size, and that only reported up to 64 MiB, for larger memory systems Linux needed to be told about the available memory via the "mem" kernel parameter. This is likely also the reason that the swap partition size for Linux 1.2 could be no larger than 64 MB, for larger swap multiple partitions were required. The small swap configured here is to allow idle memory pages from the kernel and system daemons to be swapped out if necessary.
dmesg
System log:
$ dmesg Console: colour EGA+ 80x25, 1 virtual console (max 63) bios32_init : BIOS32 Service Directory structure at 0x000f6820 bios32_init : BIOS32 Service Directory entry at 0xfd34f pcibios_init : PCI BIOS revision 2.10 entry at 0xffa40 Probing PCI hardware. Calibrating delay loop.. ok - 516.22 BogoMips Serial driver version 4.11 with no serial options enabled tty00 at 0x03f8 (irq = 4) is a 16550A lp1 at 0x0378, using polling driver PS/2 auxiliary pointing device detected -- driver installed. ftape: allocated 3 buffers aligned at: 00370000 hda: QEMU HARDDISK, 2048MB w/256KB Cache, LBA, CHS=520/128/63, MaxMult=16 hdc: QEMU DVD-ROM, ATAPI, CDROM drive ide1: secondary interface on irq 15 ide0: primary interface on irq 14 Floppy drive(s): fd0 is 2.88M AMI BIOS FDC 0 is a post-1991 82077 scsi : 0 hosts. scsi : detected total. lance.c: PCI bios is present, checking for devices... Memory: 521292k/524288k available (840k kernel code, 384k reserved, 1772k data) This processor honours the WP bit even when in supervisor mode. Good. Swansea University Computer Society NET3.019 Swansea University Computer Society TCP/IP for NET3.019 IP Protocols: ICMP, UDP, TCP PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS OPTIMIZE_FLAGS TCP compression code copyright 1989 Regents of the University of California PPP line discipline registered. SLIP: version 0.8.3-NET3.019-NEWTTY (4 channels) (6 bit encapsulation enabled) CSLIP: code copyright 1989 Regents of the University of California NE*000 ethercard probe at 0x300: 52 54 00 12 34 56 eth0: NE2000 found at 0x300, using IRQ 9. ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov) Checking 386/387 coupling... Ok, fpu using exception 16 error reporting. Checking 'hlt' instruction... Ok. Linux version 1.2.13 (root@bigkitty) (gcc version 2.7.0) #1 Wed Aug 23 00:34:56 CDT 1995 Partition check: hda: multiple mode turned off hda: hda1 hda2 VFS: Mounted root (ext2 filesystem) readonly. Adding Swap: 64508k swap-space Max size:331555 Log zone size:2048 First datazone:68 Root inode number 139264 ISO9660 Extensions: RRIP_1991A
Here we see the results of hardware detection, in the days before hardware told you what it was (Plug & Play), things work pretty well here with most of the installed hardware being picked up as expected.
Alternative - /proc/cpuinfo
Just for fun the /proc/cpuinfo for QEMU's 'pentium' processor:
$ cat /proc/cpuinfo cpu : 586 model : 4 mask : C vid : GenuineIntel fdiv_bug : no math : yes hlt : yes wp : yes Integrated NPU : yes Enhanced VM86 : no IO Breakpoints : yes 4MB Pages : yes TS Counters : yes Pentium MSR : yes Mach. Ch. Exep. : yes CMPXCHGB8B : yes BogoMips : 488.06
From other versions of Linux we know the CPUID information is: family 5, model 4, stepping 3. Which is what we see here with cpu "586" (family 5), model "4" (model 4) and mask "C" ("C" = 43, so "C" - "@" => 43 - 40 = 3; stepping 3). This means the processor is an Intel Pentium MMX (see CPUID - Intel - WikiChip), which didn't start shipping till 1997.
Like the emulated '486', the "Enhanced VM86" flag for VME (Virtual-8086 Mode Extensions) would be set on a real Pentium MMX processor.
No comments:
Post a Comment