Annotation of sys/arch/i386/stand/biosboot/biosboot.8, Revision 1.1.1.1
1.1 nbrk 1: .\" $OpenBSD: biosboot.8,v 1.22 2007/05/31 19:20:03 jmc Exp $
2: .\"
3: .\" Copyright (c) 2003 Tom Cosgrove <tom.cosgrove@arches-consulting.com>
4: .\" Copyright (c) 1997 Michael Shalayeff
5: .\" All rights reserved.
6: .\"
7: .\" Redistribution and use in source and binary forms, with or without
8: .\" modification, are permitted provided that the following conditions
9: .\" are met:
10: .\" 1. Redistributions of source code must retain the above copyright
11: .\" notice, this list of conditions and the following disclaimer.
12: .\" 2. Redistributions in binary form must reproduce the above copyright
13: .\" notice, this list of conditions and the following disclaimer in the
14: .\" documentation and/or other materials provided with the distribution.
15: .\"
16: .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17: .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19: .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22: .\" OR SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26: .\" SUCH DAMAGE.
27: .\"
28: .Dd $Mdocdate: May 31 2007 $
29: .Dt BIOSBOOT 8 i386
30: .Os
31: .Sh NAME
32: .Nm biosboot
33: .Nd
34: i386-specific first-stage system bootstrap
35: .Sh DESCRIPTION
36: This small program (roughly 512 bytes of code) is responsible for
37: loading the second-stage
38: .Xr boot 8
39: program (typically /boot), which in turn will load the kernel.
40: .Pp
41: .Nm
42: must be installed by
43: .Xr installboot 8 .
44: As part of the installation,
45: .Xr installboot 8
46: patches
47: .Nm
48: with information about the location of
49: .Xr boot 8
50: on disk.
51: Specifically, it writes the filesystem block number of
52: .Xr boot 8 's
53: inode,
54: the offset within this block of the inode,
55: and various filesystem parameters (taken from the superblock)
56: required to convert filesystem blocks to disk sectors.
57: .Pp
58: You must re-run
59: .Xr installboot 8
60: whenever
61: .Xr boot 8
62: is changed, as its inode may change.
63: While it should not be necessary,
64: it may also be advisable to re-run
65: .Xr installboot 8
66: if you move your disk between machines and/or controllers.
67: .Pp
68: When
69: .Nm
70: receives control from either the BIOS or the
71: master boot record (MBR) it will print the message:
72: .Pp
73: .Dl Loading
74: .Pp
75: followed by a dot for every filesystem block it attempts to load.
76: If /boot is loaded successfully,
77: .Nm
78: will put the cursor on the next line just before
79: transferring control to the newly-loaded program.
80: .Pp
81: If possible,
82: .Nm
83: will read disk sectors using calls detailed in the Phoenix
84: Enhanced Disk Drive Specification (EDD, sometimes known as LBA, reads).
85: It will fall back to CHS reads only if EDD calls are not available.
86: However, to allow users to boot on hardware that claims LBA capability,
87: but which requires CHS reads in order to boot,
88: the user may hold down either Shift key during boot.
89: If
90: .Nm
91: detects this, it will force itself to use CHS calls, ignoring
92: any LBA capability.
93: This will of course prevent booting if /boot lies above the 8 GB
94: CHS limit.
95: There is an exported symbol
96: .Dq force_chs
97: of type u_int8_t
98: which may be set to 1 to force CHS reads always.
99: (However, no tool is currently provided to set this flag.)
100: .Sh DIAGNOSTICS
101: .Nm
102: prints a
103: .Sq !\&
104: before the
105: .Dq Loading
106: message if it is being forced to use CHS rather than LBA reads
107: (by the user holding down either Shift key during boot,
108: or having set the
109: .Dq force_chs
110: flag in the boot sector).
111: .Pp
112: .Nm
113: prints a
114: .Sq ;\&
115: after the
116: .Dq Loading
117: message if it is going to use CHS reads for any reason.
118: For example, when booting from floppy or CD-ROM.
119: .Pp
120: .Nm
121: may fail with any of the following error messages:
122: .Bl -tag -width ERR_X__
123: .It Er ERR I
124: Too many indirect blocks.
125: .Nm
126: is capable of reading the direct blocks in
127: .Xr boot 8 's
128: inode (the location of which is patched into
129: .Nm
130: by
131: .Xr installboot 8 )
132: and the first indirect block,
133: but it is not capable of reading further indirect blocks.
134: This error indicates that further such indirect blocks were found.
135: The system will not be able to boot.
136: .Pp
137: This is unlikely to ever happen in practice, as
138: .Xr boot 8
139: has to be quite large for this to be an issue.
140: The smallest possible filesystem block size is 512 bytes
141: (one sector per filesystem block).
142: On such a system, there are 140 filesystem blocks that
143: .Nm
144: can read, so
145: .Xr boot 8
146: can be up to 70 KB.
147: .Pp
148: However, even on floppy disks the filesystem block size is 1024 bytes.
149: This allows
150: .Xr boot 8
151: to occupy up to 268 disk blocks,
152: i.e. to be 268 KB.
153: On hard disks (default filesystem block size 16 KB)
154: 4,108 disk blocks are available, to allow
155: .Xr boot 8
156: to be over 64 MB in size!
157: (Only direct blocks are required for
158: .Xr boot 8 s
159: of up to 192 KB.)
160: .It Er ERR M
161: Bad magic.
162: The ELF
163: .Dq magic number
164: \e7fELF in
165: .Xr boot 8 's
166: header was not found.
167: This indicates that the first block of
168: .Xr boot 8
169: was not read correctly.
170: This could be due to disk corruption,
171: failing to run
172: .Xr installboot 8 ,
173: giving an invalid
174: .Xr boot 8
175: program as the
176: .Ar boot
177: argument to
178: .Xr installboot 8 ,
179: or
180: incorrect geometry translation.
181: .It Er ERR R
182: Read error.
183: The BIOS returned an error indication when
184: .Nm
185: attempted to read a disk sector.
186: This might be any media error, including bad sectors (common on floppy disks),
187: and invalid sectors (can occur with bad geometry translations).
188: .Pp
189: If this error occurs during an LBA boot (no
190: .Sq ;\&
191: after
192: .Dq Loading ) ,
193: then a CHS boot may succeed.
194: To do this, you should reboot, then hold down either Shift key
195: before
196: .Nm
197: starts.
198: You should see a
199: .Sq !\&
200: before
201: .Dq Loading
202: as confirmation that your
203: override was accepted.
204: .It Er ERR X
205: Can't boot.
206: Issued when trying to read sectors in CHS mode,
207: but the BIOS call
208: .Em get\ drive\ parameters
209: failed or gave a value of 0 for the number of sectors per track.
210: In either case, it is not possible for
211: .Nm
212: to calculate the (cylinder, head, sector) values required to
213: read any sectors.
214: .El
215: .Sh NOTES
216: Using
217: .Nm
218: as the MBR,
219: as has been done in the past,
220: is not recommended, and is not supported.
221: Instead, create a single
222: .Xr fdisk 8
223: partition that spans the entire disk.
224: .Pp
225: Despite the support for
226: .Xr boot 8
227: over the 8 GB boundary,
228: good
229: .Xr disklabel 8
230: partitioning practices should still be followed.
231: .Sh FILES
232: .Bl -tag -width /usr/mdec/biosbootxx -compact
233: .It Pa /usr/mdec/mbr
234: Master Boot Record block
235: .It Pa /usr/mdec/biosboot
236: primary bootstrap
237: .It Pa /boot
238: secondary bootstrap
239: .It Pa /usr/mdec/pxeboot
240: PXE bootstrap
241: .It Pa /bsd
242: .Ox
243: kernel
244: .It Pa /bsd.mp
245: .Ox
246: kernel for multi-processor machines
247: .It Pa /bsd.rd
248: .Ox
249: kernel for installation/recovery
250: .El
251: .Sh SEE ALSO
252: .Xr boot 8 ,
253: .Xr boot_i386 8 ,
254: .Xr disklabel 8 ,
255: .Xr fdisk 8 ,
256: .Xr installboot 8 ,
257: .Xr pxeboot 8
258: .Sh HISTORY
259: .Nm
260: was originally written by Michael Shalayeff for
261: .Ox 2.1 .
262: However it was based on bootstrap code from older versions of this
263: operating system, other operating systems, other programs, and
264: other people's work.
265: .Pp
266: It was significantly revised in December 2003 by Tom Cosgrove,
267: in order to support LBA disk access (via the Phoenix Enhanced Disk
268: Drive Specification API).
269: At that time the internal table of disk blocks was removed, and
270: .Nm
271: modified to read filesystem block numbers from the inode.
272: .Sh BUGS
273: .Nm
274: should perform and verify a checksum across the entire loaded
275: .Xr boot 8
276: image,
277: rather than just checking the magic number in the first block.
278: .Pp
279: There is no BIOS error number reported nor is the location of the error
280: reported.
281: .Pp
282: You can pick your motherboard, and you can pick your BIOS,
283: but you can't pick your motherboard's BIOS.
CVSweb