*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> i386/biosboot (8)              



NAME    [Toc]    [Back]

     biosboot - i386-specific first-stage system bootstrap

DESCRIPTION    [Toc]    [Back]

     This small program (roughly 512 bytes of code) is  responsible for loading
     the second-stage boot(8) program (typically /boot), which in
turn will
     load the kernel.

     biosboot must be installed by installboot(8).   As  part  of
the installation,
 installboot(8) patches biosboot with information about
the location
     of boot(8) on disk.  Specifically, it writes the  filesystem
block number
     of  boot(8)'s inode, the offset within this block of the inode, and various
 filesystem parameters (taken from  the  superblock)  required to convert
     filesystem blocks to disk sectors.

     You  must re-run installboot(8) whenever boot(8) is changed,
as its inode
     may change.  While it should not be necessary, it  may  also
be advisable
     to  re-run  installboot(8) if you move your disk between machines and/or

     When biosboot receives control from either the BIOS  or  the
master boot
     record (MBR) it will print the message:


     followed  by a dot for every filesystem block it attempts to
load.  If
     /boot is loaded successfully, biosboot will put  the  cursor
on the next
     line  just  before  transferring control to the newly-loaded

     If possible, biosboot will read disk sectors using calls detailed in the
     Phoenix  Enhanced  Disk  Drive Specification (EDD, sometimes
known as LBA,
     reads).  It will fall back to CHS reads only  if  EDD  calls
are not available.
   However,  to  allow  users  to boot on hardware that
claims LBA capability,
 but which requires CHS reads in order to  boot,  the
user may hold
     down  either  Shift  key  during  boot.  If biosboot detects
this, it will
     force itself to use CHS calls, ignoring any LBA  capability.
This will of
     course prevent booting if /boot lies above the 8 GB CHS limit.  There is
     an exported symbol ``force_chs'' of type u_int8_t which  may
be set to 1
     to  force  CHS reads always.  (However, no tool is currently
provided to
     set this flag.)

DIAGNOSTICS    [Toc]    [Back]

     biosboot prints a `!' before the ``Loading'' message  if  it
is being
     forced to use CHS rather than LBA reads (by the user holding
down either
     Shift key during boot, or having set the ``force_chs''  flag
in the boot

     biosboot prints a `;' after the ``Loading'' message if it is
going to use
     CHS reads for any reason.  For example,  when  booting  from
floppy or CDROM.

     biosboot may fail with any of the following error messages:

     ERR  I     Too many indirect blocks.  biosboot is capable of
reading the
              direct blocks in boot(8)'s inode (the  location  of
which is
              patched  into  biosboot  by installboot(8)) and the
first indirect
              block, but it is not capable of reading further indirect blocks.
              This  error  indicates  that  further such indirect
blocks were
              found.  The system will not be able to boot.

              This is unlikely to ever  happen  in  practice,  as
boot(8) has to
              be quite large for this to be an issue.  The smallest possible
              filesystem block size is 512 bytes (one sector  per
              block).  On such a system, there are 140 filesystem
blocks that
              biosboot can read, so boot(8) can be up to 70 KB.

              However, even on floppy disks the filesystem  block
size is 1024
              bytes.   This  allows  boot(8)  to occupy up to 268
disk blocks,
              i.e. to be 268 KB.  On hard disks (default filesystem block size
              16  KB)  4,108  disk blocks are available, to allow
boot(8) to be
              over 64 MB in size!  (Only direct  blocks  are  required for
              boot(8)s of up to 192 KB.)

     ERR  M     Bad  magic.   The  ELF  ``magic number'' 7fELF in
boot(8)'s header
              was not found.  This indicates that the first block
of boot(8)
              was  not read correctly.  This could be due to disk
              failing to run installboot(8),  giving  an  invalid
boot(8) program
              as  the  boot argument to installboot(8), or incorrect geometry

     ERR R    Read error.  The BIOS returned an error  indication
when biosboot
              attempted to read a disk sector.  This might be any
media error,
              including bad sectors (common on floppy disks), and
invalid sectors
 (can occur with bad geometry translations).

              If this error occurs during an LBA boot (no `;' after
              ``Loading''), then a CHS boot may succeed.   To  do
this, you
              should  reboot, then hold down either Shift key before biosboot
              starts.  You should see a `!' before ``Loading'' as
              that your override was accepted.

     ERR  X    Can't boot.  Issued when trying to read sectors in
CHS mode, but
              the BIOS call get drive parameters failed or gave a
value of 0
              for  the  number  of  sectors per track.  In either
case, it is not
              possible for biosboot to calculate  the  (cylinder,
head, sector)
              values required to read any sectors.

NOTES    [Toc]    [Back]

     Using  biosboot as the MBR, as has been done in the past, is
not recommended,
 and is not  supported.   Instead,  create  a  single
fdisk(8) partition
 that spans the entire disk.

     Despite the support for boot(8) over the 8 GB boundary, good
     partitioning practices should still be followed.

FILES    [Toc]    [Back]

     /usr/mdec/mbr         Master Boot Record block
     /usr/mdec/biosboot    primary bootstrap
     /boot                 secondary bootstrap
     /usr/mdec/pxeboot     PXE bootstrap
     /bsd                  OpenBSD kernel

SEE ALSO    [Toc]    [Back]

     boot(8),  boot_i386(8),  disklabel(8),  fdisk(8),   installboot(8), pxeboot(8)

HISTORY    [Toc]    [Back]

     biosboot  was  originally  written  by Michael Shalayeff for
OpenBSD 2.1.
     However it was based on bootstrap code from  older  versions
of this operating
  system,  other operating systems, other programs, and
other people's

     It was significantly revised in December 2003  by  Tom  Cosgrove, in order
     to  support  LBA  disk access (via the Phoenix Enhanced Disk
Drive Specification
 API).  At that time the internal table of disk blocks
was removed,
     and  biosboot modified to read filesystem block numbers from
the inode.

BUGS    [Toc]    [Back]

     biosboot should perform and verify a checksum across the entire loaded
     boot(8) image, rather than just checking the magic number in
the first

     There is no BIOS error number reported nor is  the  location
of the error

     You  can  pick your motherboard, and you can pick your BIOS,
but you can't
     pick your motherboard's BIOS.

OpenBSD     3.6                        December     23,      2003
[ Back ]
 Similar pages
Name OS Title
pxeboot OpenBSD i386-specific second-stage PXE bootstrap
boot OpenBSD i386-specific second-stage bootstrap
boot.conf OpenBSD i386-specific second-stage bootstrap
cdboot OpenBSD i386-specific second-stage CD-specific bootstrap
biosboot OpenBSD amd64-specific first-stage system bootstrap
cdboot OpenBSD amd64-specific second-stage CD-specific bootstrap
boot OpenBSD amd64-specific second-stage bootstrap
pxeboot OpenBSD amd64-specific second-stage PXE bootstrap
boot.conf OpenBSD amd64-specific second-stage bootstrap
boot OpenBSD hppa-specific bootstrap
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service