如何在Linux上安裝設(shè)備驅(qū)動(dòng)程序
學(xué)習(xí) Linux 設(shè)備驅(qū)動(dòng)如何工作,并知道如何使用它們。
對(duì)于一個(gè)熟悉 Windows 或者 MacOS 的人,想要切換到 Linux,它們都會(huì)面臨一個(gè)艱巨的問題就是怎么安裝和配置設(shè)備驅(qū)動(dòng)。這是可以理解的,因?yàn)?Windows 和 MacOS 都有一套機(jī)制把這個(gè)過程做得非常的友好。比如說,當(dāng)你插入一個(gè)新的硬件設(shè)備, Windows 能夠自動(dòng)檢測(cè)并會(huì)彈出一個(gè)窗口詢問你是否要繼續(xù)驅(qū)動(dòng)程序的安裝。你也可以從網(wǎng)絡(luò)上下載驅(qū)動(dòng)程序,僅僅需要雙擊解壓或者是通過設(shè)備管理器導(dǎo)入驅(qū)動(dòng)程序即可。
而這在 Linux 操作系統(tǒng)上并非這么簡(jiǎn)單。***個(gè)原因是, Linux 是一個(gè)開源的操作系統(tǒng),所以有 數(shù)百種 Linux 發(fā)行版的變體。也就是說不可能做一個(gè)指南來適應(yīng)所有的 Linux 發(fā)行版。因?yàn)槊糠N Linux 安裝驅(qū)動(dòng)程序的過程都有差異。
第二,大多數(shù)默認(rèn)的 Linux 驅(qū)動(dòng)程序也都是開源的,并被集成到了系統(tǒng)中,這使得安裝一些并未包含的驅(qū)動(dòng)程序變得非常復(fù)雜,即使已經(jīng)可以檢測(cè)大多數(shù)的硬件設(shè)備。第三,不同發(fā)行版的許可也有差異。例如,Fedora 禁止事項(xiàng) 禁止包含專有的、受法律保護(hù),或者是違反美國(guó)法律的驅(qū)動(dòng)程序。而 Ubuntu 則讓用戶避免使用受法律保護(hù)或閉源的硬件設(shè)備。
為了更好的學(xué)習(xí) Linux 驅(qū)動(dòng)程序是如何工作的,我建議閱讀 《Linux 設(shè)備驅(qū)動(dòng)程序》一書中的 設(shè)備驅(qū)動(dòng)程序簡(jiǎn)介。
兩種方式來尋找驅(qū)動(dòng)程序
1、 用戶界面
如果是一個(gè)剛從 Windows 或 MacOS 轉(zhuǎn)過來的 Linux 新手,那你會(huì)很高興知道 Linux 也提供了一個(gè)通過向?qū)降某绦騺聿榭打?qū)動(dòng)程序是否可用的方法。 Ubuntu 提供了一個(gè) 附加驅(qū)動(dòng)程序 選項(xiàng)。其它的 Linux 發(fā)行版也提供了幫助程序,像 GNOME 的包管理器,你可以使用它來檢查驅(qū)動(dòng)程序是否可用。
2、 命令行
如果你通過漂亮的用戶界面沒有找到驅(qū)動(dòng)程序,那又該怎么辦呢?或許你只能通過沒有任何圖形界面的 shell?甚至你可以使用控制臺(tái)來展現(xiàn)你的技能。你有兩個(gè)選擇:
-
通過一個(gè)倉(cāng)庫(kù)
這和 MacOS 中的 homebrew 命令行很像。通過使用
yum
、dnf
、apt-get
等等。你基本可以通過添加倉(cāng)庫(kù),并更新包緩存。 -
下載、編譯,然后自己構(gòu)建
這通常包括直接從網(wǎng)絡(luò),或通過
wget
命令下載源碼包,然后運(yùn)行配置和編譯、安裝。這超出了本文的范圍,但是你可以在網(wǎng)絡(luò)上找到很多在線指南,如果你選擇的是這條路的話。
檢查是否已經(jīng)安裝了這個(gè)驅(qū)動(dòng)程序
在進(jìn)一步學(xué)習(xí)安裝 Linux 驅(qū)動(dòng)程序之前,讓我們來學(xué)習(xí)幾條命令,用來檢測(cè)驅(qū)動(dòng)程序是否已經(jīng)在你的系統(tǒng)上可用。
lspci 命令顯示了系統(tǒng)上所有 PCI 總線和設(shè)備驅(qū)動(dòng)程序的詳細(xì)信息。
$ lscpci
或者使用 grep
:
$ lscpci | grep SOME_DRIVER_KEYWORD
例如,你可以使用 lspci | grep SAMSUNG
命令,如果你想知道是否安裝過三星的驅(qū)動(dòng)。
dmesg 命令顯示了所有內(nèi)核識(shí)別的驅(qū)動(dòng)程序。
$ dmesg
或配合 grep
使用:
$ dmesg | grep SOME_DRIVER_KEYWORD
任何識(shí)別到的驅(qū)動(dòng)程序都會(huì)顯示在結(jié)果中。
如果通過 dmesg
或者 lscpi
命令沒有識(shí)別到任何驅(qū)動(dòng)程序,嘗試下這兩個(gè)命令,看看驅(qū)動(dòng)程序至少是否加載到硬盤。
$ /sbin/lsmod
和
$ find /lib/modules
技巧:和 lspci
或 dmesg
一樣,通過在上面的命令后面加上 | grep
來過濾結(jié)果。
如果一個(gè)驅(qū)動(dòng)程序已經(jīng)被識(shí)別到了,但是通過 lscpi
或 dmesg
并沒有找到,這意味著驅(qū)動(dòng)程序已經(jīng)存在于硬盤上,但是并沒有加載到內(nèi)核中,這種情況,你可以通過 modprobe
命令來加載這個(gè)模塊。
$ sudo modprobe MODULE_NAME
使用 sudo
來運(yùn)行這個(gè)命令,因?yàn)檫@個(gè)模塊要使用 root 權(quán)限來安裝。
添加倉(cāng)庫(kù)并安裝
可以通過 yum
、dnf
和 apt-get
幾種不同的方式來添加一個(gè)倉(cāng)庫(kù);一個(gè)個(gè)介紹完它們并不在本文的范圍。簡(jiǎn)單一點(diǎn)來說,這個(gè)示例將會(huì)使用 apt-get
,但是這個(gè)命令和其它的幾個(gè)都是很類似的。
1、刪除存在的倉(cāng)庫(kù),如果它存在
$ sudo apt-get purge NAME_OF_DRIVER*
其中 NAME_OF_DRIVER
是你的驅(qū)動(dòng)程序的可能的名稱。你還可以將模式匹配加到正則表達(dá)式中來進(jìn)一步過濾。
2、將倉(cāng)庫(kù)加入到倉(cāng)庫(kù)表中,這應(yīng)該在驅(qū)動(dòng)程序指南中有指定
$ sudo add-apt-repository REPOLIST_OF_DRIVER
其中 REPOLIST_OF_DRIVER
應(yīng)該從驅(qū)動(dòng)文檔中有指定(例如:epel-list
)。
3、更新倉(cāng)庫(kù)列表
$ sudo apt-get update
4、安裝驅(qū)動(dòng)程序
$ sudo apt-get install NAME_OF_DRIVER
5、檢查安裝狀態(tài)
像上面說的一樣,通過 lscpi
命令來檢查驅(qū)動(dòng)程序是否已經(jīng)安裝成功。