Operating system 关于设备驱动程序的问题&;内核

Operating system 关于设备驱动程序的问题&;内核,operating-system,device-driver,Operating System,Device Driver,目前,我的操作系统从软盘启动。由于软盘驱动程序已过时,我计划更改引导介质 当我试图弄清楚使用什么引导媒体时,我意识到无论我选择什么,我都需要为它编写设备驱动程序。虽然真实模式BIOS可能会为我提供一些中断来与该设备进行交互,但一旦进入保护模式,我就只能靠自己了。因此,我开始阅读,了解一些指南。但这本书是关于为Linux系统编写设备驱动程序的。所以,这意味着设备驱动程序是特定于操作系统的 现在我有以下问题: 设备驱动程序在哪些方面依赖于操作系统 操作系统和设备驱动程序在内存中的布局如何 操作系统

目前,我的操作系统从软盘启动。由于软盘驱动程序已过时,我计划更改引导介质

当我试图弄清楚使用什么引导媒体时,我意识到无论我选择什么,我都需要为它编写设备驱动程序。虽然真实模式BIOS可能会为我提供一些中断来与该设备进行交互,但一旦进入保护模式,我就只能靠自己了。因此,我开始阅读,了解一些指南。但这本书是关于为Linux系统编写设备驱动程序的。所以,这意味着设备驱动程序是特定于操作系统的

现在我有以下问题:

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

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

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

内存中的布局完全依赖于系统。与其他内核服务相比,驱动程序不必有任何特定的内存布局策略。设备本身可能会施加内存布局限制,但这是另一个主题

操作系统定义了如何通过API与设备驱动程序交互。在那本(很棒的)书中,你已经有了Linux是如何做到这一点的文档。其他操作系统可能会有不同的做法——由操作系统设计者制定规则。如果您是创建内核的人,那么您需要定义API


热插拔并不容易。进行映射的一种方法是使用某种形式的查找表,其中来自设备的信息作为“键”,合适的设备驱动程序结构/指针/任意值作为值,或者另一种方法(在驱动程序中使用API,让您知道设备ID可以处理什么)。设备ID可以是PCI设备ID、USB标识符等。。。取决于总线和设备类型。

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

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

内存中的布局完全依赖于系统。与其他内核服务相比,驱动程序不必有任何特定的内存布局策略。设备本身可能会施加内存布局限制,但这是另一个主题

操作系统定义了如何通过API与设备驱动程序交互。在那本(很棒的)书中,你已经有了Linux是如何做到这一点的文档。其他操作系统可能会有不同的做法——由操作系统设计者制定规则。如果您是创建内核的人,那么您需要定义API


热插拔并不容易。进行映射的一种方法是使用某种形式的查找表,其中来自设备的信息作为“键”,合适的设备驱动程序结构/指针/任意值作为值,或者另一种方法(在驱动程序中使用API,让您知道设备ID可以处理什么)。设备ID可以是PCI设备ID、USB标识符等。。。取决于总线和设备类型。

我本来准备回答,但在阅读了你的答案后,我决定收回我的答案。我认为这是完整的。我正在准备一个答案,但是读了你的之后,我决定撤回我的。我认为它是完整的。