新的硬件支持是如何添加到 linux 内核的?

NES*_*NES 19 linux drivers kernel

想象一下,有一家公司 A 发布了一个新的图形适配器。谁来管理导致 Linux 内核将来支持这个新图形适配器的过程?这是如何进行的?我很好奇如何处理对任何新硬件的内核支持;Windows 上的公司自己开发驱动程序,但 Linux 如何获得特定的硬件支持?

War*_*ung 26

驱动程序支持的工作方式与所有开源相同:有人决定自己解决问题。

有时驱动程序由提供硬件的公司提供,就像在 Windows 上一样。Intel 为他们的网络芯片做这件事,3ware 为他们的 RAID 控制器做这件事,等等。这些公司已经决定提供驱动程序符合他们的最大利益:他们的“痒”是向 Linux 用户销售产品,这意味着确保有司机。

在最好的情况下,该公司努力将他们的驱动程序放入 Linux 发行版附带的适当源代码库中。对于大多数驱动程序,这意味着 Linux 内核。对于图形驱动程序,它意味着X.org。还有用于打印机驱动程序的CUPS、用于 UPS 驱动程序的NUT、用于扫描仪驱动程序的SANE等。这样做的明显好处是在驱动程序被接受后制作的 Linux 发行版将支持开箱即用的硬件。最大的缺点是公司需要更多的工作来协调开源项目以让他们的驱动程序进入,出于相同的基本原因,两个独立的团队很难协调任何事情。

还有一些公司选择仅直接提供其驱动程序源代码。您通常必须从他们的网站下载驱动程序源代码,在您的系统上构建它,然后手动安装。这些公司通常是较小的或专业的制造商,没有足够的员工,他们可以不遗余力地与适当的开源项目进行协调,以将他们的驱动程序纳入该项目的源代码库。

很少有公司提供纯二进制驱动程序而不是源代码。一个例子是来自 NVIDIA 等公司的更高级的 3D 驱动程序。通常,这样做的原因是公司不想泄露他们认为专有的信息。此类驱动程序通常无法与之前案例中那么多的 Linux 发行版一起使用,因为提供硬件的公司不会费心重建其驱动程序来跟踪 API 和 ABI 更改。最终用户或 Linux 发行版提供商可以调整作为源代码提供的驱动程序以跟踪此类更改,因此在前两种情况下,通常可以使驱动程序比二进制驱动程序适用于更多系统。

当公司不提供 Linux 驱动程序时,社区中的某个人只是决定这样做。有一些大类的硬件在这种情况下很常见,例如 UPS 和打印机。需要一个罕见的用户 a) 拥有硬件;b) 有时间;c) 有技能;d) 愿意花时间开发驱动程序。对于流行的硬件,这通常不是问题,因为对于数百万 Linux 用户来说,确实存在这样的少数人。您会遇到不常见的硬件问题。