第十三章 内核升级与定制内核 | |||||||
13.1 内核升级 | |||||||
13.1.1 2.4版本的内核 | |||||||
13.1.2 准备升级 | |||||||
13.1.3 下载可用于升级的内核 | |||||||
13.1.4 升级内核 | |||||||
13.1.5 校验初始 RAM 磁盘映像是否被创建 | |||||||
13.1.6 配置引导装载程序 | |||||||
13.1.7 内核模块 | |||||||
13.2 定制内核 | |||||||
13.2.1 准备定制 | |||||||
13.2.2 定制内核 | |||||||
13.2.3 建构单一化内核 | |||||||
13.1.1 2.4版本的内核 它包括以下功能:
|
|||||||
13.1.2 准备升级 为防止升级出问题,准备一张使用你系统的可运行的引导盘。或者在引导装载程序中保留老的内核选项。 要创建引导盘,在 shell 提示下登录为根用户,然后键入以下命令:
确定要升级的软件包:若你想重新编译内核,或把系统用于内核开发,应该还要升级 kernel-source 软件包。如果你需要 PCMCIA 支持(例如在便携电脑上), kernel-pcmcia-cs 软件包就必不可少。 RPM 软件包的 x86 版本被包括在文件名中。例如: kernel-2.4.20-2.47.1.athlon.rpm 是为AMD Athlon™ 和 AMD Duron™ 系统的, kernel-2.4.20-2.47.1.i686.rpm 是为 Intel® Pentium® II、 Intel® Pentium® III、和 Intel® Pentium® 4 系统的。在你判定了软件包之后,你需要升级内核,为 kernel 、 kernel-smp 、和 kernel-bigmem 软件包选择适用于微机的i386体系。 |
|||||||
13.1.3 下载可用于升级的内核 要判定是否有可用于你的系统的升级内核,方法有好几种。
|
|||||||
13.1.4 升级内核 下载了所需要的内核升级软件包,可以开始升级。建议保留原来的内核,以防万一。 使用 rpm 命令的 -i 选项来保留就内核。如果你使用了 -U 选项来升级 kernel 软件包,它会覆盖当前安装了的内核。该命令为(内核版本和 x86 版本会有所不同):
如果系统是多处理器系统,还需安装 kernel-smp 软件包(内核版本和 x86 版本会有所不同):
如果系统是基于 i686 的,并包含超过 4GB 的内存,还需安装为 i686 体系建构的 kernel-bigmem 软件包(内核版本和 x86 版本会有所不同):
如果你打算升级 kernel-source 、 kernel-docs 、或 kernel-utils 软件包,你可能不需要保留老版本。使用下面的命令来升级这些软件包(版本会有所不同):
如果系统需要 PCMCIA 支持(例如便携电脑),你还需要安装 kernel-pcmcia-cs 并保留老版本。如果你使用了 -i 选项,它可能会返回冲突,因为老内核需要该软件包来引导带有 PCMCIA 支持的系统。要绕过这个问题,使用 --force 选项,如下所示(版本会有所不同):
|
|||||||
13.1.5 校验初始 RAM
磁盘映像是否被创建 如果系统使用 ext3 文件系统或 SCSI 控制器,你就需要初始 RAM 磁盘。初始 RAM 磁盘的目的是允许模块化的内核在它能够进入模块通常驻留的设备之前具备进入内核需要从该设备引导的模块的能力。初始 RAM 磁盘通过使用 mkinitrd 命令来创建。然而,如果内核及其相关文件是从 Red Hat, Inc. 发行的 RPM 软件包中安装或升级的话,这个步骤会被自动执行;因此,它不必被手工进行。要校验它是否被创建了,使用 ls -l /boot 命令来确定 initrd-2.4.20-2.47.1.img 文件被创建了(版本应该匹配刚刚安装了的内核的版本)。 |
|||||||
13.1.6 配置引导装载程序 如果你安装了 GRUB 或 LILO 引导装载程序, kernel RPM 软件包配置它们来引导刚刚安装的内核,但是它并不配置引导装载程序默认引导新内核。 13.1.6.1 GRUB如果你选择了 GRUB 作为引导装载程序,请确认 /boot/grub/grub.conf 文件中包含的 title 部分中的版本与你刚刚安装的 kernel 软件包的版本相同(如果你安装了 kernel-smp 和/或 kernel-bigmem ,你也会看到这个部分):
如果你创建了单独的 /boot 分区,到内核与 initrd 映像的路径是相对于 /boot 分区而言的。 注意,默认引导项目没有被设置为新内核。要配置 GRUB 来默认引导新内核,把 default 变量的值改成包含新内核的 title 部分的号码。这个号码从 0 开始。例如,如果新内核是第二个 title 部分,把 default 设置为 1 。 你可以重新引导计算机来开始测试这个新内核,观察屏幕上的消息来确保硬件被正确地检测到了。 13.1.6.2 LILO如果你选择了 LILO 作为引导装载程序,请确认 /etc/lilo.conf 文件中包含的 image 部分中的版本与你刚刚安装的 kernel 软件包的版本相同(如果你安装了 kernel-smp 和/或 kernel-bigmem ,你也会看到这个部分):
注意,默认引导项目没有被设置为新内核。要配置 LILO 来默认引导新内核,把 default 变量的值改成包含新内核的 image 部分中的 label 的值。以根用户身份运行 /sbin/lilo 命令来启用改变。运行后,其输出会与如下相似:
2.4.20-2.47.1 后面的 * 意味着那部分中的内核是 LILO 会默认引导的内核。 你可以重新引导计算机来开始测试这个新内核,观察屏幕上的消息来确保硬件被正确地检测到了。 |
|||||||
13.1.7 内核模块 Linux 内核具有模块化设计。在引导时,只有少量的驻留内核被载入内存。之后,无论何时用户要求使用驻留内核中没有的功能,某内核模块(kernel module),有时又称驱动程序(driver)。就会被动态地载入内存。在安装过程中,系统上的硬件会被探测。基于探测结果和用户提供的信息,安装程序会决定哪些模块需要在引导时被载入。安装程序会设置动态载入机制来透明地运行。 当系统使用新硬件引导后,Kudzu 程序会运行,如果新硬件被支持,它就会被检测到,该程序还会为它配置模块。你也可以通过编辑模块配置文件 /etc/modules.conf 来手工指定这个模块。 /sbin/lsmod 命令显示了当前载入了的模块列表。例如:
对每行而言,第一列是模块名称;第二列是模块大小;第三列是用量计数。 /sbin/lsmod 输出和查看 /proc/modules 的输出相同。 要载入内核模块,使用 /sbin/modprobe 命令,然后跟着内核模块的名称。按照默认设置, modprobe 试图从 /lib/modules/<kernel-version> /kernel/drivers/ 子目录中载入模块。每类模块都有一个子目录,如用于网络接口驱动程序的 net/ 子目录。某些内核模块有模块依赖关系,这意味着你必须首先载入其它模块才能载入这些模块。 /sbin/modprobe 命令检查这些依赖关系,并在载入指定模块前载入满足这些依赖关系的模块。你还可以使用 /sbin/insmod 命令来载入内核模块;不过它不解决依赖关系。因此,推荐你使用 /sbin/modprobe 命令。 要卸载内核模块,使用 /sbin/rmmod 命令和模块名称。 rmmod 工具只卸载不在使用的、和不是被正使用的模块所依赖的模块。另一个有用的模块工具是 modinfo 。使用 /sbin/modinfo 命令来显示关于内核模块的信息。包括 -d 在内的选项显示了关于模块的简短描述, -p 选项列举了模块所支持的参数。 |
|||||||
13.2 定制内核 | |||||||
13.2.1 准备定制 | |||||||
13.2.2 定制内核 | |||||||
13.2.3 建构单一化内核 | |||||||
13.2.1 准备定制 在建构定制内核之前,最重要的步骤是确定你有一张可运行的紧急引导盘,以防万一出错。要制作一个将会使用当前运行的内核来引导的引导盘,执行以下命令:
制作了磁盘后,请测试它以确定它能够引导系统。 要重新编译内核,你必须安装了 kernel-source 软件包。启用命令来判定它是否被安装:
|
|||||||
13.2.2 定制内核 要定制内核,遵循以下步骤(以根用户身份执行):
|
|||||||
13.2.3 建构单一化内核 要建构单一化内核,除了几个例外以外,其步骤和和建构模块化内核相同。
|
|||||||