为什么有些驱动程序仍然需要固件?

str*_*gee 6 drivers firmware

Linux 内核树中有大量逆向工程驱动程序。然而,一些驱动程序,尤其是无线驱动程序,需要固件二进制 blob 才能正常运行。

是什么阻止有人对这些进行逆向工程,并使驱动程序 100% 自由?还是对于不同的司机来说是不同的?

Gil*_*il' 6

固件是在设备本身的处理器上运行的软件,而不是在主 CPU 上运行的软件。由于各种原因,固件比驱动程序更可能是闭源的。

固件只需制作一次,而不同的操作系统需要不同的驱动程序。因此,硬件制造商有动力允许第三方为他们喜欢的操作系统编写自己的驱动程序,而固件则没有这种动力。

固件更接近硬件,硬件公司往往希望对硬件的工作原理保密。因此,他们也不喜欢透露固件是如何制作的。

固件比驱动程序代码更难逆向工程。与在主 CPU 上运行的驱动程序不同,外围设备通常无法轻松调试。此外,固件运行在一个通常没有很好记录的环境中(尽管 CPU 类型很少,哪些 I/O 设备映射到哪些地址是非常可变的)。

对于 wifi 驱动程序,还有一个额外的问题。大多数地区的法律禁止使用某些无线电频率,并要求保护消费者设备免受这些禁止频率的广播。通常硬件非常灵活,唯一的保护是在固件中。如果制造商太容易修改固件以在禁止的频率上广播,他们可能会违反这些规定。