Dynamic Kernel Module Support

提供: ArchWiki
ナビゲーションに移動 検索に移動

Wikipedia より:

Dynamic Kernel Module Support (DKMS) はカーネルのソースツリーの外にソースが存在する Linux カーネルモジュールの生成を可能にするプログラム/フレームワークです。新しいカーネルがインストールされたときに DKMS モジュールは自動的にリビルドされます。

これはユーザーが会社・プロジェクト・パッケージメンテナが新しいバージョンのモジュールをリリースするのを待つ必要がないということを意味します。Pacman#フックが導入されたことで、カーネルがアップグレードされたときにモジュールのリビルドは自動的に処理されるようになっています。

インストール

dkms パッケージとターゲットカーネル/カーネルヘッダーをインストールしてください。例えば、デフォルトの linux カーネルの場合は、linux-headers になります。他のカーネルの場合は、それぞれ独自のヘッダーパッケージがあります。

カーネルのソースツリーの外にあるモジュールについてはかなりの数の DKMS のパッケージが作られています。いくらかは 公式リポジトリ にも存在しますが、ほとんどのモジュールは AUR にあります。

アップグレード

大抵はカーネルのアップグレード時に DKMS モジュールのリビルドが行われますが、リビルドが失敗する可能性がときどきあります。pacman の出力をよく見てください。起動するのに DKMS モジュールに依存している環境の場合や公式リポジトリに存在しないカスタムカーネルで DKMS を使用する場合は特に重要です。

カーネルの変更に対処したり、バグを修正したり、必要な機能を追加するため、再起動する前に DKMS パッケージをアップグレードするようにしてください。

使用方法

DKMS を手動で使用する方法です。

タブ補完は次を実行することで使えます:

# 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 install nvidia/334.21 --all

モジュールの削除

モジュールを削除するには (古いモジュールが勝手に削除されることはありません):

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

もしくは:

# dkms remove nvidia/331.49 --all

dkms パッケージを削除した場合、モジュールのビルドファイルに関連する情報が消失します。その場合 /usr/lib/modules/KERNELVERSION-ARCH から使用しないファイルやディレクトリを削除してください。

DKMS パッケージの作成

DKMS パッケージガイドライン を見てください。

初期 RAM ディスク

初期 RAM ディスク 内で使用されているカーネルモジュールを DKMS を通してインストールした場合(例: zfs-dkmsAUR)、pacman フックを記述して初期 RAM ディスクイメージの再生成手順を自動化できます。

例えば、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'

他のカーネルをインストールしている場合には、フックに target を追加したり、フックの追加コピーを作成したりもできます。90- 接頭辞は、フックが DKMS フックの後に実行されるようにするために必要であることに注意してください。

参照