如何设置?

首先获取必要的组件:一个合适的内核和最新的 modules 软件包。然后您应该按照软件包中包含的说明安装模块实用程序。非常简单:只需解压源代码并运行 make install。这将在以下目录编译和安装以下程序:/sbingenksysm, insmod, lsmod, modprobe, depmodkerneld。我建议您在启动脚本中添加一些行,以便在每次启动 Linux 时执行一些必要的设置。将以下行添加到您的/etc/rc.d/rc.S文件(如果您运行的是 Slackware),或添加到/etc/rc.d/rc.sysinit如果您运行的是 SysVinit,例如 Debian、Corel、RedHat、Mandrake 或 Caldera

        # Start kerneld - this should happen very early in the
        # boot process, certainly BEFORE you run fsck on filesystems
        # that might need to have disk drivers autoloaded
        if [ -x /sbin/kerneld ]
        then
                /sbin/kerneld
        fi

        # Your standard fsck commands go here
        # And you mount command to mount the root fs read-write

        # Update kernel-module dependencies file
        # Your root-fs MUST be mounted read-write by now
        if [ -x /sbin/depmod ]
        then
                /sbin/depmod -a
        fi

这些命令可能已经安装在您的 SysV init 脚本中。第一部分启动 kerneld 本身。第二部分在启动时调用 depmod -a 以构建所有可用模块的列表,并分析它们之间的相互依赖关系。然后,depmod 映射告诉 kerneld,如果一个模块在加载自身之前需要加载另一个模块。

注意:最新版本的 kerneld 有一个选项可以链接到 GNU gdbm 库,libgdbm。如果您在构建模块实用程序时启用此选项,如果 libgdbm 不可用,kerneld 将不会启动,如果您将/usr放在单独的分区上并在/usr挂载之前启动 kerneld,则很可能发生这种情况。推荐的解决方案是将/usr/lib/libgdbm移动到/lib,或者静态链接 kerneld。

接下来,解压内核源代码,配置并构建您喜欢的内核。如果您以前从未这样做过,您绝对应该阅读 Linux 源代码顶层的 README 文件。当您运行 make xconfig 来配置内核时,您应该注意一些早期出现的问题

  Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y

您需要选择可加载模块支持,否则 kerneld 将无模块可加载!只需选择“是”。

  Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y

当然,这也是必要的。然后,内核中的许多内容可以构建为模块 - 您将看到如下问题

  Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] 

您可以在其中回答 M,表示 “模块”。通常,只有启动系统必需的驱动程序才应构建到内核中;其余的可以构建为模块。

必要的驱动程序

启动系统所需的必要驱动程序必须编译到核心内核中,并且不能作为模块加载。通常,这将包括硬盘驱动程序和根文件系统驱动程序。如果您有双启动机器并且依赖于外部分区中的文件,则还必须将对外部分区文件系统的支持编译到核心内核中。

当您完成 make config 后,使用 make dep clean bzlilo modules modules_install 编译并安装新内核和模块。

呼。

编译内核镜像:make zImage 命令将不会安装内核,并将新的内核镜像留在以下文件中arch/i386/boot/zImage。要使用此镜像,您需要将其复制到您保存启动镜像的位置,并使用 LILO 手动安装它。

有关配置、构建和安装您自己的内核的更多信息,请查看定期发布到comp.os.linux.answers,并可从 Linux 文档项目及其镜像站点获取。

尝试 kerneld

现在使用新内核重启。当系统重新启动后,您可以运行 ps ax,您应该看到 kerneld 的一行

    PID TTY STAT  TIME COMMAND
     59  ?  S     0:01 /sbin/kerneld

kerneld 的优点之一是,一旦您安装了内核和守护程序,几乎不需要任何设置。首先,尝试使用您构建为模块的驱动程序之一;它很可能会在没有进一步配置的情况下工作。如果我将软盘驱动程序构建为模块,我可以将 DOS 软盘放入驱动器并输入

  osiris:~ $ mdir a:
   Volume in drive A has no label
   Volume Serial Number is 2E2B-1102
   Directory for A:/

  binuti~1 gz       1942 02-14-1996  11:35a binutils-2.6.0.6-2.6.0.7.diff.gz
  libc-5~1 gz      24747 02-14-1996  11:35a libc-5.3.4-5.3.5.diff.gz
          2 file(s)        26689 bytes

软盘驱动程序工作了!当我尝试使用软盘时,它会被 kerneld 自动加载。

要查看软盘模块是否确实已加载,您可以运行 /sbin/lsmod 以列出所有当前加载的模块

  osiris:~ $ /sbin/lsmod 
  Module:        #pages:  Used by:
  floppy            11    0 (autoclean)

“(autoclean)” 表示如果模块超过一分钟未使用,则会被 kerneld 自动删除。因此,11 页内存(= 44kB,一页为 4 kB)仅在我访问软盘驱动器时使用 - 如果我超过一分钟不使用软盘,它们将被释放。如果您应用程序的内存不足,这非常棒!