8.3.1. 安装内核
编译内核包括以下步骤——配置、编译和安装。阅读内核源码树中的 README
可以获得替代本手册配置的方法。
通过以下命令来编译:
make mrproper
这将保证内核树的绝对干净。内核小组建议在每次编译之前都执行此命令,无用的代码将会在解压后删除。
通过菜单界面配置内核。配置内核的一般信息请查看:http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt。BLFS
包含有一些内核的特殊配置,可以查看:http://www.linuxfromscratch.org/blfs/view/systemd/longindex.html#kernel-config-index.
内核配置和编译的附加信息可查看:http://www.kroah.com/lkn/
注意
A good starting place for setting up the kernel
configuration is to run make
defconfig. This will set the base
configuration to a good state that takes your current system
architecture into account.
Be sure to enable or disable following features or the
system might not work correctly or boot at all:
General setup --->
[*] open by fhandle syscalls [CONFIG_FHANDLE]
[ ] Auditing support [CONFIG_AUDIT]
[*] Control Group support [CONFIG_CGROUPS]
Processor type and features --->
[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP]
Networking support --->
Networking options --->
<*> The IPv6 protocol [CONFIG_IPV6]
Device Drivers --->
Generic Driver Options --->
[ ] Support for uevent helper [CONFIG_UEVENT_HELPER]
[*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]
[ ] Fallback user-helper invocation for firmware loading [CONFIG_FW_LOADER_USER_HELPER]
Firmware Drivers --->
[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID]
File systems --->
[*] Inotify support for userspace [CONFIG_INOTIFY_USER]
<*> Kernel automounter version 4 support (also supports v3) [CONFIG_AUTOFS4_FS]
Pseudo filesystems --->
[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL]
[*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR]
Note
While "The IPv6 Protocol" is not strictly required, it is
highly recommended by the systemd developers.
The rationale for the above
configuration items:
-
Support
for uevent helper
-
Having this opion set may interfere with device
management when using Udev/Eudev.
-
Maintain
a devtmpfs
-
This will create automated device nodes which are
populated by the kernel, even without Udev running. Udev
then runs on top of this, managing permissions and
adding symlinks. This configuration item is required for
all users of Udev/Eudev.
make LANG=<host_LANG_value> LC_ALL= menuconfig
The meaning of the make parameters:
-
LANG=<host_LANG_value>
LC_ALL=
-
This establishes the locale setting to the one used on
the host. This is needed for a proper menuconfig ncurses
interface line drawing on UTF-8 linux text console.
Be sure to replace <host_LANG_value>
by the value of the $LANG
variable from your host. If not set, you could use
instead the host's value of $LC_ALL
or $LC_CTYPE.
Alternatively, make oldconfig
may be more appropriate in some situations. See the README file for more information.
If desired, skip kernel configuration by copying the kernel
config file, .config, from the
host system (assuming it is available) to the unpacked linux-3.19 directory. However, we do
not recommend this option. It is often better to explore all
the configuration menus and create the kernel configuration
from scratch.
Compile the kernel image and modules:
make
If using kernel modules, module configuration in /etc/modprobe.d may be required.
Information pertaining to modules and kernel configuration is
located in Section 7.3, “Device and Module Handling on an
LFS System” and in the kernel documentation in the linux-3.19/Documentation directory.
Also, modprobe.d(5) may be of
interest.
Install the modules, if the kernel configuration uses them:
make modules_install
After kernel compilation is complete, additional steps are
required to complete the installation. Some files need to be
copied to the /boot directory.
The path to the kernel image may vary depending on the
platform being used. The filename below can be changed to suit
your taste, but the stem of the filename should be vmlinuz to be compatible
with the automatic setup of the boot process described in the
next section. The following command assumes an x86
architecture:
cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.19-lfs-7.7-systemd
System.map is a symbol file
for the kernel. It maps the function entry points of every
function in the kernel API, as well as the addresses of the
kernel data structures for the running kernel. It is used as a
resource when investigating kernel problems. Issue the
following command to install the map file:
cp -v System.map /boot/System.map-3.19
The kernel configuration file .config
produced by the make menuconfig
step above contains all the configuration selections for the
kernel that was just compiled. It is a good idea to keep this
file for future reference:
cp -v .config /boot/config-3.19
Install the documentation for the Linux kernel:
install -d /usr/share/doc/linux-3.19
cp -r Documentation/* /usr/share/doc/linux-3.19
It is important to note that the files in the kernel source
directory are not owned by root.
Whenever a package is unpacked as user root
(like we did inside chroot), the files have the user and group
IDs of whatever they were on the packager's computer. This is
usually not a problem for any other package to be installed
because the source tree is removed after the installation.
However, the Linux source tree is often retained for a long
time. Because of this, there is a chance that whatever user ID
the packager used will be assigned to somebody on the machine.
That person would then have write access to the kernel source.
If the kernel source tree is going to be retained, run chown -R 0:0 on the
linux-3.19 directory to ensure
all files are owned by user root.
警告
Some kernel documentation recommends creating a symlink
from /usr/src/linux pointing
to the kernel source directory. This is specific to kernels
prior to the 2.6 series and must
not be created on an LFS system as it can
cause problems for packages you may wish to build once your
base LFS system is complete.
警告
The headers in the system's include
directory (/usr/include)
should always be the
ones against which Glibc was compiled, that is, the
sanitised headers installed in Section 6.7,
“Linux-3.19 API Headers”. Therefore, they should never be replaced by
either the raw kernel headers or any other kernel sanitized
headers.