kerneld 功能是由 Bjorn Ekwall 在 1.3 开发内核期间引入的。 它允许内核模块(例如设备驱动程序、网络驱动程序和文件系统)在需要时自动加载,而不是必须使用 modprobe 或 insmod 手动加载。
更有趣的是,尽管这些方面尚未(还?)与标准内核集成
它可以设置为运行用户程序而不是默认的屏幕保护程序,从而让您可以使用任何程序作为屏幕保护程序。
类似于屏幕保护程序支持,您也可以将标准控制台蜂鸣声更改为完全不同的声音。
kerneld 由两个组件组成
Linux 内核中支持向守护进程发送请求,请求用于特定任务的模块。
一个用户空间守护进程,它可以确定必须加载哪些模块才能满足来自内核的请求。
两个组件都必须工作才能使 kerneld 支持发挥作用; 仅设置其中一个或另一个是不够的。
使用 kerneld 有一些很好的理由。 我将提到的理由是我的,其他人有其他理由。
如果您必须为几个只有细微差别的系统构建内核 - 例如,不同类型的网卡 - 那么您可以构建一个内核和一些模块,而不是必须为每个系统构建单独的内核。
模块更容易供开发人员测试。 您无需重启系统即可加载和卸载驱动程序; 这适用于所有模块,而不仅仅是 kerneld 加载的模块。
它减少了内核内存的使用,从而为应用程序留出更多可用内存。 内核使用的内存 永远不会 被交换出去,因此如果您的内核中编译了 100Kb 的未使用驱动程序,它们只是在浪费 RAM。
我使用的一些东西,例如 ftape 软盘磁带驱动程序或 iBCS,仅作为模块提供,但我不想在需要它们时麻烦地加载和卸载它们。
制作 Linux 发行版的人员不必构建 284 个不同的启动镜像:每个用户只为自己的硬件加载他需要的驱动程序。 大多数现代 Linux 发行版都会检测您的硬件,并且只会加载实际需要的那些模块。
当然,也有您可能不想使用它的原因。 如果您更喜欢只有一个包含所有内置驱动程序的内核镜像文件,那么您读错了文档。
Linux 内核中的支持是在 Linux 1.3.57 中引入的。 如果您有较早的内核版本,则需要升级才能获得 kerneld 支持。 当前的 Linux 内核源代码可以在大多数 Linux FTP 存档站点找到,包括
用户空间守护进程包含在 modules 包中。 这些通常可以从与内核源代码相同的位置获得
注意: 如果您想使用最新的 开发 内核尝试模块加载,则应使用较新的 modutils 包,而不是 modules 包。 始终检查Documentation/Changes内核源代码中的文件,以获取内核镜像所需的最低版本号。 另请参阅关于模块和 2.1 内核的问题。