Previous Next Table of Contents

3. Assembling

3.1 Hints

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.

jumpers -aka- DIP switches

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).

pin one

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).

push - click - crack

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.

cards that pop out

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).

static

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.

3.2 System Board Jumpers

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':

ON-BOARD battery -vs- External battery.

The motherboard has a NON-RECHARGABLE battery, shipped as OFF.

CPU TYPE

Tells the MB circuitry to drive one of:

CPU CLOCK

Tell the MB circuitry to drive the CPU at (MHz).

486-DX-2 80 is 40 MHz

486-DX4 clock multiplier Selector

One of:

I presumed that this only applies when you have selected DX4.

CPU power

One of: (volts)

Cache Jumper

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.

VESA clock

I don't know what this does, but it says 40 MHz > 33 MHz -CLOSE-

VESA wait state

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.

Simms

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.

System board connectors

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.

3.3 Assembling Continues ..

Everything should click

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).

Everything should click

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.

break-away plastic covers

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.

step by step

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!

step by step - with Linux

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).

At some point, you will get bored with booting from the diskette, and go for an actual Linux install. Good Luck!

3.4 BIOS SETUP

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.

3.5 BIOS settings

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.

3.6 BIOS detects disks

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.

BIOS detects disk geometry

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!

3.7 BIOS BOGUS disk geometry

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.

3.8 BIOS IDE HDD Block Mode = Disabled

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.

3.9 BIOS Shadow, cache,

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.

3.10 BIOS Clocks + TIMEZONE

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.

3.11 Device Addresses: IRQ IO_ADDR MEM_ADDR

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 Addresses

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 address

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"

cat /proc/ioports

        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.

IRQ - Interrupt ReQuest lines.

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 

IRQ - cat /proc/interrupts

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.

3.12 Software setable cards

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.

3.13 Device Addresses: LILO and /etc/conf.modules

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

3.14 Keep a record of your configuration and switches:

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.

3.15 And Now ?

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


Previous Next Table of Contents