【问题标题】:Why do we need device drivers when we already have firmwares in hardwares?当我们已经在硬件中拥有固件时,为什么还需要设备驱动程序?
【发布时间】:2015-12-24 08:21:07
【问题描述】:

例如,对于连接到 linux 机器的 SD 卡,我们有一个在 SD 卡中运行的固件,我们有一个也运行固件的主机控制器(我的理解),那么为什么我们需要一个完整的 SD 设备驱动程序什么时候我们可以简单地向 SD 主机控制器发送命令来执行操作?

【问题讨论】:

  • 您如何与 SD 控制器通信?是的,您可以自己为每个程序发送这些命令,就像在“美好的旧”DOS 时代一样。或者,您可以创建一个抽象接口,以便所有类似磁盘的设备以相似且一致的方式运行,并具有在程序之间相同的通用接口,并由操作系统而不是你。
  • 不使用fopen("/dev/sdc", "r");,而是要编写特定于设备的C/汇编代码以便能够从设备中读取?
  • 向 SD 主机控制器发送命令的代码叫什么?不叫司机吗?

标签: c linux linux-device-driver


【解决方案1】:

回答

固件是在设备上运行的软件。 设备驱动程序也称为软件驱动程序,是告诉您的操作系统如何与设备通信的软件。并非所有设备都有固件。包含固件的设备的典型示例是嵌入式系统,例如交通信号灯、消费类电器、数码手表、计算机、计算机外围设备、手机和数码相机。这些设备中包含的固件为这些设备提供控制程序设备。

【讨论】:

    【解决方案2】:

    应用程序(雇主)、设备(雇员)和设备驱动程序(翻译器)的类比。希望这可以澄清!

    想象一家公司,其中雇主说英语,而员工说自己的语言,英语单词有限。现在,如果雇主想要清楚地指示工作和任务,他可能除了了解点点滴滴之外就无法做到。一种节省时间的方法是聘请翻译。

    此外,固件仅在具有处理器的设备上才有意义。例如:RFID 卡没有固件,但 RFID 阅读器有。

    【讨论】:

    • 您会惊讶于高端 RFID 卡中运行了多少固件。
    • 他们有内核吗?我怀疑
    【解决方案3】:

    ...那么为什么我们需要一个成熟的 SD 设备驱动程序? 只需向 SD 主机控制器发送命令即可执行操作?

    对于不同类型的 sdcard,一些实现会有所不同。 您不能为每个制造商/供应商的 sdcard 发送不同的命令集。

    不同的操作系统会向用户导出不同的 API 集。所以应该有某种子系统和设备特定的抽象层。由此类设备驱动程序处理。

    【讨论】:

      【解决方案4】:

      据我所知,我们使用设备驱动程序是出于历史原因。

      早期,设备没有固件。要使用该设备,对设备的命令必须是原始的。也就是说,在非常低的抽象级别上,如果有任何抽象被使用的话。

      但操作系统和计算机设备之间的接口仍然是抽象的,尽管它的抽象级别低于应用程序接口 (API)。因此,需要使用 sn-ps 代码来将来自操作系统的低级但仍是抽象的命令转换为更原始的、特定于设备的级别。

      在早期的计算机中,将命令转换到设备所需的那些 sn-ps 代码必须在主机的处理器上运行。那是唯一可用的平台。设备驱动程序就是这些 sn-ps 代码。驱动程序必须为每个设备编写,并安装在主机上。

      现在,任何设备都可以轻松构建,使其具备处理这些低级但仍是抽象命令的板载功能,使用固件或其他方法。因此不再需要设备驱动程序。事实上,无论如何,现在许多鼠标和键盘的驱动程序都是通用的。但是考虑到所有硬件都在使用中,取消设备驱动程序会很困难。所以我确信他们会留在这里。

      我不确定现在摆脱设备驱动程序是否会带来很多好处。设备驱动程序很烦人,我浪费了很多时间来寻找、安装和扯掉驱动程序。另外,当找不到驱动程序以使其在新操作系统上运行时,必须丢弃完美的硬件。

      但任何替代解决方案都会有其自身的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 2016-11-01
        • 2012-10-31
        • 2022-01-16
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多