Linux中的固件和驱动程序

时间:2013-04-22 10:52:14

标签: linux linux-kernel linux-device-driver firmware

根据我的理解,固件控制硬件,驱动程序与固件交互以控制硬件。这是对的吗?

在Linux中,与固件交互的API或功能是什么?固件代码是否独立于任何操作系统(例如Linux或Windows)?

2 个答案:

答案 0 :(得分:8)

固件是在设备上运行的软件。驱动程序是告诉操作系统如何与设备通信的软件。具有固件的所有设备通常被编程到设备中(具有ROM芯片或可编程ROM芯片),但是存在一些设备,其中固件在初始化时被加载到设备中。                                                                                                                      每台设备都没有frimware.

  1. 技术上更“固件是上传到硬件设备本身的微处理器或可编程逻辑的软件。使用固件的硬件示例是HP打印机,它在加电时从USB端口接收代码,上载无线网络接口启动时的固件,可以从互联网上更新自己的路由器......一般来说,将固件上传到设备的能力是有利的。它允许在初始销售后添加产品改进。这包括修复错误在产品中,响应安全问题或响应监管环境的变化;示例:FCC开放或限制允许的带宽,功耗,安全。“
  2. 概述:驱动程序是与硬件通信的内核模块;固件是在与驱动程序通信的硬件上运行的软件。

答案 1 :(得分:1)

这取决于设备和PC之间的连接方式。对于PCI主板,有一套Linux内核模式API。另一组内核模式API用于与通过USB端口连接的设备进行通信。对于以太网和WiFi连接,您可以使用套接字API,完全在用户模式下完成通信。通过串行端口连接的设备也使用用户模式API处理 - 它们在Linux操作系统中被视为文件。

通常,设备固件不依赖于主机系统OS。但是,它取决于在设备上运行的操作系统(如果有)。固件代码可以在没有任何操作系统的情况下以普通C编写,也可以在实时操作系统下运行。现代设备可能包含全功能的操作系统,如嵌入式Linux或Windows。在这种情况下,具有特定于该设备的程序的整个OS被认为是设备固件。例如,针对特定移动设备的Android OS。