DKMS
摘自維基百科:
- 動態內核模塊支持(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 鏡像。
例如,在 linux包 和 mkinitcpio 環境下,在 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 鈎子後運行。