2011-05-01 60 views
0

目前,我的操作系统从软盘启动。由于软驱已经过时,我计划更改启动媒体。有关设备驱动程序和内核的问题

当我试图找出使用什么引导介质时,我意识到无论我选择什么,我都需要为它编写设备驱动程序。虽然实模式BIOS可能会给我提供一些中断来与该设备进行交互,但一旦进入保护模式,我就会自己进行操作。所以我开始阅读< Linux设备驱动程序第3版>的一些指南。但是这本书是关于为Linux系统编写设备驱动程序。所以,这意味着设备驱动程序是特定于操作系统的。

现在我有以下问题:

  • 在哪些方面做了设备驱动程序取决于操作系统上?
  • 操作系统和设备驱动程序如何在内存中进行布局?
  • 操作系统和设备驱动程序如何相互交互?
  • 如果我热插拔一个设备,操作系统如何知道在哪里可以找到正确的设备驱动程序?

回答

3

设备驱动程序是实现设备和(通常)操作系统内核之间接口的一段代码。在这方面,它必须依赖于它的目标操作系统 - 这是核心目的,使操作系统意识到设备并允许它使用它的功能。

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

内存中的布局完全取决于系统。与其他内核服务相比,不必为驱动程序提供任何特定的内存布局策略。该设备本身可能会强加内存布局约束,但这是一个不同的主题。

操作系统定义了它如何通过API与设备驱动程序进行交互。你已经得到了关于Linux如何在这本书中做到这一点的文档。其他操作系统可以做不同的事情 - 操作系统设计者设定规则。如果你是创建内核的人,你可以定义这些API。

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

+0

我正在准备答案,但在读完你的答案之后,我决定撤回我的答案。我认为它是完整的。 – bacchus 2011-05-01 15:35:32

相关问题