Changes between Initial Version and Version 1 of DKMS


Ignore:
Timestamp:
2009/04/09 17:44:59 (15 years ago)
Author:
shaolin
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DKMS

    v1 v1  
     1= DKMS (Dynamic Kernel Module Support) = 
     2 
     3マシンにインストールされている個々のカーネル (バージョン/リリース) ごとに、カーネルモジュールパッケージをビルドして用意するのではなく、自動的にモジュールをインストールして配置・管理するための仕組み。 
     4 
     5[http://linux.dell.com/dkms/ Dell の DKMS プロジェクトページ] 
     6 
     7現時点での最新バージョンは `2.0.21.1` 
     8 
     9Vine Linux 的には、現在の `kernel-module-*` のスタイルから、この `dkms-*` へと移行する予定。 
     10 
     11 
     12== 動作の仕組みの概要 == 
     13 
     14 * `dkms` 対応モジュールのソースは `/usr/src/%{name}-%{version}-%{release}/` 以下に配置される 
     15 
     16 * 一連の `dkms` コマンド 
     17   - `dkms add` コマンドにより、モジュールのソースを追加する 
     18     - ソースへのシンボリックリンクなどが `/var/lib/dkms/%{name}/%{version}-%{release}` 以下にセットされる 
     19   - `dkms build` コマンドにより、`add` されたソースをコンパイルする 
     20     - `/var/lib/dkms/%{name}/%{version}-%{release}/build` 以下でコンパイルされる 
     21     - できあがったモジュールは `/var/lib/dkms/%{name}/%{version}-%{release}/%{kverrel}` 以下に 
     22       (コンパイル時のログと共に) 置かれる 
     23   - `dkms install` コマンドにより、`build` されたモジュールをインストールする 
     24     - `/usr/src/%{name}-%{version}-%{release}/dkms.conf` で指定されたパスへモジュールを配置する 
     25       (`/lib/modules/%{kverrel}/.../.../...`) 
     26     - もし、配置しようとしているモジュールと同じファイル名のモジュールがあったら、退避しておく 
     27 
     28   - `dkms uninstall`: `dkms install` の逆 (`/lib/modules/...` から削除) 
     29   - `dkms remove`: `dkms add` の逆 (`uninstall` されてなければ行い、その後 `/var/lib/dkms` 以下を掃除 
     30 
     31   - `dkms status`: `add` / `build` / `install` されている dkms 対応モジュールの状況を表示する 
     32 
     33 * `/etc/init.d/dkms_autoinstaller` スクリプト 
     34   - システムブート時に実行される 
     35   - すでに `dkms add` されている (dkms に登録されている) カーネルモジュールのうち、 
     36     現在のカーネル用に `dkms install` されていないものがあれば、 
     37     このタイミングで `dkms build; dkms install` が実行される 
     38 
     39 
     40== 実行例 == 
     41 
     42 実際にインストールした際のイメージとして。。。 
     43 
     44{{{ 
     45$ rpm -q dkms 
     46dkms-2.0.21.1-1vl5 
     47 
     48$ dkms status 
     49madwifi, 0.10.5.6-1.3992vl5, 2.6.27-18vl5, i686: installed  
     50ndiswrapper, 1.54-2vl5, 2.6.27-18vl5, i686: installed  
     51 
     52$ sudo apt-get install dkms-iscsitarget 
     53.... (中略) ... 
     54   1:dkms-iscsitarget       ########################################### [100%] 
     55 
     56Creating symlink /var/lib/dkms/iscsitarget/0.4.17.211-1vl5/source -> 
     57                 /usr/src/iscsitarget-0.4.17.211-1vl5 
     58 
     59DKMS: add Completed. 
     60 
     61Kernel preparation unnecessary for this kernel.  Skipping... 
     62applying patch compat-2.6.28.patch...patching file kernel/conn.c 
     63 
     64applying patch compat-2.6.25-2.6.27.patch...patching file kernel/block-io.c 
     65 
     66 
     67Building module: 
     68cleaning build area.... 
     69make KERNELRELEASE=2.6.27-18vl5 -C /lib/modules/2.6.27-18vl5/build SUBDIRS=/var/lib/dkms/iscsitarget/0.4.17.211-1vl5/build/kernel modules...... 
     70cleaning build area.... 
     71 
     72DKMS: build Completed. 
     73 
     74iscsi_trgt.ko: 
     75Running module version sanity check. 
     76 - Original module 
     77   - No original module exists within this kernel 
     78 - Installation 
     79   - Installing to /lib/modules/2.6.27-18vl5/kernel/iscsi/ 
     80Adding any weak-modules 
     81 
     82depmod.... 
     83 
     84DKMS: install Completed. 
     85 
     86$ dkms status 
     87madwifi, 0.10.5.6-1.3992vl5, 2.6.27-18vl5, i686: installed  
     88iscsitarget, 0.4.17.211-1vl5, 2.6.27-18vl5, i686: installed  
     89ndiswrapper, 1.54-2vl5, 2.6.27-18vl5, i686: installed 
     90}}} 
     91 
     92 
     93== DKMS 対応パッケージを作る == 
     94 
     95基本的な作業は以下の2点のみ。 
     96 
     97 1. カーネルモジュール用の `dkms.conf` を用意する 
     98 1. カーネルモジュールのソースと `dkms.conf` を `/usr/src/%{name}-%{version}-%{release}` に収録した 
     99    `dkms-%{name}` サブパッケージを作成する 
     100 
     101`dkms.conf` は比較的簡単なフォーマットの設定ファイルである。以下サンプル。 
     102 
     103{{{ 
     104# パッケージ名 
     105PACKAGE_NAME="iscsitarget" 
     106# バージョン 
     107PACKAGE_VERSION="0.4.17.211-1vl5" 
     108 
     109## 「dkms install」時に参照されるパラメータ 
     110## 
     111# インストールしたいモジュール名 (末尾の .ko は除く) 
     112BUILT_MODULE_NAME="iscsi_trgt" 
     113# そのモジュールの存在するサブディレクトリ 
     114BUILT_MODULE_LOCATION="kernel" 
     115# インストール先 
     116DEST_MODULE_LOCATION="/kernel/iscsi" 
     117 
     118## モジュールが複数ある場合は 
     119## BUILT_MODULE_NAME[0] BUILT_MODULE_NAME[1] ... と指定していく 
     120## BUILT_MODULE_LOCATION, DEST_MODULE_LOCATION についても同じ 
     121 
     122 
     123## 「dkms build」時に実行されるコマンド 
     124## 
     125MAKE="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/kernel modules" 
     126CLEAN="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build/kernel clean" 
     127 
     128# インストール後に initrd を自動再生成するかどうか 
     129REMAKE_INITRD="yes" 
     130#  
     131AUTOINSTALL="yes" 
     132 
     133 
     134## カーネルのバージョンごとに特定のパッチをあてる場合は、このように指定する 
     135## パッチのありかは /usr/src/(モジュールのソースディレクトリ)/patches/ 
     136PATCH[0]="compat-2.6.28.patch" 
     137PATCH_MATCH[0]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28)" 
     138 
     139PATCH[1]="compat-2.6.25-2.6.27.patch" 
     140PATCH_MATCH[1]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24|25|26|27)" 
     141 
     142PATCH[2]="compat-2.6.24.patch" 
     143PATCH_MATCH[2]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23|24)" 
     144 
     145PATCH[3]="compat-2.6.23.patch" 
     146PATCH_MATCH[3]="2\.6\.(9|14|15|16|17|18|19|20|21|22|23)" 
     147 
     148PATCH[4]="compat-2.6.22.patch" 
     149PATCH_MATCH[4]="2\.6\.(9|14|15|16|17|18|19|20|21|22)" 
     150 
     151PATCH[5]="compat-2.6.19-2.6.21.patch" 
     152PATCH_MATCH[5]="2\.6\.(9|14|15|16|17|18|19|20|21)" 
     153 
     154PATCH[6]="compat-2.6.14-2.6.18.patch" 
     155PATCH_MATCH[6]="2\.6\.(9|14|15|16|17|18)" 
     156}}}