4. 为模块重新编译内核

内核可以重新配置为使用模块来处理除作为根目录挂载的文件系统(在大多数情况下,这是 ext2 文件系统)之外的所有内容。

然而,有些项目似乎难以作为模块正确设置,因此我建议将以下项目编译到内核中

另一方面,有些驱动程序组合只能作为模块工作,尤其是以下组中两个或多个的组合

您需要决定将哪些内容编译到内核中,哪些作为模块,但应考虑以上几点。实际的选择是在编译期间做出的,通过以下指令序列的第二个指令

cd /usr/src/linux
make menuconfig
make dep clean modules modules_install zImage
    

完成此操作后,需要映射出模块依赖项。这可以使用以下命令完成

depmod -a
    

现在需要将新内核插入到引导链中。我假设读者正在使用 LILO 来实现此目的,因为这是我唯一有经验的引导加载程序。

我建议不要自动将新编译的内核作为默认 Linux 内核插入,因为如果它失败,那么在不进行完全重新安装的情况下恢复 Linux 设置将非常困难,这是不推荐的。因此,我在我的/etc/lilo.conf文件中包含以下条目

image=/usr/src/linux/arch/i386/boot/zImage
  label=new
  alias=n
  read-only
  vga=ask
  optional
    

此条目表示存在一个可选的引导选项(如果相关镜像不存在,则将被忽略),该选项引导文件/boot/newlinux如果被选中,并允许您选择要引导的视频模式。

假设在/etc/lilo.conf中存在上述条目,则修订后的内核已在编译结束时正确放置,并且可以通过以下命令安装

lilo
    

完成此操作后,读者需要按照与其选择的发行版相关的后续步骤进行操作,如下所示

5.1. 为模块配置 Debian 或 RedHat

在执行此处列出的步骤之前,假定已执行 为模块重新编译内核 中列出的步骤。

Debian 和 RedHat 发行版具有相同的引导过程,因此也具有相同的模块配置过程。

  1. 以 root 用户身份登录后,使用您最喜欢的文本编辑器创建一个名为/etc/rc.d/init.d/modules.init的新文件,其中包含以下内容

    # Modules initialisation.
    #
    # Start up the module auto-loading daemon.
    /sbin/kerneld
    
    # Mount all currently unmounted auto-mounted partitions.
    /sbin/mount -a
              
  2. 创建上述文件后,以 root 用户身份登录时执行以下步骤

    cd /etc/rc.d
    chmod 755 init.d/*
    cd rc3.d
    ln -s ../init.d/modules.init 05modules.init
              

现在可以重新启动系统,这样做后,将发现模块已完全实现

5.2. 为模块配置 Slackware

在执行此处列出的步骤之前,假定已执行 为模块重新编译内核 中列出的步骤。

文件/etc/rc.d/rc.M需要按如下方式编辑

  1. 在第 18 行左右,有一个部分内容如下

    # Screen blanks after 15 minutes idle time.
    /bin/setterm -blank 15
              

    紧随其后,插入以下段落,并在其两侧留出通常的空行

    # Load the kernel module auto-loader.
    /sbin/kerneld
              
  2. 大约 12 行之后是以下内容

    # if there is no /etc/HOSTNAME, fall back on this default:
              

    紧靠其前,插入以下段落,同样在其两侧留出通常的空行

    # Mount remaining unmounted auto-mount drives.
    /sbin/mount -a
              

完成这些更改后,保存文件。

Slackware 不需要进一步修改。

5.3. 为模块配置其他发行版

在执行此处列出的步骤之前,假定已执行 为模块重新编译内核 中列出的步骤。

其他发行版的精确过程尚未确定,但可能与上述之一相同。要确定是哪一种,请显示/etc/rc.d目录的内容目录,如下所示

cd /etc/rc.d
ls -l *.d rc.*
      

从这个结果显示中,您可以选择以下三个选项之一

  1. 如果此列表包含名为init.d的目录和一些名称与rc?.d匹配的目录,其中问号被单个数字替换,并且包含名为rc.M的文件,则可以通过按照标题 为模块配置 Debian 或 RedHat 下列出的步骤为该发行版配置模块。

  2. 如果此列表不包含名为init.d但包含名为rc.M的文件,则可以通过按照标题 为模块配置 Slackware 下列出的步骤为该发行版配置模块。

  3. 如果此列表与上述任何条件都不匹配,则该发行版具有本文档未涵盖的引导脚本。在这种情况下,欢迎您联系本文档的作者以寻求建议。