Linux
如何列出核心支持的所有硬體
我想查看正在使用的核心支持的所有硬體。例如,如果我有 3.8.xx 版本的 Linux 核心,我怎麼知道那裡支持哪些硬體。
lspci
、和之類的工具僅檢查目前使用的硬體,並嘗試使用載入的模組來查找它lshw
也不是很方便。lscpu``dmidecode``lsmod
我想要的是檢查核心實際支持的所有硬體,而不考慮我是否使用該硬體。
暫時我想到了類似的東西:
- 讀取
/lib/modules/3.8.0-5-generic/kernel/drivers
並解析每個文件。- 下載核心的 git 源並對其進行 grepping 以獲取有關此資訊的資訊。
- 任何其他瘋狂且很長的方法。
有沒有其他更小的方法來實現這一點。
我想要的是檢查核心實際支持的所有硬體,而不考慮我是否使用該硬體。
如果您有
.config
建構核心的文件,您可以下載原始碼並執行make menuconfig
,這將讓您了解 A)可以為哪些硬體配置核心(但請參閱注意),以及 B)您的硬體是什麼核心實際上是為。所以要做到這一點:
- 下載原始碼。你的發行版可能有一個包,或者你可以從kernel.org獲取它們;找到你的版本
uname -r
。- 找到
.config
用於您的核心的。如果您通過您的發行版獲得了原始碼,那麼它有望被包含在內;你也可以在 /boot 的某個地方找到它。更好的是:現在發行版核心通常是使用該/proc/config.gz
功能建構的。如果存在,請將其複制出來,解壓縮,重命名文件.config
並將其複製到核心原始碼樹的頂層。make menuconfig
從原始碼樹的頂層內部執行。您將需要安裝(或)ncurses開發包,並且您需要是 root。ncurses-dev``ncurses-devel
除了更改文件的內容之外,您在使用 menuconfig 時不會做任何壞事
.config
,這無關緊要(以後不要混淆)。注意:您實際上無法同時查看所有可能的硬體配置,因為根據在其他地方選擇的內容,不同的選項可能會出現在一個地方。核心配置有點像迷宮。但是,您肯定會看到實際選擇的所有內容(
M
意味著它是一個模組,*
意味著它是內置的)。
您可以呼叫
modinfo
所有可用的模組。這將列印模組的別名。該模組的一個別名e1000e
是這個(還有更多):pci:v00008086d00001559sv*sd*bc*sc*i*
這意味著應該為供應商 ID 為8086和設備 ID為1559的 PCI 設備載入它。USB 設備的模式看起來很相似。