关于设备驱动程序和问题的问题核心

时间:2011-05-01 15:10:47

标签: operating-system device-driver

目前,我的操作系统从软盘启动。由于软盘驱动程序已经过时,我打算更改启动媒体。

当我试图找出要使用的启动媒体时,我意识到无论我选择什么,我都需要为它编写设备驱动程序。虽然实模式BIOS可能会为我提供一些与该设备交互的中断,但一旦进入保护模式,我就会独立完成。所以我开始阅读< 一些指南。但那本书是关于为Linux系统编写设备驱动程序 。因此,这意味着设备驱动程序特定于操作系统。

现在我收到了以下问题:

  • 设备驱动程序在哪些方面依赖于操作系统?
  • 操作系统和设备驱动程序如何在内存中布局?
  • 操作系统和设备驱动程序如何相互交互?
  • 如果我热插拔设备,操作系统如何知道在哪里找到合适的设备驱动程序?

1 个答案:

答案 0 :(得分:3)

设备驱动程序是一段代码,用于实现设备与(通常)操作系统内核之间的接口。在这方面,它必然依赖于它所针对的操作系统 - 这是核心目的,使操作系统了解设备并允许其使用其功能。

这并不是说不能在不同的操作系统上共享设备驱动程序的代码。它们的某些部分可以是可移植的(设备端),但接口端(与OS交互)依赖于OS定义/提供的API。

内存中的布局完全取决于系统。驱动程序与其他内核服务不必具有任何特定的内存布局策略。设备本身可能会很好地施加内存布局约束,但这是一个不同的主题。

操作系统定义了它如何通过API与设备驱动程序交互。你已经在这本(伟大的)书中获得了Linux如何做到这一点的文档。其他操作系统可以采用不同的方式 - 操作系统设计者设置规则。如果您是创建内核的人,则可以定义API。

热插拔并不容易。进行映射的一种方法是使用某种形式的查找表,其中来自设备的信息作为“键”,以及合适的设备驱动程序结构/指针/无论作为值,还是相反(在驱动程序中具有API)它可以让你知道可以处理的设备ID。设备ID可以是PCI设备ID,USB标识符......取决于总线和设备类型。