对于从熟悉的 Windows 或 MacOS 系统切换到 Linux 的人来说,最令人畏惧的挑战之一是安装和配置驱动程序。这是可以理解的,因为 Windows 和 MacOS 具有使此过程用户友好的机制。例如,当您插入新的硬件时,Windows 会自动检测到它,并弹出一个窗口,询问您是否要继续安装驱动程序。您也可以从互联网上下载驱动程序,然后只需双击它来运行向导或通过设备管理器导入驱动程序。
这个过程在 Linux 操作系统上没有那么容易。原因之一是,Linux 是一个开源操作系统,因此有数百种 Linux 发行版变体。这意味着不可能创建一个适用于所有 Linux 发行版的通用操作指南。每个 Linux 操作系统处理驱动程序安装过程的方式都不同。
其次,大多数默认 Linux 驱动程序都是开源的并集成到系统中,这使得安装任何未包含的驱动程序都相当复杂,即使大多数硬件设备都可以自动检测到。第三,不同 Linux 发行版之间的许可策略各不相同。例如,Fedora 禁止包含专有的、在法律上受限制的或违反美国法律的驱动程序。而 Ubuntu 要求用户避免使用专有或封闭硬件。
要了解更多关于 Linux 驱动程序工作原理的信息,我建议阅读 Linux 设备驱动程序 一书中的 设备驱动程序简介。
查找驱动程序的两种方法
1. 用户界面
如果您是 Linux 新手,并且来自 Windows 或 MacOS 世界,您会很高兴知道 Linux 提供了通过类似向导的程序来查看驱动程序是否可用的方法。Ubuntu 提供了附加驱动程序选项。其他 Linux 发行版提供了帮助程序,例如 GNOME 的软件包管理器,您可以检查可用的驱动程序。
2. 命令行
如果您无法通过友好的用户界面应用程序找到驱动程序怎么办?或者您只能通过没有图形界面的 shell 访问?也许您甚至决定通过使用控制台来扩展您的技能。您有两个选择
- 使用存储库
这类似于 MacOS 中的 homebrew 命令。 通过使用 yum、dnf、apt-get 等,您基本上是在添加存储库并更新软件包缓存。
- 下载、编译并自行构建
这通常涉及直接从网站下载软件包或使用 wget 命令,并运行配置文件和 Makefile 来安装它。这超出了本文的范围,但如果您选择这条路线,您应该能够找到在线指南。
检查驱动程序是否已安装
在进一步深入研究在 Linux 中安装驱动程序之前,让我们看一些命令,这些命令将确定驱动程序是否已在您的系统上可用。
lspci 命令显示有关系统上所有 PCI 总线和设备的详细信息
$ lscpci
或使用 grep
$ lscpci | grep SOME_DRIVER_KEYWORD
例如,如果您想知道是否安装了三星驱动程序,您可以键入 lspci | grep SAMSUNG。
dmesg 命令显示内核识别的所有设备驱动程序
$ dmesg
或使用 grep
$ dmesg | grep SOME_DRIVER_KEYWORD
任何被识别的驱动程序都会显示在结果中。
如果 dmesg 或 lscpi 命令未识别任何内容,请尝试以下两个命令,以查看驱动程序是否至少已加载到磁盘上
$ /sbin/lsmod
和
$ find /lib/modules
提示:与 lspci 或 dmesg 一样,在任一命令后附加 | grep 以过滤结果。
如果驱动程序被这些命令识别,但未被 lscpi 或 dmesg 识别,则意味着驱动程序在磁盘上但不在内核中。在这种情况下,请使用 modprobe 命令加载模块
$ sudo modprobe MODULE_NAME
以 sudo 身份运行此命令,因为此模块必须以 root 用户身份安装。
添加存储库并安装
有不同的方法通过 yum、dnf 和 apt-get 添加存储库;描述所有这些方法超出了本文的范围。为了简单起见,此示例将使用 apt-get,但对于其他选项,思路是相似的。
1. 删除现有的存储库(如果存在)。
$ sudo apt-get purge NAME_OF_DRIVER*
其中 NAME_OF_DRIVER 是驱动程序的可能名称。您还可以将模式匹配添加到正则表达式以进一步过滤。
2. 将存储库添加到 repolist,这应该在驱动程序指南中指定。
$ sudo add-apt-repository REPOLIST_OF_DRIVER
其中 REPOLIST_OF_DRIVER 应从驱动程序文档中指定(例如,epel-list)。
3. 更新存储库列表。
$ sudo apt-get update
4. 安装软件包。
$ sudo apt-get install NAME_OF_DRIVER
5. 检查安装。
运行 lscpi 命令(如上所述)以检查驱动程序是否已成功安装。
1 条评论