8

据我了解,固件是控制硬件的东西,驱动程序与固件交互以控制硬件。那是对的吗?

在 Linux 中,与固件交互的 API 或函数有哪些?固件代码是否独立于任何操作系统(例如 Linux 或 Windows)?

4

2 回答 2

8

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

  1. 从技术上讲,“固件是上传到硬件设备本身上的微处理器或可编程逻辑的软件。使用固件的硬件示例是 HP 打印机,它在通电时从 USB 端口接收代码,无线网络接口在启动时上传固件up, 可以从 Internet 进行自我更新的路由器等...一般来说,将固件上传到设备的能力是一个优势。它允许在首次销售后添加产品改进。这些包括修复产品中的错误,应对安全问题,或应对监管环境的变化;例如:FCC 开放或限制允许的带宽、功耗、安全性。”
  2. 一般而言:驱动程序是与硬件对话的内核模块;固件是在与驱动程序对话的硬件上运行的软件。
于 2013-04-22T13:02:50.037 回答
1

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

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

于 2013-04-22T12:20:45.293 回答