Linux 内核树中有大量逆向工程驱动程序。然而,某些驱动程序(尤其是无线驱动程序)需要固件二进制 blob 才能正常运行。
是什么阻止有人对这些进行逆向工程,并使驱动程序 100% 免费?还是说不同的司机有不同的规定?
答案1
固件是在设备本身的处理器上运行的软件,而不是在主 CPU 上运行。由于多种原因,固件比驱动程序更有可能是闭源的。
固件只需制作一次,而不同的操作系统需要不同的驱动程序。因此,硬件制造商有动力允许第三方为他们喜欢的操作系统编写自己的驱动程序,而固件则没有这样的动力。
固件更接近硬件,硬件公司通常希望对硬件的工作原理保密。因此他们也不喜欢透露固件是如何制作的。
固件比驱动程序代码更难进行逆向工程。与主 CPU 上运行的驱动程序不同,外围设备通常无法轻松调试。此外,固件运行在一个经常缺乏记录的环境中(虽然 CPU 类型很少,但哪些 I/O 设备映射到哪些地址却变化很大)。
对于 wifi 驱动程序,还有一个额外的问题。大多数地区的法律禁止使用某些无线电频率,并要求保护消费者设备免受这些禁止频率的广播。通常硬件非常灵活,唯一的保护是固件。如果制造商太容易修改固件以在禁止的频率上广播,他们可能会违反这些规定。