Linux中的固件和驱动程序

Linux中的固件和驱动程序,linux,linux-kernel,linux-device-driver,firmware,Linux,Linux Kernel,Linux Device Driver,Firmware,根据我的理解,固件控制硬件,驱动程序与固件交互以控制硬件。对吗 在Linux中,与固件交互的API或函数是什么?固件代码是否独立于任何操作系统(如Linux或Windows)?这取决于设备和PC之间的连接方式。对于PCI板,有一套Linux内核模式API。另一套内核模式API用于与通过USB端口连接的设备通信。对于以太网和WiFi连接,您可以使用sockets API,通信完全在用户模式下完成。通过串行端口连接的设备也使用用户模式API进行处理——它们在Linux操作系统中被视为文件 通常,设备

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


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

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


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

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

  • 更严格地说“固件是上载到硬件设备本身的微处理器或可编程逻辑的软件。使用固件的硬件示例包括:在通电时从USB端口接收代码的HP打印机、在启动时上载固件的无线网络接口、可以从internet自我更新的路由器等。。。一般来说,能够将固件上传到设备是一个优势。它允许在首次销售后添加产品改进。这些包括修复产品中的漏洞、响应安全问题或响应监管环境的变化;例如:FCC开放或限制允许的带宽、功耗、安全性。”
  • 一般来说:驱动程序是与硬件对话的内核模块;固件是在与驱动程序对话的硬件上运行的软件

  • 谢谢你的回复。但我还是不明白固件和驱动程序之间的相互作用。驱动程序可以在没有固件的情况下工作吗?你的问题不清楚。“驱动程序可以在没有固件的情况下工作吗?”?“。驱动程序完全可以在没有硬件的情况下工作-例如,文件系统驱动程序。您需要将问题缩小到某个特定的设备类别。请阅读以下内容:第9章:与硬件通信第10章:中断处理并非所有设备都包含固件-有些可能只是挂在总线上的几个逻辑门。@ChrisStratton-同意,我只是尝试回答有关驱动程序固件通信的问题。“…固件是在与驱动程序对话的硬件上运行的软件。“你能告诉我它是怎么跟司机说话的吗?谢谢。@foo_l有许多不同的方式,尽管同一品牌/系列的设备之间有时会有相似之处,甚至有时不同制造商的设备类别之间也会有相似之处。仍然有太多的可能性需要列举。
    固件
    不仅仅是与驱动程序对话。设备通常有一个CPU,
    固件
    是在独立且完全独立的CPU上运行的软件。一项工作是通过SPI、I2C、USB、PCI等进行通信,如前所述的一些总线。
    固件
    可能是FPGA门列表或配置信息,而不是真正的软件。如第一点所述,“.固件是上传到微处理器或硬件设备上的可编程逻辑的软件。”它基于逻辑;固件提供内核级API,通过这些API可以设计设备驱动程序。