boot(1M) —
NAME
boot − UNIX System boot program
DESCRIPTION
The boot program is responsible for detecting the type of machine and its complement of hardware, setting up the environment necessary for the execution of the UNIX System kernel, and loading and executing the kernel. The boot program does not perform these functions alone; the booting process demands the cooperation of a number of pieces of software. The booting process varies slightly depending on whether the kernel resides on a diskette or fixed disk.
The booting process begins with a machine in the reset state. This may occur because the machine has just been turned on or because a reboot sequence has been entered. From this point, the ROM BIOS supplied with the machine gains control and goes through its power-on self test (POST) sequence. After this, it will attempt to boot an operating system off of a diskette if one is present. Failing that, it will attempt to boot from the fixed disk.
When booting from a diskette, the ROM BIOS reads sector 1 from track 0 of cylinder 0 (the first logical sector on the disk) and jumps to the beginning of that block. boot must then read in the rest of its program and continue the booting process. The boot program may occupy the entire first cylinder on a 5.25-inch or 3.5-inch high density diskette, or the first two cylinders on a 3.5-inch double density (700Kb) diskette. This limits the diskette-based boot program to a size of 18Kb.
Booting from a fixed disk is a more complex operation. The ROM BIOS reads in the first logical sector of the disk. This sector contains a small fragment of code called the masterboot and a table of partitions called the fdisk table. The fdisk table has up to four valid entries, and each entry describes a portion of the disk by giving its beginning cylinder, head, and sector number, ending cylinder, head, and sector, and the logical starting and ending sector numbers. At most, one partition is marked as the active partition.
Note that the logical sector numbers are maintained in 32-bit words, which is sufficient for an extremely large disk (over a terabyte); however, the other values are packed into small fields which limit their ranges: cylinder values are limited to 1024, heads to 16, and sectors to 64. This means that on some disks, it may be possible to set up a UNIX System partition that cannot be booted from.
The masterboot program searches the fdisk table for the active partition, and reads in the first logical sector of that partition. This will be the first block of the boot program when the active partition contains the INTERACTIVE UNIX Operating System. As is the case with the diskette version, this first block must then read in the remainder of the boot program. Because the UNIX System VTOC structure is located in sector 29 of the partition, the fixed disk boot program cannot be any larger than 14.5Kb.
After the boot program is read in from either a diskette or a fixed disk, boot attempts to determine which machine it is on. It does this by reading another program, /etc/initprog/identify, and executing it. This program performs a number of tests, often searching the ROM BIOS for identifying strings, until a match is found for a particular machine or until all tests fail. In the latter case, the machine is assumed to be a generic PC AT.
As a part of determining the machine type, a particular machine initialization program (or initprog) is selected. These programs reside in /etc/initprog. The selected program is then loaded and executed. It is responsible for doing any machine-dependent operations that may be necessary. Certain generic operations such as sizing memory or detecting the presence of floating point coprocessors can also be done at this time if they require some nonstandard code.
After the execution of the machine-dependent initprog, a machine-independent initialization program, /etc/initprog/machsetup, is run. If not done by the dependent initprog, machsetup determines the location and size of memory, the number and types of fixed disks and diskettes, and a few other pieces of information.
All of the information determined by these programs is saved in the bootinfo structure, where it is used by the kernel and drivers. It is also available to user programs via a sysi86 system call if needed.
At this time, the UNIX System kernel, /unix, is loaded. As the boot program starts to load /unix, it displays the message: Booting the INTERACTIVE UNIX Operating System...
At this time the user can interrupt the boot in order to specify a different kernel by typing any key. This must be done soon after the above “Booting” message is displayed. The boot will respond with: Enter the name of a kernel to boot: The user should enter a UNIX System path name. The file specified must reside within the root file system; the boot program is unable to search other file systems. If the file is not found, boot prints a message and asks for another file name. If no response is made within 30 seconds or if the user responds with a carriage return, boot will once again attempt to load /unix and execute it.
Once a kernel is determined, it is loaded into memory. The boot program then generates the appropriate page directory and page tables for the kernel, sets up an interrupt descriptor table and a global descriptor table, turns on paging, and does a long jump through a task switch selector into the kernel.
The boot program is installed on a fixed disk by the mkpart(1) program when it initializes the disk. If boot becomes damaged, a fresh copy is maintained in /etc/boot, and mkpart can be used (with the −b option) to update it. Part of the installation of a boot into the UNIX System partition includes stamping the number of sectors per track into it; this makes the installed boot unusable on other disks. However, /etc/boot itself is not modified.
FILES
/etc/boot
/etc/initprog/identify
/etc/initprog/machsetup
/etc/initprog/*
SEE ALSO
fdisk(1M), init(1M), mkpart(1M), fd(7).
DIAGNOSTICS
The masterboot and boot programs display different error messages. The masterboot program displays an error message and locks the system. The following is a list of the most common masterboot messages and their meanings:
IO ERR An error occurred when trying to read in the partition boot of the active operating system.
BAD TBL The bootable partition indicator of at least one of the operating systems in the fdisk table contains an unrecognizable code.
NO OS There was an unrecoverable error after trying to execute the active operating system’s partition boot.
If boot displays a message other than the ones shown above, it is a fatal error and must be corrected before the kernel can be booted. The messages are intended to be self-explanatory, but are they technically detailed. If you encounter one, be sure to copy it completely and accurately and contact your vendor for technical support.
ADDED VALUE
This entry, supplied by SunSoft, Inc., contains enhancements to UNIX System V.
\*U — Version 1.0