Linux术语中的“固件”是什么?


15

我对在Linux环境中使用固件感到困惑。

我对固件和驱动程序的理解是,固件是在设备的裸机上运行的代码,例如蓝牙IC,键盘控制器,视频卡或单一用途的微控制器。固件公开了一个接口,供操作系统使用其服务。

相比之下,驱动程序是内核用来与固件提供的上述接口进行通信的软件。因此,视频驱动程序,键盘驱动程序,蓝牙无线电驱动程序。

那么,为什么我要继续阅读有关必须安装的Linux固件文件的信息(例如,此处)。这些是否上传到硬件中?这些文件被内核使用吗?在这种情况下,固件是什么意思?


1
一般来说:软件是一个程序。硬件是物理设备。固件是集成硬件中的程序。通常是为了配置硬件的工作方式(因此,它介于软件和硬件之间,就像“公司”介于“软”和“硬”之间一样,直言不讳)。通常,固件与操作系统无关(例如,SCSI RAID控制器上的RAID配置)。
DopeGhoti

只是为了补充DopeGhoti的评论,许多设备现在允许实时固件加载,从而使其比固定实现更灵活/更具发展性。
Julie Pelletier

1
@DopeGhoti它不仅配置硬件,而且还可以在硬件上运行。某些固件确实非常复杂,并且基本上运行微型操作系统。
斯蒂芬·基特

我同意,尽管我会断言“将软件集成到硬件中”意味着该硬件就是运行该软件的硬件。(:
DopeGhoti '17

Answers:


22

在Linux内核上下文中,固件是在系统的另一个处理器(例如,无线控制器,GPU,SCSI控制器)上运行的软件...该软件以前存储在与相关控制器相连的ROM(各种类型)中。但为了降低成本并简化升级,控制器现在倾向于依靠主机操作系统为其加载固件。

因此,内核不使用固件文件,而是由内核将固件文件加载到其他硬件上。这也使得在FLOSS系统中拥有不带源代码的软件变得模糊不清:这是因为它不是在主CPU上运行,而是在另一台设备上运行。


1
您对“模糊接受”的使用非常仁慈。
Rui F Ribeiro

2
并非所有人都可以使用RMS。
DopeGhoti

这不仅仅是在Linux内核上下文中,而是在多处理器系统上下文中对“固件”的相当一般的定义。
吉尔斯(Gilles)'所以

那么/ etc / lib / firmwares是否实际上包含固件,而不 包含内核在启动时加载的驱动程序?但是无线控制器和图形卡都有自己的ROM,制造商可以刻录固件。
defalt

3
@defalt是,/lib/firmware(单数,否/etc)包含其他设备使用的固件。许多设备(包括无线控制器和GPU)都需要主机系统提供的固件,即使它们可能具有自己的包含固件的ROM(或闪存)。
史蒂芬·凯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.