可加载内核模块

编辑
本词条由“匿名用户” 建档。

在计算中,可加载内核模块(LKM)是一个目标文件,其中包含用于扩展操作系统的运行内核或所谓的基本内核的代码。LKM通常用于添加对新硬件(如设备驱动程序)和/或文件系统的支持,或用于添加系统调用。当不再需要LKM提供的功能时,可以卸载它以释放内存和其他资源。 当前大多数类Unix系统和MicrosoftWindows都支持不同名称的可加载内核模块,例如FreeBSD中的内核可加载模块(kld)、ma...

可加载内核模块

编辑

在计算中,可加载内核模块 (LKM) 是一个目标文件,其中包含用于扩展操作系统的运行内核或所谓的基本内核的代码。 LKM 通常用于添加对新硬件(如设备驱动程序)和/或文件系统的支持,或用于添加系统调用。 当不再需要 LKM 提供的功能时,可以卸载它以释放内存和其他资源

当前大多数类 Unix 系统和 Microsoft Windows 都支持不同名称的可加载内核模块,例如 FreeBSD 中的内核可加载模块 (kld)、macOS 中的内核扩展 (kext)(尽管正在放弃对第三方模块的支持)、内核扩展 AIX 中的模块、Windows NT 中的内核模式驱动程序和 VxWorks 中的可下载内核模块 (DKM)。 它们也称为内核可加载模块(或 KLM),简称为内核模块 (KMOD)。

优势

编辑

如果没有可加载的内核模块,操作系统将不得不将所有可能的预期功能直接编译到基本内核中。 大部分功能将驻留在内存中而不被使用,从而浪费内存,并且需要用户在每次需要新功能时重建并重新启动基本内核。

缺点

编辑

与静态内核相比更喜欢模块化内核的一个小批评是所谓的碎片惩罚。 基本内核总是通过其设置例程解压缩到真正的连续内存中; 因此,基本内核代码永远不会碎片化。 一旦系统处于可以插入模块的状态,例如一旦安装了包含模块的文件系统,任何新的内核代码插入都可能导致内核变得碎片化,从而引入轻微的性能损失 通过使用更多的 TLB 条目,导致更多的 TLB 未命中。

在不同操作系统中的实现

编辑

Linux

Linux 中的可加载内核模块由 modprobe 命令加载(和卸载)。 它们位于 /lib/modules 或 /usr/lib/modules 中,并且自 2.6 版(以前的版本使用 .o 扩展名)以来具有扩展名 .ko(内核对象)。 lsmod 命令列出加载的内核模块。 在紧急情况下,当系统由于例如故障而无法启动时 损坏的模块,可以通过修改内核引导参数列表来启用或禁用特定模块(例如,如果使用 GRUB,则在 GRUB 开始菜单中按 'e',然后编辑内核参数行)。

许可证问题

在 Linux 维护者看来,LKM 是内核的衍生作品。 Linux 维护者容忍专有模块的分发,但允许将符号标记为仅适用于 GNU 通用公共许可证 (GPL) 模块。

加载专有或非 GPL 兼容模块将在运行的内核中设置一个“污点”标志——这意味着维护者不太可能调查遇到的任何问题或错误。 LKM 有效地成为正在运行的内核的一部分,因此可以破坏内核数据结构并产生如果模块确实是专有的则可能无法调查的错误。

Linuxant 争议

2004 年,将专有设备驱动程序作为可加载内核模块发布的咨询公司 Linuxant 试图在其 MODULE_LICENSE 中滥用空终止符,如以下代码摘录所示:

MODULE_LICENSE("GPL\0for the files in the \"GPL\" directory; for others, only LICENSE file applicable");

内核当时使用的字符串比较代码试图在模块到达空字符 (\0) 时判断该模块是否为 GPLed 停止,因此误认为该模块声明其许可证只是 GPL。

自由系统

FreeBSD 的内核模块存储在 /boot/kernel/ 中,用于随操作系统分发的模块,或者通常存储在 /boot/modules/ 中,用于从 FreeBSD 端口或 FreeBSD 软件包安装的模块,或者用于专有或其他二进制模块。 FreeBSD 内核模块通常有扩展名 .ko。 机器启动后,它们可以使用 kldload 命令加载,使用 kldunload 卸载,并使用 kldstat 列出。 模块也可以在内核启动之前从加载程序加载,可以自动(通过 /boot/loader.conf)或手动加载。

苹果操作系统

macOS 中的一些可加载内核模块可以自动加载。 可加载内核模块也可以通过 kextload 命令加载。 它们可以通过 kextstat 命令列出。

内核模块

可加载内核模块位于扩展名为 .kext 的包中。 操作系统提供的模块存储在 /System/Library/Extensions 目录中; 第三方提供的模块位于其他各种目录中。

网络软件

NetWare 内核模块称为 NetWare 可加载模块 (NLM)。 NLM 通过 LOAD 命令插入到 NetWare 内核中,并通过 UNLOAD 命令删除; modules 命令列出当前加载的内核模块。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/196276/

(2)
词条目录
  1. 可加载内核模块
  2. 优势
  3. 缺点
  4. 在不同操作系统中的实现
  5. Linux
  6. 许可证问题
  7. Linuxant 争议
  8. 自由系统
  9. 苹果操作系统
  10. 网络软件

轻触这里

关闭目录

目录