设备驱动程序和内核模块有什么区别

har*_*nja 9 drivers kernel devices

我知道驱动程序是一种可以与硬件通信以控制连接到计算机的设备的软件。而内核模块是一小段代码,可以插入内核以提高内核的性能。我想问一下驱动程序是如何与内核一起工作的,设备驱动程序和内核模块之间的主要区别是什么,它们是如何工作的?

V13*_*V13 8

Weeeellll.....

内核模块是非常具体的东西:在核心内核启动后作为模块(即动态)加载的内核的一部分。那可以是任何东西。

为了使用硬件,您需要一些驻留在主要内核中的部分,原因有两个:

  1. 为了能够执行在用户空间中无法完成或不切实际的硬件操作,或者能够将状态保持在进程范围之外。
  2. 因为在用户空间做真的非常低效

为了管理大多数硬件,您需要一个内核空间对应物。这可以编译为内核的一部分,也可以编译为稍后按需加载的模块。使用模块可以不加载所有模块。

但是模块不必只与硬件相关。有些模块只添加了功能,如(例如)ipv6、防火墙选项等。

另一方面,驱动程序通常可以轻松访问硬件。它通常包含所有特定于硬件的东西并公开一个通用 API。泛型是指足够泛型但不一定是全球性或标准的东西。例如,ATI 图形卡的驱动程序将为所有 ATI 卡公开一个通用 API,但它可能与其他卡不同。

驱动程序可以在用户空间、内核(内置或模块)中创建,也可以在两端都有分支。例如,现在的显卡驱动一部分在内核中,一部分在用户空间(例如 X 服务器、DRI 等)