[Gllug] Booting older x86 boards from a large ide disc

Mike Brodbelt mike at coruscant.demon.co.uk
Mon Aug 30 15:55:03 UTC 2004


On Mon, 2004-08-30 at 13:15, Chris Bell wrote:
> Hello,
>    I have often heard that it is possible to boot an older computer from a
> disc that is larger than the BIOS understands, simply by ensuring that the
> bootable partition is completely within the area addressable by the BIOS.

It ought to be possible, as the BIOS routines (which is where most of
the limitations lie) are used only to load the kernel into memory. After
kernel load, the kernel device driver takes over. Thr problem is, there
are numerous BIOS limitations on hard disk size.

BIOS disk routines are accessed through int 0x13, which provides only 10
bits of space across two 16 bit registers to load the cylinder number.
This means that cylinders >= 1024 are inaccessible to software that
relies on int 0x13 services, like LILO. This, the kernel must be located
within the first 1024 cylinders. Some boot managers ease this slightly
by having a driver in the second stage boot loader, but that just shifts
the problem. Fundamentally, whatever piece of software contains the
device driver for the disk *must* be accessible via BIOS calls.

The ST-506 hardware interface defines a maximum of 1024 cylinders, 16
heads, and 63 sectors per track, leading to some old BIOS
implementations having trouble recognizing anything larger than 504Mb.
This is a combination of BIOS limits and IDE interface specs, giving the
worst of both worlds. 

Traditionally, the BIOS passed the CHS address, unaltered, to the disk
controller. More modern BIOS implementations can translate a logical
geometry (used by the BIOS) to a physical geometry (used by the
controller) before passing the address to the disk controller. The
simple way of doing this is to pretend the disk has vastly more heads
than it really does, and vastly fewer cylinders. This results in yet
another BIOS limit, this time at 8064Mb.

The better way is to translate from BIOS CHS values to LBA values
understood by the disk controller, which makes some of the problems go
away. This of course requires a disk controller that understands LBA,
and does not get you out of the int 0x13 cylinder limit problem, even
though your disk is no longer being addressed with cylinders.

To make matters worse, some BIOS implementations that support geometry
translation get it wrong, and can see only 4095 cylinders, creating a
2Gb limit. These have a tendency to lock the system up if a cylinder
count > 4095 is entered.


> Unfortunately my experience has always been that the BIOS hangs during
> the initial start if the primary master disc is oversize, so the only
> successful method is to boot from a smaller disc and tell the BIOS that
> there is no large disc present.

You may well have a translating BIOS that's locking up with a disk >
4095 cylinders. You could try overriding the CHS settings in the BIOS
manually (assuming your BIOS supports this), and setting them to values
below the critical thresholds. If the system can be persuaded to boot,
you'd just need to create a small /boot partition to hold your kernel,
and ensure that the entirety of this partition is within the area of
disk the BIOS can see.

More information can be found at:-

http://thef-nym.sci.kun.nl/~pieterh/storage.html

HTH,

Mike.

-- 
Gllug mailing list  -  Gllug at gllug.org.uk
http://lists.gllug.org.uk/mailman/listinfo/gllug




More information about the GLLUG mailing list