Linux kerneld mini-HOWTO | ||
---|---|---|
上一页 |
大约在内核版本 1.3.80 左右,网络代码被更改为允许将协议族(例如 IPX、AX.25 和 AppleTalk)作为模块加载。这导致添加了一个新的 kerneld 请求net-pf-X,其中X是一个数字,用于标识协议(参见/usr/src/linux/include/linux/socket.h了解各种数字的含义)。不幸的是,ifconfig 意外地触发了这些消息,因此当系统启动并运行 ifconfig 来设置环回设备时,很多人会收到几条记录的消息。这些消息是无害的,您可以通过添加以下行来禁用它们
alias net-pf-3 off # Forget AX.25 alias net-pf-4 off # Forget IPX alias net-pf-5 off # Forget AppleTalk |
到/etc/conf.modules。当然,如果您确实将 IPX 用作模块,则不应添加行来禁用 IPX。
已经有一些关于此问题的报告。这似乎是 kerneld 和 tkPPP 脚本之间的不幸交互,该脚本在某些系统上用于设置和监视 PPP 连接。该脚本显然在运行 ifconfig 时运行循环。这会触发 kerneld 查找net-pf-X模块(见上文),保持系统负载较高,并可能将大量 Cannot locate module fornet-pf-X消息倾倒到系统日志中。除了不使用 tkPPP 或更改它以使用其他方式监视连接外,没有已知的解决方法。
为您的 SCSI 主机适配器添加到您的/etc/conf.modules中。请参阅上面 scsi_hostadapter 条目的描述。
这是模块实用程序中的一个错误,仅在使用 binutils 2.6.0.9 及更高版本时才会出现,并且也记录在 binutils 的发行说明中。因此,请阅读该说明,或获取模块实用程序的升级版本,以修复此错误。
模块的设置在加载时存储在模块本身内部。因此,当 kerneld 自动卸载模块时,您所做的任何设置都会被遗忘,并且下次加载模块时,它会恢复为默认设置。
您可以告诉 kerneld 在模块自动加载后运行程序来配置模块。请参阅 预安装/后安装 上的post-install条目。
你不能。没有任何版本的 dosemu,无论是官方版本还是开发版本,都支持通过 kerneld 加载 dosemu 模块。但是,如果您运行的是 kernel 2.0.26 或更高版本,您不再需要特殊的 dosemu 模块;只需将 dosemu 升级到 0.66.1 或更高版本。
当内核向 kerneld 发送请求时,它希望在一秒钟内收到确认。如果 kerneld 没有发送此确认,则会记录此消息。请求将重新传输,最终应该可以通过。
这通常发生在负载非常高的系统上。由于 kerneld 是用户模式进程,因此它像系统上的任何其他进程一样被调度。在负载较高时,它可能无法及时运行以在内核超时之前发回确认。
如果即使在负载较轻时也发生这种情况,请尝试重新启动 kerneld。杀死 kerneld 进程,然后使用命令 /usr/sbin/kerneld 再次启动它。如果问题仍然存在,您应该向<linux-kernel@vger.rutgers.edu>发送错误报告,但请确保您的内核、kerneld 和模块实用程序的版本是最新的,然后再发布有关该问题的信息。检查linux/Documentation/Changes
已经有很多报告表明 mount(8) 命令不等待 kerneld 加载文件系统模块。lsmod 显示 kerneld 加载了模块,如果您立即重复 mount 命令,它将成功。这似乎是模块实用程序版本 1.3.69f 中的一个错误,会影响某些 Debian 用户。可以通过获取更高版本的模块实用程序来修复它。
您正在使用旧版本的 smbmount 实用程序。从 TSX-11 上的 SMBFS 存档 获取最新版本(0.10 或更高版本)
您不能模块化所有内容:内核必须内置足够的驱动程序,以便能够挂载您的根文件系统,并运行必要的程序来启动 kerneld[1]。您不能模块化
根文件系统所在的硬盘驱动器的驱动程序
根文件系统驱动程序本身
init、kerneld 和其他程序的二进制格式加载器
较新版本的 kerneld 需要 GNU dbm 库,libgdbm.so才能运行。大多数安装程序都将此文件放在/usr/lib中,但您可能在/usr文件系统挂载之前启动了 kerneld。这的一个症状是 kerneld 在启动期间(从您的 rc 脚本)不会启动,但是如果您在系统启动后手动启动它,则可以正常运行。解决方案是将 kerneld 启动移动到您的/usr挂载之后,或者将 gdbm 库移动到您的根文件系统,例如/lib.
Slackware 安装(可能还有其他安装)构建了一个默认的/etc/rc.d/rc.modules,它对各种模块执行显式的 modprobe。究竟 modprobe 哪些模块取决于原始内核的配置。您可能已经重新配置了您的内核以排除一个或多个在 rc.modules 中 modprobe 的模块,因此会显示错误消息。通过注释掉您不再使用的任何模块来更新您的 rc.modules,或者完全删除rc.modules,并让 kerneld 在需要时加载模块。
您可能重新配置/重新构建了您的内核并排除了一些模块。您有一些不再使用的旧模块挂在/lib/modules目录中。最简单的解决方法是删除您的/lib/modules/x.y.z目录,并再次从内核源代码目录执行 make modules_install。请注意,此问题仅在重新配置内核而不更改版本时才会发生。如果您在移动到较新的内核版本时看到此错误,则说明您遇到了其他问题。
奇数编号的 Linux 是开发内核。因此,应该预期事情会不时中断。发生重大变化的事情之一是模块的处理方式,以及内核和模块加载到内存中的位置。
简而言之,如果您想将模块与开发内核一起使用,则必须
阅读Documentation/Changes文件并查看您的系统需要升级哪些软件包
使用最新的 modutils 软件包,可从 Red Hat 上的 AlphaBits 或 TSX-11 上的镜像站点 获取
如果您想将模块与 2.1 内核一起使用,我建议至少使用内核 2.1.29。
kerneld 最初对按需建立拨号网络连接提供了一些支持;尝试向未连接的网络发送数据包将导致 kerneld 运行/sbin/request_route脚本来设置 PPP 或 SLIP 连接。
事实证明这是一个坏主意。Linux 网络领域的 Alan Cox 在 linux-kernel 邮件列表中写道
request-route 的东西已经过时、损坏且不需要 [...] 它也已从 2.1.x 树中删除。
与其使用 request-route 脚本和 kerneld,我强烈建议使用 Eric Schenk 的 diald 软件包来管理您的按需拨号。
[1] | 实际上,这不是真的。较新的 1.3.x 和所有 2.x 内核都支持使用由 LILO 或 LOADLIN 加载的初始 ram-disk;可以从该磁盘在引导过程的早期加载模块。如何执行此操作在linux/Documentation/initrd.txt文件中进行了描述,该文件随内核源文件一起提供。 |