关于操作系统:驱动程序如何成为内核的一部分?

How do drivers become a part of the kernel?

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


即使7年前被问到那些多年后偶然发现它的人,我也要回答这个问题。

  • 内核是操作系统的核心,因此包括对多种功能的支持,这些功能将依赖于整个系统。
  • 系统服务例程不必位于单个内核映像下(例如,在Windows上,可以使用FltMgr.sys来处理文件系统,并且可以通过设备控制例程与之通信)。
  • 内核模式设备驱动程序是通俗易懂的术语,是内核的扩展。您将以当前特权级别0(适用于Ring 0)执行,因此将取消您对内存访问和特定指令使用的限制。您的信任度也会更好。
  • 内核模式设备驱动程序实质上是内核的"模块"。您在Windows上的用户模式下具有动态链接库(DLL),在OS X上的Dylib具有动态链接库...将内核模式设备驱动程序视为等同于内核模式的驱动程序,除了它不必扩展实际的内核,它可以用于必须在第三方应用程序的内核级别实现的功能。

    此外,其背后的想法是,主内核能够提供对一组API的访问,以供第三方内核模式软件依赖。否则,第三方开发人员将必须自己实现所有内容,而这基本上就是" OS开发"。

    Bullets点:

  • 内核模式设备驱动程序具有与实际OS内核相同的特权。
  • 内核模式设备驱动程序应该能够使用某些OS内核的API来辅助实现与OS的设计方式相配合的功能(例如,文件系统,进程,注册表(或等效项),内存管理)等)。
  • 内核模式设备驱动程序基本上是OS内核的"扩展",因为您不替换实际的内核,但您也处于相同的特权级别(称为#1),并且理论上可以扩展系统范围的功能如果您喜欢它(例如,通过呼叫门或进程间通信之类的通信方法来增加对用户模式软件的支持,以依赖于设备驱动程序的功能)。
  • 我希望这对将来使用这个极老线程的绊脚石有所帮助;这个问题真的很好。


    驱动程序被编译到一个公开已知接口的库中。然后,内核在启动时扫描驱动程序,并将其加载到内核内存中。某些操作系统(例如linux)还支持可以在操作系统运行时加载/卸载的内核模块...