Полезная информация

Chapter 24. FreeBSD Internals

Table of Contents
24.1. The FreeBSD Booting Process
24.2. PC Memory Utilization
24.3. DMA: What it Is and How it Works
24.4. The FreeBSD VM System

24.1. The FreeBSD Booting Process

Contributed by Poul-Henning Kamp . v1.1, April 26th.

Booting FreeBSD is essentially a three step process: load the kernel, determine the root filesystem and initialize user-land things. This leads to some interesting possibilities shown below.

24.1.1. Loading a kernel

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.

Biosboot

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.

Dosboot

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.

Netboot

Netboot will try to find a supported Ethernet card, and use BOOTP, TFTP and NFS to find a kernel file to boot.

24.1.2. Determine the root filesystem

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; it then needs to find a root filesystem.

Presently we support the following types of root filesystems:

UFS

This is the most normal type of root filesystem. It can reside on a floppy or on hard disk.

MSDOS

While this is technically possible, it is not particular useful because of the FAT filesystem's inability to deal with links, device nodes and other such ``UNIXisms''.

MFS

This is actually a UFS filesystem which has been compiled into the kernel. That means that the kernel does not really need any hard disks, floppies or other hardware to function.

CD9660

This is for using a CD-ROM as root filesystem.

NFS

This is for using a fileserver as root filesystem, basically making it a diskless machine.

24.1.3. Initialize user-land things

To get the user-land going, the kernel, when it has finished initialization, will create a process with pid == 1 and execute a program on the root filesystem; this program is normally /sbin/init.

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 pid == 1.

An example of this is the /stand/sysinstall program on the installation floppy.

24.1.4. Interesting combinations

Boot a kernel with a MFS in it with a special /sbin/init which...

A --- Using DOS
  • mounts your C: as /C:

  • Attaches C:/freebsd.fs on /dev/vn0

  • mounts /dev/vn0 as /rootfs

  • makes symlinks /rootfs/bin -> /bin /rootfs/etc -> /etc /rootfs/sbin -> /sbin (etc...)

Now you are running FreeBSD without repartitioning your hard disk...

B --- Using NFS

NFS mounts your server:~you/FreeBSD as /nfs, chroots to /nfs and executes /sbin/init there

Now you are running FreeBSD diskless, even though you do not control the NFS server...

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 out money on hardware.

D --- Using a tape

Takes a copy of /dev/rwd0 and writes it to a remote tape station or fileserver.

Now you finally get that backup you should have made a year ago...

E --- Acts as a firewall/web-server/what do I know...

This is particularly interesting since you can boot from a write- protected floppy, but still write to your root filesystem...