Before you can load Linux , you must assemble the hardware. And this is Issue-One, all about doing that. Remember to write down the SERIAL numbers of every hardware item.
DON'T PANIC! It's easy - really. Like MFI-DIY-Furniture; its all a bit confusing, but there are EXACTLY the correct number of screws and cables and sockets and things (don't drop them). You need two tools - a Phillips cross-head screwdriver, and PATIENCE.
Every circuit board has a number of 'jumper' switches with strange names, to be set correctly. Multi-circuit cards (eg ide + IO + floppy) should have 'disable floppy circuitry' jumpers (you already have one installed on another card).
Most modern PCB's have all jumpers clearly labeled, so that you could re-configure them in 5 years time when you've lost the instruction sheets (many don't).
All connectors have a 'PIN-ONE' indicator in one corner.
Match pin-1 on the card, the cable and drive. Most ribbon cables have an ink line following wire-one. Occasionally ribbons are put upside-down onto the connectors - but this is rare. Think it out. Some connectors will only fit-one way up (look before losing your head in the tower).
MANY connectors require a bit of FORCE to push together and pull apart.
Cards do NOT push smoothly into the system board, you have to wiggle them so that you believe they are seated correctly, then push one corner first, and PUSH.
During this unnerving activity, the system board will bend, so YOU pincer it (you not the case), or else the adjacent cards will slide out (because the system board pulled away). I didn't notice that, as it looked OK.
Beware of solder on the main PCB, it will cut you (also clean your hands first).
Be aware of STATIC electricity. Don't wear ANYTHING that is 10% non-natural. Take your shoes off. Touch around you, touch the radiator, touch the system case, touch the EARTH pins of the PCB (eg speaker out pins). Never touch or get grease on the edge connectors (finger sweat contains all sorts of chemicals, that eats into the copper connectors). Keep the cat out of the room.
Get the shop to seat the CPU and the memory in the right bank, the right way up.
The system board sits on a REMOVABLE back-panel. (I didn't know that). It makes it a lot easier to handle when setting jumpers.
The details for your system board will very, but these are the sort of things you will see documented in the 'manual':
The motherboard has a NON-RECHARGABLE battery, shipped as OFF.
Tells the MB circuitry to drive one of:
Tell the MB circuitry to drive the CPU at (MHz).
486-DX-2 80 is 40 MHz
One of:
One of: (volts)
This is where you tell BIOS what kind of cache RAM chips are plugged in, and how much you have. EG 256 KB of { 64 128 256 512 1024 }
Cache memory is faster than SIMMS (20 ns < 70 ns), so repeated reads are taken from cache.
I don't know what this does, but it says 40 MHz > 33 MHz -CLOSE-
Adds 0 or 1 delay "wait state" in the middle of bus accesses.
wait states are an extra clock cycles that make bus accesses longer. This allows slower chips more time to read the BUS signals and respond to them. It also makes a difference in noisy environments, or at the other end of a long run, where the rising edge of a square wave, might not be clear enough, soon enough, to be reliable.
It is how a CPU running at 40 MHz (DX2-80), can use memory that is really only designed for 25/33 MHz.
You might not have to set any switches, but might have to follow instructions in the system board manual, when purchasing and installing simms. EG:
72 PIN SIMMS can be either "1 bank" or "2 bank" type. If the 30 PIN SIMMS are also used, they will be bank 2 of { 0 1 2 3 }, so that bank must be free, ie of type "1 bank". This may be slower.
Ask the shop to explain.
Having set all the dip switches, and found all the connectors on the system board, install the back-panel into the chassis, connect up the speaker (if you want to), the two special power connectors from the PSU, the various disk LED's cables etc.
You will need a VGA card installed to see that the system board is OK.
allowing for a plethora of different component sizes, every screw in the machine matches up! There is a confusing excess of bolt-holes, and there are two different threads (disk-drive chassis bolt, ISA-card bolt) as well as a range of depths (don't drill through a hard disk).
Except curiously the plastic pillars that are supposed to hold the motherboard. It tried my patience, I didn't believe it. I thought about it again, sobered up and still don't like it. Strange that.
Panel sections where optional CD-ROMS poke thru, and those metal covers where the cards go, have to be broken to be removed (unless you are into metal fatigue). Do not worry, this is normal.
Build your system one piece at a time. The first boot is just the monitor, keyboard, video card and system board.
Without any other devices, the SVGA card will still boot and say "EFA Innergy saver - reducing pollution by 10%.
DON'T power-cycle too often, but special components should be added one at a time. Boot after each installation, and checkthat the cable is not reversed, or up-side-down..
The floppy disk light will blink before boot up, and blink again during boot.
The hard disk light will come on when the system BIOS is looking for an OS to boot.
IF NOT - POWER OFF and check that the cable is OK.
The worst place is after the SVGA has been boot-initialised, before press Del for setup, whilst it's counting memory and doing it's memory page layout.
If you get past that, your memory is working, the cards are not rattling loose (eg holding an IRQ line in a strange or conflicting manner) and by pressing the Del key, you get an interactive menu and a working keyboard!
The first boot has no floppy, the second boot is to add the floppy, check that BIOS has found it, and then boot using the boot diskette copied from the CDROM.
Even without disks, you can boot Linux. Now continue adding devices, and each time, look for the device using BIOS, and then using Linux.
Check that particular device is detected, and has the expected configuration (IRQ). Either the driver is built into the kernel, and gets it's turn to look, or it is a module that is loaded sometime.
After the boot messages, you get the login prompt. Pressing SHIFT-PageUp scrolls the boot text back. The dmesg command also re-lists them.
Check that the device was detected, at the expected address.
Check that the device is working by running a Linux command. fdisk -l lists all disks found and all partitions on them (if any yet).
Different manufacturers' BIOS's have different menus, with special options that only they offer. But they are all reassuringly simple and familiar. Albeit clumsy and with no HELP-TEXT.
The opening menu offers you categories of things to configure such as:
Standard CMOS BIOS features CHIPSET features POWER MANAGEMENT PASSWORD IDE HDD AUTO DETECT save + exit abandon + exit load BIOS defaults load SETUP defaults
"load BIOS defaults" means take pre-defined "safe" values from the ROM-BIOS. The BIOS should do this automatically, when it detects a CMOS checksum error (eg never booted before).
load SETUP defaults means revert to values as previously saved (is as now).
Standard CMOS DATE = TIME = A: = 3.5" B: = ABSENT 5.25" C: = 1.2 GB 2240 cylinders (etc) VIDEO = VGA BIOS features BOOT_SEQ = A: then C: shadow ZONE = disabled CPU Internal cache = enabled EIDE Block mode disabled (helps Linux take control of blocking) CHIPSET features Auto configuration - use to get better defaults then disable DRAM WAIT STATE = 1 WS ISA Bus clock = CLKI / 4 (-?- 10 MHz) VIRUS - detect and prevent write to fdisk or boot sectors OFF otherwise the system will HALT when you run fdisk POWER MANAGEMENT detect system activity = watch keyboard mouse ... spin down EIDE after 2 minutes idle switch CPU into 1/2 speed VIDEO OFF = blank_screen -or- monitor SYNC blank
I use spin down, and it is sometimes irritating as it takes a handful of seconds to come back. If this is a code page for the X11 SVGA driver or a swap page for an application, the screen may 'freeze' during this time, but you will hear the disks spinning up. Hopefully this won't be followed by the other disks also spinning up!
I have not yet configured the range of screen-off power saving into BIOS and would prefer to do it through Linux. The X11 documentation suggests that a screen-blanking screen saver is semi-useless, you should get the monitor into standby mode, where it burns a lot less phosphor and energy. However the X11 screen saver is a blank screen (the VC is power-saving off).
Or switch off at the front panel, rather then wait for timeout.
If you have a monochrome display, there is an F5-color key somewhere. eg SHIFT-F2
Design Bugs permitting, BIOS's are clever programs that can detect a serial UART at any standard IO_PORT address. BIOS's are dumb programs, you can tell them things that aren't strictly true.
The BIOS can tell you that the disks are installed and talking sense.
The Motherboard manual tells you exactly how to set the dip-switches and jumpers. It also lists ALL of the options you will be presented with during the 'press DEL to run SETUP" stage. Note that "Load BIOS defaults", means LOSE all existing config, and revert to the most cautious settings possible. Do that ONCE, then think hard - the safe options will REDUCE the speed of your system. However pushing options to their limits may cause 'intermittent' failures (eg memory parity errors).
In addition, overclocking CPU's can cause them to deteriorate, until they become marginal and fail. ie they get older sooner.
I have a VLB multi function EIDE x 2 UART x 2 PARALLEL. You may have these on the mother-board, saving a PCI slot.
In the same way as detecting serial UART chips, BIOS can detect IDE controller card chips. The system BIOS will probably only be aware of the FIRST IDE controller of the pair (and the first two disks). The Linux kernel will detect the second EIDE (and the other two disks). DOS won't use the second EIDE controller until you get the DOS device drivers loaded (the IDE controller -or-just- the cdrom controller). LILO can't be loaded from the second EIDE controller, because BIOS can't see it.
The BIOS display menu for the disk drives allows YOU to tell BIOS what to tell DOS (ie disk geometry). With E-IDE, BIOS can now grope disks for their geometry and manufacturers label - by asking them!
If you get an option to "search for disks", it will take a long time if the device is not there. If it comes back quickly with the right answers, then your disk drive is plugged in, not upside down.
Now that your keyboard, screen, memory, UARTS, disk, CD, floppy, BIOS settings ... are all working, you can proceed and boot an OS from the floppy, which will then load an OS onto the disk. Configure it to boot and boot it!
DOS has a 1024 reachable cylinder per disk limit, which makes disks bigger than 0.8G pointless (DOS), so disks and BIOS collaborate to halve the number of cylinders and double the number of heads (or quadruple), and you program fdisk with the fake geometry (which is now 1024 or less).
The DOS_World BIOS will probably be aware of disks with more than 1024 cylinders - but be unable to do much about it, except double the number of heads and half the number of cylinders. This figure is what is told to DOS when booting. see /linux/drivers/block/README.ide
Linux does not need this! Linux has the option of doing the same as DOS (for the fdisk information), or using the drive's "real geometry".
Personally I put my boot partition (16 MB) and my DOS partition below 1024 cylinders, and then the Linux stuff upto the line and beyond. I don't use fake geometries, I prefer things to be "as they are".
I don't use any strange DOS software to tell other lies about the disk geometry. This only creates confusing FDISK entries, and may prevent interworking between DOS and Linux, or even prevent them from co-existing!
Your software MAY be supported, but it's easier not to use it.
The BIOS IDE menus may also offer you options to optimise your EIDE controllers and disks, when using them from DOS without any drivers. These should be disabled so that the DOS driver (in config.sys) or the Linux Kernel can take control of the card without BIOS interfering.
Setting this switch does not disable the facility on the card, it stops BIOS from using the facility. If you are running an intelligent driver, you don't want that.
If IDE HDD Block Mode is "Enabled", BIOS will use it, DOS-without-the-driver will use it, but DOS with the driver WON'T, and Linux won't either! SEE: hdparm(1)
Set it to Disabled.
BIOS offers the option of shadowing memory zones, and disabling the cache in memory zones. If the on-card memory is a program ROM that is run a lot (eg the SVGA BIOS in DOS) enable shadowing. The system BIOS copies the slow ROM to faster RAM (Maybe this is outdated on PCI/VLB cards?).
Linux does not use the SVGA BIOS, or other ROMS. It has equivalent code built into the kernel. Having shadowing enabled is using up memory pages for no reason (unless you often run DOS). DOSEMU also expects it to be disabled. (usually).
If the on-card memory is actually a special communications buffer for the device (eg network packet data in, or POKE data to this memory location to make the device do something) then DISABLE the cache for those zones, otherwise three reads (of different values) will be optimised by the CPU/board into one read, "assuming memory doesn't change itself".
Disable shadow-ROMS every-where.
Go through your list of cards, disabling cache over device memory pages. Some BIOS's may already disable cache where a DRAM page is not mapped. ie any on-card memory that is detected in the area where cards appear is either shadowed (and cached) or not shadowed, and not cached. No DRAM page is mapped there.
It doesn't make a lot of difference, but you do want ROM's to be cached, so that boot-up is quicker.
The easiest thing to do is to set the PC clock to your local time, so that it makes sense to you and to DOS. You will have to adjust the clocks twice a year, when they go forward and back (spring + fall).
The correct thing to do is to set the PC clock to UST-Universal-Standard-Time, ie GMT. You tell Unix that you have a 'local' clock that is different from GMT by a fixed amount, and that summer-time is apparently 1 hour later. This is set by the Slackware installation setup into /usr/lib/zoneinfo and /var/adm/setup/setup.timeconfig. I selected the GB-EIRE zoneinfo file.
NOTE: If your system CMOS battery loses power (eg whilst installing a card), you have to set the time in BIOS setup, not from Linux. This is because setting the Linux system time, doesn't write it back to the CMOS.
These are three independent types of address. MEM_ADDR (either ROM or buffer space) is in the same domain as your 16 Mb RAM.
Memory usually holds programs or data. Certain regions of the PC's first megabyte, are 'reserved' for different functions. Cards with programs installed on ROMS will make the ROMS 'appear' at a specific (configurable?) address (ie an 8K block of addresses).
The different cards must have different addresses for their ROMS and data buffers. The Video BIOS is the easiest, as everyone agrees on vague standards.
Linux will use its own device driver, and not the one on ROM. So shadowing won't help Linux, but it will help DOS. Windows uses it's own driver.
The Video BIOS tells DOS how to drive the video hardware. It's on the card, and usually installs at a well known address. If you do a lot of work in DOS, you may wish to set SHADOW BIOS ON that area of memory, so that the system BIOS copies the ROM into RAM memory at boot time. This is much faster than accessing the ISA bus. However (1) this reduces the pool of memory (available above the 1MB mark), (2) Linux and Windows don't use the card BIOS's (except for booting), and VLB/PCI card speeds are almost as fast as main board memory. I switch BIOS shadow OFF everywhere.
DATA BUFFER memory, appears on Ethernet cards and other devices that do INPUT. Either the CPU or the CARD may write to this memory, so the CPU must NOT assume that it hasn't changed since last time it did an access. You must set CACHING off on these areas.
You must tell DOS-EMM386 to avoid all these areas in C:\\config.sys:
device=emm386 noems x=d000-d7ff x=dc00-dfff
Note that DOS uses a 4 digit hex number, whilst Linux uses a 5 digit hex number. This is because DOS is using 8086 SEGMENT addresses, which are shifted by 4 bits (one hex digit).
IO_ADDR_RANGE (eg starting at 0x320), is a smaller range of addresses of hardware IO registers (eg to control UARTS or motors). You have to make sure that no two cards have overlapping address RANGES (but no-one tells you how big each range is!). When you install a card you will have to tell the DOS driver where it is, or help the Linux driver find it sooner
C:\\config.sys device=C:\\ETC\\CDdriver.sys /P:320 /etc/lilo.conf append="sbpcd=0x320,LaserMate"
0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0070-007f : rtc 0080-009f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : npu 0170-0177 : ide1 01f0-01f7 : ide0 02f8-02ff : serial(set) 0300-031f : NE2000 0376-0376 : ide1 03c0-03df : vga+ 03e8-03ef : serial(set) 03f0-03f5 : floppy 03f6-03f6 : ide0 03f7-03f7 : floppy DIR 03f8-03ff : serial(set)
NOTE: you have to be running Linux, for cat /proc/ioports to work! First you have to plan what it will look like. It's also how you know that the modem card's serial UART was detected.
There are very few of these, and again each must be unique. Often cards are programmable by DOS or Linux (or their own driver.sys), to take a specified IRQ. Often there will be a 'pre-reserved' IRQ address line for that type of device. These should be listed in your board docs eg:
0 timer 1 keyboard 2 -cascade- from IRQ8 to IRQ15 3 COM2 4 COM1 5 LPT2 <- Internal Modem 6 FLOPPY 7 LPT1 <- Parallel Port 8 CLOCK 9 -FREE- 10 -FREE- <- WD80x3 (Ethernet) 11 -FREE- <- BUSLOGIC || Adaptec 12 -FREE- <- NE2000 13 FPU 14 IDE-CTRL-1 15 IDE-CTRL-2 -FREE- see logfile: /var/adm/messages
These are the values currently in use by the kernel . Hopefully the device is using the same values.
interrupts may be currently "un-loaded", eg lp.o hasn't been used for 15 minutes, so kerneld has unloaded it, and IRQ 7 isn't really free, because lp might want it back. (see tunelp).
0: 255599 timer 1: 5629 keyboard 2: 0 cascade 4: 10674 + serial 8: 0 + rtc 12: 1 NE2000 13: 1 math error # kernel did that error to test it 14: 24060 + ide0 15: 4777 + ide1
AFTER you have set up a working machine, you may be able to re-arrange how the IRQ's are allocated. Linux can SHARE IRQ's between devices. eg COM ports can share IRQ's, because the driver looks to see which UART actually generated the interrupt. This will depend on your devices and drivers (and patience).
IRQ's on the ISA bus, CANNOT be shared by different CARDS (unless you are extremely lucky). They can be shared within the same CARD (or motherboard).
Linux can drive two EIDE cards, giving 4 EIDE cables and 8 EIDE drives. You may need to find a free IRQ, or take one away from the printer (making it a polled driver), or get the printer to share the EIDE Cards IRQ (is this possible?) if it is a multifunction card.
My genius NE2000 clone, is software programmable to change IRQ's and IO_PORT addresses.
However this gave me two problems: firstly the software that does this is DOS based, and I would have to boot DOS to set it. Normally you only have to do this once, but some cards may need it every cold boot. Some cards have a Linux utility to do the same.
The second problem, was that the software/hardware needed to have the old settings to reprogram it to the new settings! Since this conflicted with another card, I was stumped.
The answer was to "hard" set the jumpers, to IRQ 12. Then it worked a treat.
Linux has to "guess" the settings, so that it uses the same addresses as the card. This can be done in three ways (assuming that hard setting it in the kernel source is not wanted).
(1) The kernel driver gropes a list of addresses, and gets lucky - before it gets unlucky, and gropes something that doesn't like being groped!
read the kernel source for the list of typical device addresses, and the SomeThing-HOWTO, and other docs on your CDROM. Some cards only have 3 IRQ options, so pick yours.
(2) You tell it on the LILO command line and the driver picks up that value, when it runs.
LILO: raven ne=0x300
(3) You tell the loaded module in /etc/conf.modules. In this example, knowing the IO address is enough, the driver tickles the card, and sees what IRQ line it chuckles on.
# /etc/conf.modules alias eth0 ne options ne io=0x300
(4) Other
If you're going to take the lid off, you should do a quick hardware audit of the machine That means fetching the printout from the database, and comparing a few landmarks.
It helps the PC's owner if you know which disks it has, what kind of cards, etc. Basically every machine has a free-form text page, with serial numbers and mod levels, extra notes OK.
Print-out the following, write over it, type it in.
(these are NOT all from the same machine). ISA-BUS CD-ROM IRQ <NONE> # for me anyway IO_ADDR 0x320 # uses maybe a dozen MEMORY ---- # NONE or DUNNO PART NO SERIAL 7029218 LILO sbpcd=0x320,LaserMate BUSLOGIC SCSI IRQ 11 IO_ADDR 0x330 # 12 < 16 ? ROM 0xDC000 # 0xDFFFF # ie DE000 - 1 P/N --- Serial 41027 327 SCSI 7 (could be 6 on shared bus) Adaptec 1542b (in a second machine!) IRQ 11 IO_ADDR 0x330 DMA 5 ROM DC000 + 16k BIOS 3.10 HOST SCSI 7 NE2000 IRQ 12 IO_ADDR 0x300 MEMORY Serial E11 145857 MAC 00 C0 DF 45 08 DA SMC Elite-16 IRQ 10 IO 0x280 Buffer 0xd000 +4000 = 0xd3fff Serial MAC 00 00 C0 6C 5E 41 IDE-second IRQ 15 IO_ADDR - MEMORY - IDE-first IRQ 14 IO_ADDR - MEMORY - Serial DY0 Z505A 39570 Video CL5429 2M Memory - standard VGA locations ROM 0xC000 +32k Serial 090Z5 02Q12 372 Alto modem IRQ 5 (or NOT??) Serial 1721 5911 A BIOS 1.021A (Feb 95) (checksum error) IBM disk IDE P/N 85G2272 serial 3H94490151 Geometry: Quantum Maverick IDE P/N MV54A011 rev 02-g Serial: 33 55 00 86 41 95 F SCSI extern case: model E-MTB-353 serial 09408604 M26235A DISK SCSI: (broken and Fujitsu won't replace!) P/N B03B-7195-B015A # N Serial 12171 (1991-06) M2694ES-512 812A Serial Geometry: C=21072 H=186 S=57 SQ5110 Syquest 88 M cartridge Serial Geometry: C= H= S= So if someone sells you one of these 'real-cheap', gimme a call. COM-PORT-UART-TYPE 8250 16450 16550 16550A[F] --------------------------------------------------------- COM1: IRQ 4 0x3F8 16450 COM2: IRQ 3 0x2F8 16450 (poor choice for modems) COM3: IRQ 4 0x3E8 16550AF COM4: IRQ 3 0x2E8 LPT1: IRQ 7 0x378 ROM-BIOS F000 +64k To get this info, look in /var/adm/messages, and MSD Utilities, Browse /proc for what the kernel thinks is the case.
The first time you read this, you are planning to do this, allocating addresses from the cards. Do remember to build your boot disks in advance, from another machine that can read the cdrom.
The second read, is when you are plugging in the cables and devices.
You've added them, one at a time, and now