[syslinux] Problem booting from CF/SD cards and USB Flashdrives using syslinux
c.lee111 at gmail.com
c.lee111 at gmail.com
Thu Aug 23 10:30:56 PDT 2007
On Mon, 20 Aug 2007, H. Peter Anvin wrote:
> c.lee111 at gmail.com wrote:
> > What I'm wondering though is was I in fact running into a variation of
> > the bug that older versions of lilo had with hard drives that fdisk
> > mentioned with syslinux, and would it be possible to do the same
> > kind of fix that the newer versions of lilo did to get around it for
> > syslinux?
> I have no idea what bug you're talking about.
This one. It only applied to really old versions of lilo from before
2000 or so and was fixed in newer versions of lilo ages ago.
Here is a article that talks about the LILO bug I was talking about.
"The Linux Gazette...making Linux just a little more fun!"
(?)-[qbubble.gif] The Answer Guy (!)-[bbubble.gif]
By James T. Dennis, tag at lists.linuxgazette.net
(?) Keeping Both Hard Drives Connected
New LILO Overcomes 1024 Cylinder Limit!
From Crazy Weirdo on Thu, 23 Mar 2000
I just bought a new hard drive for my pc. I put Linux on it. The
problem with that is i cant keep both hard drives connected at the
same time unless i keep changing the jumpers. Is there a way to make
LILO boot windows while its on another HDD....if so...how is it done?
This is a test of the Weirdo e-mail system. Had this been an actual
e-mail you would have become extremely hostile towards me and other
users of the internet, but just relax and realize that this was just a
(!) I presume that these are IDE hard drives. It doesn't matter too
much, but there wouldn't be this problem with SCSI.
Anyway, LILO will load an OS off of any drive and partition that
the BIOS can see. I've heard that a new version finally overcomes
the classic old 1024 cylinder limit that's been plaguing it (and
us) for so long.
Oddly enough this is one of the few software upgrades that I've
seen recently that I couldn't find at Freshmeat.net
Another good place to look for open source and free software
release announcements is Appwatch (http://www.appwatch.com). Here's
the one for the latest LILO:
LILO 21.4.1 (John D. Rowell) 20000321 22:45 GMT
Changes: Since v21: Will boot from disks up to 2048Gb in size, as long
as the BIOS allows the Enhanced BIOS calls for 32-bit sector
addressing using packet calls; Checks if BIOS supports packet calls
(int 0x13, AH=0x42), and uses these calls if 'lba32' was specified.
Otherwise, it uses the C:H:S addressing scheme of the original IBM-PC
BIOS; the disk read routine is separated into its own source file,
"read.S", which is included in the first-stage, and second-stage
loader codes. The first stage loader uses a very stripped down read
routine, since it only deals in single sector transfers; if BIOS does
not support 32-bit packet calls, and the cylinder address overflows
when the 32-bit address is converted to C:H:S, then a "9f" error code
is issued; map compaction of 'lba32' addresses is supported with the
existing '-c' switch (or 'compact' configuration file global option);
floppy disks now will always fall back to C:H:S addressing; changed
the -v option to now accept a single digit to set the verbosity level;
e.g., 'lilo -v 5 ...' replaces 'lilo -v -v -v -v -v ...' for maximum
LILO version information is moved to the file 'version.h', and VERSION
is now deleted. This allows for tracking of VERSION_MAJOR (=21) and
VERSION_MINOR (=3) for this and future code paths;
Inspired by 'dparam.com', a much more extensive BIOS test program is
included with this version. Called 'disk.com', it was developed under
DOS, and requires 'nasm' to be assembled; DISK.COM will probe the BIOS
for disks supported by the BIOS, and report on their CHS geometry.
If EDD is supported, the EDD geometry is also reported. If disks with
cylinder numbers of 1024 or above are detected, it will issue a
recommendation to use LILO with the 'lba32' option. Creation of the
bootable floppy image version of this utility is incomplete at this
time. Fixed: bug in 'read.S' that disabled the combination 'linear'
with 'compact' ( '-l' and '-c' together). Added: the '-L' command line
switch and 'lba32' configuration file global option.
Note: Currently only available here. Console / System (BSD)
What all of that goobledygook means is that LILO has been updated
to handle these HUGE drives without forcing us to have a little
partition below the 1024 cylinder line that used to be the upper
limit on PC hard drive sizes. (Read some of my back issue rants
about LILO to get more info on that then you want to hear).
So, back to your question:
If you have a LILO conf like this:
boot = /dev/hda
root = /dev/hda1
image = /boot/vmlinuz-2.3.99pre3
label = new
image = /boot/vmlinuz-2.2.14
label = cur
image = /boot/vmlinuz-2.0.38
label = old
other = /dev/hdb1
label = dos
You should be able to have both drives co-exist. You should be able
to use LILO to boot any of the three Linux kernels (new, cur(rent),
and old) or your MS-DOS/Win'9x by simply typing any one of those
three-letter keywords (stanza labels) at the LILO prompt.
Note that the "other" directive points to /dev/hdb1 --- the first
partition on the second IDE hard drive on your primary IDE
controller. That might be /dev/hdc1 (master hard drive on the
secondary controller) or even /dev/hdd1 (slave drive on the
secondary contoller). That all depends on how your drives are
physically connected, and if you have an IDE CD-ROM and how its
connected. Of course it might be in some other partition on any of
these drives. You BIOS might only allow you to boot from /dev/hda
and /dev/hdb (first two drives on the primary controller).
I'm once again going to point to LOADLIN.EXE. Search through my
archives here at Linux Gazette:
... to review what I've said about this before. My basic rule of
thumb is: "If you have to ask about making MS-DOS and/or MS-Win '9x
co-exist with Linux --- USE LOADLIN.EXE!"
It just works. No muss! No fuss! No worrying about what drive,
partition, or cylinder your kernel is on. The object of this game
is to get the Linux kernel (and maybe an initial RAM disk) into
memory, and jump into the kernel image's entry point (possibly
passing it a list of command line arguments). Once you've managed
that, then the Linux kernel can take care of all the other fussy
details about finding and mounting its root filesystem and driving
its hardware. (The kernel doesn't need the BIOS for any normal
operations --- though there is some minor device configuration that
the kernel expects is already done before it got loaded. Linux has
its own 32-bit native drivers for all PC/x86 hardware). (I guess
there are some PCI BIOS32 and APM functions that are actually
handled by modern BIOS' --- but I don't know the details).
Copyright © 2000, James T. Dennis
Published in The Linux Gazette Issue 52 April 2000
HTML transformation by Heather Stern of Tuxtops, Inc.,
More information about the Syslinux