4

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

4

2 回答 2

6

我要回答这个问题,即使 7 年前有人问过这些年来偶然发现它的人。

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

内核模式设备驱动程序本质上是内核的“模块”。您在 Windows 上拥有用户模式下的动态链接库 (DLL),或者在 OS X 上拥有 Dylib... 将内核模式设备驱动程序视为内核模式等价物,除非它不必关于扩展实际的内核,它可以用于必须在内核级别为第三方应用程序实现的功能。

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

要点:

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

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

于 2018-06-21T13:23:52.070 回答
2

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

于 2010-09-08T01:08:11.753 回答