根据https://wiki.gentoo.org/wiki/Linux_firmware,
Linux 固件是随 Linux 内核一起发布的软件包,其中包含某些硬件设备的部分或全部功能所需的固件二进制文件。这些二进制文件通常是专有的,因为一些硬件制造商不会发布构建固件本身所需的源代码。
例如,我的蓝牙 pcie 设备需要linux-firmware/qca/htbtfw20.tlv
。这是内核驱动程序吗?为什么格式是.tlv
,为什么有些是.bin
?通常内核驱动程序是 ELF 可执行文件。
答案1
许多硬件供应商对其硬件的工作原理秘而不宣。这就是为什么他们将设备的一些功能隐藏在闭源 blob 中。他们将这些 blob 与驱动程序一起分发。
这些 blob 不由 OS 执行,而是被加载到硬件中。加载 blob 后,OS 可以使用某些驱动程序来管理设备。
对于蓝牙,大多数设备都使用通用 Linux 模块(例如btusb
,或者hci_qca
在您的情况下)。该模块会检测设备、加载固件,然后就可以像使用其他设备一样使用该设备。
文件的名称其实并不重要。它由供应商选择。
固件并不完全是驱动程序。它是由设备执行的一段代码,用于与驱动程序进行通信。
Linux 维护者从供应商处获取固件,或者他们的驱动程序,并将 blob 积累在Linux 固件 git。
发行版维护者(如 Сanonical)将此固件打包成包。对于 Ubuntu,它令人惊讶地linux-firmware
打包成包。它由内核 linux-frimware git 组成,并会不时更新。