![如果两个不同的 Linux 发行版使用相同的内核,它们是否会支持相同的设备驱动程序?](https://linux22.com/image/174873/%E5%A6%82%E6%9E%9C%E4%B8%A4%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%20Linux%20%E5%8F%91%E8%A1%8C%E7%89%88%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E5%86%85%E6%A0%B8%EF%BC%8C%E5%AE%83%E4%BB%AC%E6%98%AF%E5%90%A6%E4%BC%9A%E6%94%AF%E6%8C%81%E7%9B%B8%E5%90%8C%E7%9A%84%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我偶然发现了这个英特尔网页,据说它提供了专有的 WiFi 驱动程序。我目前使用的是 Ubuntu 20.04。
不保留特定于这些设备驱动程序的问题(希望它仍然可以回答问题)我的问题是 -
如果设备驱动程序基于相同的内核(例如 5.2),是否可以在任何 Linux 发行版(例如 Ubuntu 和 CentOS)上安装?
当然,我假设内核版本满足页面上给出的版本要求。
我不确定答案的原因是我知道许多软件都是为特定的 Linux 发行版开发的,甚至单独发布,可以通过它们的包管理器安装。系统的设备驱动程序不也是类似的吗?
PS:链接为页。
答案1
那些不是司机。
他们是固件WiFi芯片本身的封装。 WiFi 芯片通常没有用于固件的持久闪存,因此驱动程序(在本例中,基本上是所有现代 Intel WiFi 芯片的开源驱动程序iwlwifi
)需要正确的芯片型号特定固件文件才能加载到芯片作为初始化芯片以供使用的一部分。
通常,内核根本不需要理解固件文件的内容;它只需要以适当的方式将文件的内容填充到相关硬件中即可。
这些固件文件可以安装在任何 Linux 发行版上:它们通常保存在/lib/firmware/
.但实际的驱动程序需要是足够新的版本才能知道如何与芯片实际通信以利用它们:网页记录了内核版本,此时对特定 WiFi 芯片的支持已添加到驱动程序中“主线”Linux 内核。
因此,任何内核版本等于或高于特定 WiFi 芯片指定级别的 Linux 发行版基本上都可以保证支持该芯片。
但是,有时某些发行版(尤其是“企业”或长期支持发行版)使用较旧的内核,但向后移植新版本的驱动程序插入其中。在这种情况下,您可能会发现该发行版支持某些硬件,即使根据此列表其内核版本似乎不够新。
有时,如果相关硬件足够流行/重要,其他人会为旧内核生成更新驱动程序的 PPA,或者以其他方式生成或多或少易于安装的附加或升级驱动程序。
第三方驱动程序与内核版本的兼容性可能会更复杂:驱动程序可以是太老对于特定的内核版本(例如,它尝试做一些需要与较新的内核略有不同的事情),或者太新了(例如,它依赖于在特定内核版本中实现的内核功能,并且无法与比该版本更旧的内核一起使用)。
例如,尝试使用已编译的驱动程序模块前使用编译的内核实现主要 Spectre/Meltdown 解决方法后它,或相反亦然,很容易导致系统挂起或崩溃。
以源代码格式提供且必须针对特定内核版本进行编译的驱动程序可能比以预编译形式提供的驱动程序更灵活,但两者都可能在两个方向上都有版本兼容性限制。