mirror of
https://github.com/freebsd/freebsd-src
synced 2024-11-05 18:22:52 +00:00
1130b656e5
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
173 lines
5.9 KiB
Text
173 lines
5.9 KiB
Text
<!-- This is a SGML version of the text on FreeBSD boot procedures
|
|
made by Poul-Henning Kamp <phk@FreeBSD.ORG>
|
|
|
|
This conversion has been made by Ollivier Robert.
|
|
|
|
$FreeBSD$
|
|
|
|
|
|
<!DOCTYPE linuxdoc PUBLIC "-//FreeBSD//DTD linuxdoc//EN">
|
|
|
|
<article>
|
|
|
|
<title>Boot overview</title>
|
|
<author>Poul-Henning Kamp, <tt/<phk@login.dknet.dk>/</author>
|
|
<date>v1.1, April 26th</date>
|
|
<abstract>
|
|
Booting FreeBSD is essentially a three step: Load the kernel,
|
|
determine the root filesystem and initialize user-land things. This
|
|
leads to some interesting possibilities as shown below...
|
|
</abstract>
|
|
|
|
<toc>
|
|
-->
|
|
|
|
<sect><heading>The FreeBSD Booting Process<label id="booting"></heading>
|
|
|
|
<p><em>Contributed by &a.phk;. v1.1, April 26th.</em>
|
|
|
|
Booting FreeBSD is essentially a three step: Load the kernel,
|
|
determine the root filesystem and initialize user-land things. This
|
|
leads to some interesting possibilities shown below.
|
|
|
|
<sect1><heading>Loading a kernel</heading>
|
|
<p>
|
|
We presently have three basic mechanisms for loading the
|
|
kernel as described below:
|
|
They all pass some
|
|
information to the kernel to help the kernel decide what to do
|
|
next.
|
|
|
|
<descrip>
|
|
<tag>Biosboot</tag>
|
|
|
|
Biosboot is our ``bootblocks'', it consists of two files, which
|
|
will be installed in the first 8Kbytes of the floppy or hard-disk
|
|
slice to be booted from.
|
|
|
|
Biosboot can load a kernel from a FreeBSD filesystem.
|
|
|
|
<tag>Dosboot</tag>
|
|
|
|
Dosboot was written by DI. Christian Gusenbauer, and is
|
|
unfortunately at this time one of the few pieces of code that
|
|
will not compile under FreeBSD itself because it is written for
|
|
Microsoft compilers.
|
|
|
|
Dosboot will boot the kernel from a MS-DOS file or from a FreeBSD
|
|
filesystem partition on the disk. It attempts to negotiate with
|
|
the various and strange kinds of memory manglers that lurk in
|
|
high memory on MS/DOS systems and usually wins them for its
|
|
case.
|
|
|
|
<tag>Netboot</tag>
|
|
|
|
Netboot will try to find a supported Ethernet card, and use
|
|
BOOTP, TFTP and NFS to find a kernel file to boot.
|
|
</descrip>
|
|
|
|
|
|
<sect1><heading>Determine the root filesystem</heading>
|
|
<p>
|
|
Once the kernel is loaded and the boot-code jumps to it, the kernel
|
|
will initialize itself, trying to determine what hardware is
|
|
present and so on, and then it needs to find a root filesystem.
|
|
|
|
Presently we support the following types of root filesystems:
|
|
|
|
<descrip>
|
|
<tag>UFS</tag>
|
|
|
|
This is the most normal type of root filesystem. It can reside on
|
|
a floppy or on hard disk.
|
|
|
|
<tag>MSDOS</tag>
|
|
|
|
While this is technically possible, it is not particular useful,
|
|
because of ``FAT'' filesystems inability to make links, device
|
|
nodes and such ``UNIXisms''.
|
|
|
|
<tag>MFS</tag>
|
|
|
|
This is actually a UFS filesystem which has been compiled into
|
|
the kernel. That means that the kernel does not really need any
|
|
disks/floppies or other HW to function.
|
|
|
|
<tag>CD9660</tag>
|
|
|
|
This is for using a CD-ROM as root filesystem.
|
|
|
|
<tag>NFS</tag>
|
|
|
|
This is for using a fileserver as root filesystem, basically
|
|
making it a diskless machine.
|
|
</descrip>
|
|
|
|
|
|
<sect1><heading>Initialize user-land things</heading>
|
|
<p>
|
|
To get the user-land going, when the kernel has finished
|
|
initialization, it will create a process with ``<tt/pid == 1/'' and execute
|
|
a program on the root filesystem, this program is normally
|
|
``<tt>/sbin/init</tt>''.
|
|
|
|
You can substitute any program for /sbin/init, as long as you keep
|
|
in mind that:
|
|
|
|
there is no stdin/out/err unless you open it yourself, if you exit,
|
|
the machine panics, signal handling is special for ``<tt/pid ==
|
|
1/''.
|
|
|
|
An example of this is the ``<tt>/stand/sysinstall</tt>''
|
|
program on the installation floppy.
|
|
|
|
|
|
<sect1><heading>Interesting combinations</heading>
|
|
<p>
|
|
Boot a kernel with a MFS in it with a special <tt>/sbin/init</tt>
|
|
which...
|
|
<descrip>
|
|
<tag/A -- Using DOS/
|
|
<itemize>
|
|
<item>mounts your <tt/C:/ as <tt>/C:</tt>
|
|
<item>Attaches <tt>C:/freebsd.fs</tt> on <tt>/dev/vn0</tt>
|
|
<item>mounts <tt>/dev/vn0</tt> as <tt>/rootfs</tt>
|
|
<item>makes symlinks<newline>
|
|
<tt>/rootfs/bin -> /bin</tt><newline>
|
|
<tt>/rootfs/etc -> /etc</tt><newline>
|
|
<tt>/rootfs/sbin -> /sbin</tt><newline>
|
|
(etc...)<newline>
|
|
</itemize>
|
|
|
|
Now you run FreeBSD without repartitioning your hard disk...
|
|
|
|
<tag/B -- Using NFS/
|
|
|
|
NFS mounts your <tt>server:˜you/FreeBSD</tt> as
|
|
<tt>/nfs</tt>, chroots to <tt>/nfs</tt> and executes
|
|
<tt>/sbin/init</tt> there
|
|
|
|
Now you run FreeBSD diskless, even though you do not control
|
|
the NFS server...
|
|
|
|
<tag/C -- Start an X-server/
|
|
|
|
Now you have an X-terminal, which is better than that dingy
|
|
X-under-windows-so-slow-you-can-see-what-it-does thing that
|
|
your boss insist is better than forking our money on HW.
|
|
|
|
<tag/D -- Using a tape/
|
|
Takes a copy of <tt>/dev/rwd0</tt> and writes it to a remote tape
|
|
station or fileserver.
|
|
|
|
Now you finally got that backup you should have made a year
|
|
ago...
|
|
|
|
<tag>E -- Acts as a firewall/web-server/what do I know...</tag>
|
|
|
|
This is particular interesting since you can boot from a write-
|
|
protected floppy, but still write to your root filesystem...
|
|
</descrip>
|
|
|
|
|
|
|