驱动程序如何成为内核的一部分?

noa*_*oah 4 operating-system drivers kernel

有人告诉我,对于大多数操作系统,驱动程序成为内核的一部分。这是怎么发生的?内核是否自己反编译,添加驱动程序,然后重新编译?还是内核的驱动程序插件?驱动程序甚至是他们自己的独立程序吗?

Imm*_*VBR 6

尽管 7 年前有人问过这个问题,但我还是要回答这个问题,这些问题是多年后偶然发现的。

  1. 内核是操作系统的核心,因此包括对将依赖于系统范围的各种功能的支持。
  2. 系统服务例程不必出现在单个内核映像下(例如,在 Windows 上,有 FltMgr.sys 来处理文件系统,这通过设备控制例程进行通信)。
  3. 内核模式设备驱动程序通俗地说,是内核的扩展。您将以当前特权级别 0(用于 Ring 0)执行,因此将取消对内存访问和特定指令使用的限制。您的信任度也会更高。

内核模式设备驱动程序本质上是内核的“模块”。你有一个动态链接库(DLL)在用户模式下在Windows或OS X上的一个Dylib ......想想一个内核模式设备驱动程序的内核模式等效的,只是它不具有约为延长实际内核,它可以用于必须在内核级别为第三方应用程序实现的功能。

此外,其背后的想法是主内核能够提供对一组 API 的访问,供第三方内核模式软件依赖。否则,第三方开发人员将不得不自己实现一切,这基本上就是“操作系统开发”。

要点:

  1. 内核模式设备驱动程序具有与实际操作系统内核相同的权限。
  2. 内核模式设备驱动程序应该能够使用一些操作系统内核的 API 来帮助实现与操作系统的设计方式(例如文件系统、进程、注册表(或等效)、内存管理等)一起工作的功能。 )。
  3. 内核模式设备驱动程序基本上是操作系统内核的“扩展”,因为您不会替换实际内核,但您也处于相同的特权级别(如 #1 所述)并且理论上可以扩展系统范围的功能,如果您觉得喜欢它(例如添加对用户模式软件的支持,以通过调用门或进程间通信等通信方法依赖设备驱动程序功能)。

我希望这对这个极其古老的线程的任何未来绊脚石有所帮助;这个问题真的很好。