There are five categories of trouble that can occur when building a custom kernel.
They are:
- config fails:
-
If the config(8) command
fails when you give it your kernel description, you have probably made a simple error
somewhere. Fortunately, config(8) will print
the line number that it had trouble with, so that you can quickly locate the line
containing the error. For example, if you see:
config: line 17: syntax error
Make sure the keyword is typed correctly by comparing it to the GENERIC kernel or another reference.
- make fails:
-
If the make command fails, it usually signals an error in
your kernel description which is not severe enough for config(8) to catch.
Again, look over your configuration, and if you still cannot resolve the problem, send
mail to the FreeBSD general questions mailing list with your kernel configuration,
and it should be diagnosed quickly.
- Installing the new kernel fails:
-
If the kernel compiled fine, but failed to install (the make
install or make installkernel command failed), the first
thing to check is if your system is running at securelevel 1 or higher (see init(8)). The kernel
installation tries to remove the immutable flag from your kernel and set the immutable
flag on the new one. Since securelevel 1 or higher prevents unsetting the immutable flag
for any files on the system, the kernel installation needs to be performed at securelevel
0 or lower.
The above only applies to FreeBSD 4.X and earlier versions. FreeBSD 5.X, along with
later versions, does not set the immutable flag on the kernel and a failure to install a
kernel probably indicates a more fundamental problem.
- The kernel does not boot:
-
If your new kernel does not boot, or fails to recognize your devices, do not panic!
Fortunately, FreeBSD has an excellent mechanism for recovering from incompatible kernels.
Simply choose the kernel you want to boot from at the FreeBSD boot loader. You can access
this when the system counts down from 10 at the boot menu. Hit any key except for the Enter key, type unload and then type boot /boot/kernel.old/kernel, or
the filename of any other kernel that will boot properly. When reconfiguring a kernel, it
is always a good idea to keep a kernel that is known to work on hand.
After booting with a good kernel you can check over your configuration file and try to
build it again. One helpful resource is the /var/log/messages
file which records, among other things, all of the kernel messages from every successful
boot. Also, the dmesg(8) command will
print the kernel messages from the current boot.
Note: If you are having trouble building a kernel, make sure to keep a GENERIC, or some other kernel that is known to work on hand as a
different name that will not get erased on the next build. You cannot rely on kernel.old because when installing a new kernel, kernel.old is overwritten with the last installed kernel which may
be non-functional. Also, as soon as possible, move the working kernel to the proper /boot/kernel location or commands such as ps(1) may not work
properly. To do this, simply rename the directory containing the good kernel:
# mv /boot/kernel /boot/kernel.bad
# mv /boot/kernel.good /boot/kernel
For versions of FreeBSD prior to 5.X, the proper command to “unlock” the
kernel file that make installs (in order to move another kernel
back permanently) is:
# chflags noschg /kernel
If you find you cannot do this, you are probably running at a securelevel(8) greater
than zero. Edit kern_securelevel in /etc/rc.conf and set it to -1, then
reboot. You can change it back to its previous setting when you are happy with your new
kernel.
And, if you want to “lock” your new kernel into place, or any file for
that matter, so that it cannot be moved or tampered with:
# chflags schg /kernel
- The kernel works, but ps(1) does not work
any more:
-
If you have installed a different version of the kernel from the one that the system
utilities have been built with, for example, a 5.X kernel on a 4.X system, many
system-status commands like ps(1) and vmstat(8) will not
work any more. You should recompile and install a world
built with the same version of the source tree as your kernel. This is one reason it is
not normally a good idea to use a different version of the kernel from the rest of the
operating system.
This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
For questions about FreeBSD, read the documentation before contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.
|
|