23 管理核心模組 #
雖然 Linux 屬於單核心,但可透過核心模組加以延伸。這些特殊物件可以插入到核心中,並可視需要移除。就實際角度而言,核心模組使新增和移除核心自身未包含的驅動程式和介面成為現實。Linux 提供了數個用於管理核心模組的指令。
23.1 使用 lsmod 和 modinfo 列出載入的模組 #
使用 lsmod
指令可檢視目前載入了哪些核心模組。該指令的輸出可能如下所示:
tux >
lsmod
Module Size Used by
snd_usb_audio 188416 2
snd_usbmidi_lib 36864 1 snd_usb_audio
hid_plantronics 16384 0
snd_rawmidi 36864 1 snd_usbmidi_lib
snd_seq_device 16384 1 snd_rawmidi
fuse 106496 3
nfsv3 45056 1
nfs_acl 16384 1 nfsv3
輸出內容分為三欄:Module
欄列出所載入模組的名稱,Size
欄顯示各模組的大小。Used by
欄顯示參考模組的程序數及其名稱。請注意,此清單可能不完整。
若要檢視有關特定核心模組的詳細資訊,請使用 modinfo MODULE_NAME
指令。其中 MODULE_NAME 為所需核心模組的名稱。請注意,modinfo
二進位檔案位於使用者的 PATH 環境變數中未包含的 /sbin
目錄下。這意味著,當您以普通使用者身分執行 modinfo
指令時,必須指定該二進位檔案的完整路徑:
tux >
/sbin/modinfo kvm
filename: /lib/modules/5.3.18-57-default/kernel/arch/x86/kvm/kvm.ko.xz
license: GPL
author: Qumranet
suserelease: SLE15-SP3
srcversion: 3D8FBA9060D4537359A06FC
depends: irqbypass
supported: yes
retpoline: Y
intree: Y
name: kvm
vermagic: 5.3.18-57-default SMP mod_unload modversions
23.2 新增和移除核心模組 #
雖然可以使用 insmod
和 rmmod
分別新增和移除核心模組,但建議使用 modprobe
工具來執行這些操作。modprobe
具有多項重要優勢,包括自動解析相依項以及將核心模組加入黑名單。
如果不指定任何參數,使用 modprobe
指令會安裝指定的核心模組。必須使用 root 特權來執行 modprobe
:
tux >
sudo
modprobe acpi
若要移除核心模組,請使用 -r
參數:
tux >
sudo
modprobe -r acpi
23.2.1 開機時自動載入核心模組 #
您可以選擇不手動載入核心模組,而是使用 system-modules-load.service
服務在開機期間自動載入這些模組。若要啟用核心模組,請將 .conf
檔案新增到 /etc/modules-load.d/
目錄下。建議為組態檔案指定與模組相同的名稱,例如:
/etc/modules-load.d/rt2800usb.conf
組態檔案中必須包含所需核心模組的名稱 (例如 rt2800usb
)。
透過上述的這個技巧,無需指定任何參數即可載入核心模組。如果您需要使用特定選項載入核心模組,請將組態檔案新增到 /etc/modprobe.d/
目錄下。該檔案的副檔名必須為 .conf
。檔案名稱必須符合以下命名慣例:priority-modulename.conf
,例如:50-thinkfan.conf
。組態檔案中必須包含核心模組名稱及所需參數。您可以使用以下範例指令來建立包含核心模組名稱及其參數的組態檔案:
tux >
echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkfan.conf
當偵測到裝置或使用者空間要求特定功能時,系統會自動載入大多數核心模組。因此,很少需要手動將模組新增到 /etc/modules-load.d/
。
23.2.2 使用 modprobe 將核心模組加入黑名單 #
將某個核心模組加入黑名單後,開機期間便不再會載入該模組。要停用您懷疑可能導致系統出現問題的某個模組時,此功能十分實用。請注意,您仍可透過使用 insmod
或 modprobe
工具來手動載入加入黑名單的核心模組。
若要將模組加入黑名單,請將 blacklist MODULE_NAME
一行新增到 /etc/modprobe.d/50-blacklist.conf
檔案中。例如:
blacklist nouveau
以 root 身分執行 mkinitrd
指令以產生新的 initrd
影像,然後將機器重新開機。可使用以下指令執行上述步驟:
tux >
su
echo "blacklist nouveau" >> /etc/modprobe.d/50-blacklist.conf && mkinitrd && reboot
如果只想暫時停用某個核心模組,可在開機期間即時將其加入黑名單。若要實現此目標,請在開機螢幕顯示時按 E 鍵。這樣,您會進入一個可供您修改開機參數的小編輯器。找到如下所示的行:
linux /boot/vmlinuz...splash= silent quiet showopts
將 modprobe.blacklist=MODULE_NAME
指令新增到該行結尾處。例如:
linux /boot/vmlinuz...splash= silent quiet showopts modprobe.blacklist=nouveau
按 F10 或 Ctrl–X 以依照指定的組態開機。
若要透過 GRUB 將某個核心模組永久加入黑名單,請開啟要編輯的 /etc/default/grub
檔案,將 modprobe.blacklist=MODULE_NAME
選項新增到 GRUB_CMD_LINUX
指令中。然後執行 sudo grub2-mkconfig -o /boot/grub2/grub.cfg
指令使變更生效。