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

时间:2010-09-08 01:04:46

标签: operating-system kernel drivers

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

内核模式设备驱动程序实质上是内核的“模块”。您在Windows上的用户模式下具有动态链接库(DLL),在OS X上的Dylib具有动态链接库...将内核模式设备驱动程序视为等同于内核模式的驱动程序,只是它没有 have < / em>是为了扩展实际的内核,它可以用于必须在第三方应用程序的内核级别实现的功能。

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

子弹点:

  1. 内核模式设备驱动程序具有与实际OS内核相同的特权。
  2. 内核模式设备驱动程序应该能够使用某些OS内核的API来辅助实现与OS的设计方式相配合的功能(例如,文件系统,进程,注册表(或等效项),内存管理)等)。
  3. 内核模式设备驱动程序基本上是OS内核的“扩展”,因为您不替换实际的内核,但您也处于相同的特权级别(如#1所述),并且理论上可以扩展系统范围的功能如果您愿意的话(例如,通过呼叫门或进程间通信之类的通信方法来增加对用户模式软件的支持,使其依赖于设备驱动程序的功能)。

我希望这对将来使用这个极老线程的绊脚石有所帮助;这个问题真的很好。