《Linux From Scratch》第三部分:构建LFS系统 第八章:让LFS系统可引导 - 8.3. Linux-3.19

简介:

 Linux 软件包包含 Linux 内核。

大概编译时间:3.0 - 49.0 SBU (一般 6 SBU)
所需磁盘空间:700 - 6800 MB (一般 800-900 MB)

8.3.1. 安装内核

编译内核包括以下步骤—配置、编译和安装。阅读内核源码树中的 README 可以获得替代本手册配置的方法。

[Note]

注意

本章节里的命令都要在 chroot 环境下运行。如果因为某种原因(比如说重启)离开了这个环境,请保证要按照 6.2.2,“挂载和激活/dev”6.2.3,“挂载虚拟内核文件系统” 里所说的那样挂载虚拟内核文件系统,然后按照 6.72. 清理 介绍的方法重新进入 chroot 环境。否则运行下面的 make 命令会提示段错误。并进入源码目录(sources),解压 Linux-3.19.tar.gz 文件并进入解压后的目录。

运行以下命令准备编译:

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/

[Note]

注意

配置内核的一个好的起点是运行 make defconfig。这样会参考你的机器架构生成一份基本能用的基础配置。

注意要确保打开或关闭下面这些特性,否则系统也许不能正常工作甚至根本无法启动:

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]

注意

尽管 "The IPv6 Protocol" 不是必须打开,但它是 systemd 开发人员强烈推荐的。

上述配置项的一些原理说明:

Support for uevent helper

打开这个选项会影响 Udev/Eudev 设备管理。

Maintain a devtmpfs

这个选项允许内核在 Udev 运行之前就创建自动设备节点。之后 Udev 在这个基础上运行,管理权限以及增加软链接。对于所有 Udev/Eudev 用户,这个配置项是必须的。

make LANG=<host_LANG_value> LC_ALL= menuconfig

make 参数的含义:

LANG=<host_LANG_value> LC_ALL=

使用主机的语言环境。这样就方便在使用 menuconfig 时显示合适的 ncurse 界面,它在 linux 字符终端里显示 UTF-8 字符。

注意把 <host_LANG_value> 替换为自己主机上环境变量 $LANG 的值。如果这个变量没有设定,你可以使用变量 $LC_ALL$LC_CTYPE 的值代替。

另外,make oldconfig 在某些情况下可能更合适。查看 README 文件了解更多信息。

想偷懒的话,可以拷贝主机系统的内核配置文件 .config(如果有的话)到解压后的 linux-3.19 目录下来跳过内核配置。不过,我们不建议这样做。最好是探索一下整个内核配置菜单,从最开始配置内核。

编译内核映像和模块:

make

如果使用内核模块,需要 /etc/modprobe.d 文件里的模块配置。关于模块和内核配置的信息可以查看 7.3, “LFS 系统中的设备和模块控制” 以及 linux-3.19/Documentation 目录下的内核文档。 还有,modprobe.d(5) 也可以看一下。

如果内核配置里用到,需要安装模块:

make modules_install

在内核编译完成后,还需要一个额外步骤来完成安装。有些文件需要拷贝到 /boot 目录下。

内核映像文件所在的实际目录根据主机系统架构可能会不一样。下面的文件名你也可以改成你喜欢的,不过开头最好是 vmlinuz 才可以兼容下一节要讲的配置引导过程的自动设定。下面的命令假设主机是 x86 架构:

cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.19-lfs-7.7-systemd

System.map 是内核的符号文件。它映射了每一个内核 API 函数的入口,以及内核运行时的数据结构地址。是调试内核问题时的资源。运行下面的命令安装映射文件:

cp -v System.map /boot/System.map-3.19

在之前命令 make menuconfig 里生成的内核配置文件 .config 包含了当前编译的内核的所有配置。最好能保存下来留作参考:

cp -v .config /boot/config-3.19

安装 Linux 内核文档:

install -d /usr/share/doc/linux-3.19
cp -r Documentation/* /usr/share/doc/linux-3.19

需要注意一下内核源代码目录下的文件属主并不是 root。在以 root 用户解压包的时候(我们在 chroot 环境里做的),解压出来的文件会拥有生成这个包的电脑里用户和组。在安装其他包的时候这并不是问题,因为它们的源代码在安装完后就删除了。不过,Linux 内核的源代码经常会保留比较长时间。这样的话,就有可能会把软件包作者的用户 ID 对应到本机的某个用户上。从而这个用户就会拥有内核源代码的写权限。

如果要保留内核源代码的虎啊,对目录 linux-3.19 运行 chown -R 0:0 命令来保证所有文件属主更改为 root

[Warning]

警告

一些内核文档里建议创建软链接 /usr/src/linux 指向内核源代码目录。这是 2.6 及以前版本内核的特定要求,而在 LFS 系统里 一定不要 创建这个链接,因为这样的话,在你的基础 LFS 系统完成后安装某些软件包时可能引起问题。

[Warning]

警告

系统 include 目录(/usr/include)下的头文件应该 总是 和编译 Glibc 时用到的头文件保持一致,就是,在 6.7, “Linux-3.19 API 头文件” 里整理过的头文件。因此,它们 不能 替换成原始内核头文件或任何清理过的内核头文件。

8.3.2. 配置 Linux 模块加载顺序

虽然大多数情况下,Linux 模块自动加载就好,但是有时候需要特别指定加载顺序。modprobeinsmod 在加载模块时会读取 /etc/modprobe.d/usb.conf 。如果将 USB 设备(ehci_hcd、ohci_hcd 和 uhci_hcd) 编译为模块,则需要此文件,这样它们就会以正确的顺序加载。ehci_hcd  需要在 ohci_hcd 和 uhci_hcd 之前加载,否则在系统启动过程中将会输出警告。

运行以下命令建立 /etc/modprobe.d/usb.conf 文件:

install -v -m755 -d /etc/modprobe.d
cat > /etc/modprobe.d/usb.conf << "EOF"
# Begin /etc/modprobe.d/usb.conf

install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

# End /etc/modprobe.d/usb.conf
EOF

8.3.3. Linux 的内容

安装的文件:config-3.19, vmlinuz-3.19-lfs-7.7-systemd, and System.map-3.19
安装的目录:/lib/modules, /usr/share/doc/linux-3.19

简要说明

config-3.19

包含内核的所有配置选项

vmlinuz-3.19-lfs-7.7-systemd

Linux 系统的引擎。当电脑启动时,内核作为整个系统的第一部分载入。它首先检测和初始化所有的电脑硬件,然后将这些硬件模块抽象成文件树让软件访问,并把单个 CPU 转换成多任务系统,可以看上去同时地运行多个程序。

System.map-3.19

地址和符号列表;包含有入口点的映射以及所有函数和内核数据结构的地址

相关文章
|
3月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
230 3
Linux系统禁用swap
|
3月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
344 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
305 0
Linux系统初始化脚本
|
3月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
286 1
|
3月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
二、Linux文本处理与文件操作核心命令
|
3月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
297 137
|
3月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
689 57
|
6月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
513 143
linux命令—tree
|
2月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
428 2
|
3月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
289 0
Linux内存问题排查命令详解