设备驱动程序是否集成在内核中?

设备驱动程序是否集成在内核中?

我知道内核使用设备驱动程序与硬件交互。但笔记本电脑等都配有各种硬件配置。然而,在安装 Linux 后,内核却能正常工作。我自己没有安装任何设备驱动程序,但操作系统在与计算机上的硬件交互时没有任何问题。这表明所使用的设备驱动程序是内核内置的。

由于计算机具有各种配置,内核如何为所有计算机提供设备驱动程序。

有些是集成的,有些则需要事后安装?
有些硬件无论构造如何,工作方式都完全相同?[我假设所有键盘的工作方式可能都完全相同。]
哪些是内置的,哪些不是?
如果内核可以在我安装任何设备驱动程序的情况下与我的 GPU 配合使用,因为我显然可以在显示屏上看到东西,那么 nVidia 驱动程序有什么用?它增加了什么吗?

答案1

大多数硬件驱动程序都内置于 Linux 内核中。内置总是更好的。但在某些情况下,您可以或必须单独安装它们:

1. 硬件供应商不公开与硬件交互的协议,发布闭源的专有驱动程序。这种情况下,只能单独安装它们。

但通常也有通过逆向工程创建的替代开源驱动程序。这些驱动程序集成到内核中,但性能可能不如专有驱动程序。

例子:AMD 和 Nvidia 视频驱动程序、Epson 打印机和扫描仪驱动程序等。

2. 开源驱动程序存在,但尚未集成到主线内核。或者集成到不稳定版本,或者集成到不受 Ubuntu 内核支持的版本。

在这种情况下,驱动程序可以从 PPA 获得,也可以从 github 或其他地方获取源代码。

例子:Focaltech 触摸板驱动程序、Realtek 蓝牙驱动程序等。

3. 有时主线内核中存在开源驱动程序,但性能不如硬件供应商或社区开发的一些替代开源驱动程序。

在这种情况下,可以选择安装替代驱动程序。

例子:Realtek 无线驱动程序。


如果您的某些硬件不受支持,最好将其报告给 launchpad。有人会处理它并添加对 linux 内核的支持。此外,与测试人员的合作也很有帮助。


我想补充一条关于安装独立驱动程序的重要说明。

大多数情况下,硬件驱动程序是作为内核模块构建和安装的。

如果您从源代码构建内核模块,则内核升级后该模块将无法工作。它是为特定内核版本构建的。每次内核升级后,您都必须重新安装它。

这就是为什么总是首选从 PPA 安装驱动程序知识管理系统软件包,或者使用以下方式安装知识管理系统手动。

在这种情况下,每次内核升级后,模块将自动重新构建并安装到新内核。

不好的例子是从 Nvidia 网站下载的 .run 文件安装 Nvidia 驱动程序。在这种情况下,驱动程序未在 DKMS 中正确注册,第一次内核升级后,您将看到黑屏。

但是您始终可以从 PPA 中获取打包为 DKMS 的所有 Nvidia 驱动程序。

相关内容