【问题标题】:A question about Device drivers & Kernel关于设备驱动程序和内核的问题
【发布时间】:2011-08-16 11:49:24
【问题描述】:

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

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

现在我有以下问题:

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

【问题讨论】:

    标签: operating-system device-driver


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我正在准备一个答案,但在阅读了你的答案后,我决定撤回我的答案。我认为它完成了。
    猜你喜欢
    • 2012-05-21
    • 2013-09-13
    • 2017-03-02
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多