DKMS

出自 Arch Linux 中文维基

摘自維基百科

動態內核模塊支持(DKMS)是用來生成 Linux 的內核模塊的一個框架,這種模塊的原始碼一般不在 Linux 內核原始碼樹中。當新的內核安裝時,DKMS 支持的內核模塊會自動重建。

這意味着你不再需要等待某個公司、項目組或者包維護者釋出新版本的內核模塊。自從 pacman 支持鈎子之後,內核更新時就會自動重新構建模塊。

安裝[編輯 | 編輯原始碼]

安裝 dkms 包和目標內核的頭文件。例如,標準 linux 內核的頭文件可以用軟件包 linux-headers 安裝。其他內核也有其相應的頭文件包。

有許多位於內核源碼樹之外的內核模塊都有 DKMS 變體;有一些位於官方軟件倉庫,大多數可以在 AUR 找到。

升級[編輯 | 編輯原始碼]

雖然在內核升級時,DKMS 的編譯自動執行,但是依然有可能編譯報錯。所以需要特別注意 pacman 的輸出。當系統需要這些模塊才能啟動,或者使用不在 官方軟件倉庫 中的內核時,需要額外注意。

若要應用內核中的變化、修復 bug、或是添加特性,請在重啟前先升級 DKMS 包。

使用方法[編輯 | 編輯原始碼]

如何手動調用DKMS:

可以通過執行以下命令來使能使用DKMS時的Tab補全:

# source /usr/share/bash-completion/completions/dkms

列出內核模塊[編輯 | 編輯原始碼]

列出當前模塊的狀態,版本,包括源碼樹內的模塊:

# dkms status

重新構建模塊[編輯 | 編輯原始碼]

為當前內核重新構建所有的模塊:

# dkms autoinstall

或者為指定版本的內核構建:

# dkms autoinstall -k 3.16.4-1-ARCH

為當前內核構建一個特定的模塊(例如: 對於當前內核):

# dkms install -m nvidia -v 334.21

或者簡單地:

# dkms install nvidia/334.21

移除模塊[編輯 | 編輯原始碼]

移除一個內核模塊(舊的內核模塊並不會被自動移除):

# dkms remove -m nvidia -v 331.49 --all

或者簡單的:

# dkms remove nvidia/331.49 --all

如果你卸載了 dkms 包,那麼以前構建內核模塊使用的相關文件信息就會丟失。如果這樣,去 /usr/lib/modules/kernel_release/var/lib/dkms/package_name 下刪除不再需要的文件和目錄。

創建 DKMS 包[編輯 | 編輯原始碼]

請參見 DKMS 包指南

Initial ramdisk[編輯 | 編輯原始碼]

若以 DKMS 安裝了 initial ramdisk,例如 zfs-dkmsAUR,你也許想要寫一個 pacman 鈎子來自動重建 initramfs 鏡像。

例如,在 linuxmkinitcpio 環境下,在 zfs-dkmsAUR 更新後自動更新 ZFS

/etc/pacman.d/hooks/90-mkinitcpio-dkms-linux.hook
[Trigger]
Operation=Install
Operation=Upgrade
Operation=Remove
Type=Package
Target=zfs-dkms
Target=linux

[Action]
Description=Update dkms modules in Linux initcpio
Depends=mkinitcpio
When=PostTransaction
NeedsTargets
Exec=/bin/sh -c 'while read -r trg; do case $trg in linux) exit 0; esac; done; /usr/bin/mkinitcpio -p linux'

如果安裝了多個內核,可以在鈎子裏加入更多目標,複製多份鈎子。注意 90- 前綴是必要的,以確保它在 DKMS 鈎子後運行。

相關連結[編輯 | 編輯原始碼]