EN JA
KLD(4)
KLD(4) FreeBSD Kernel Interfaces Manual KLD(4)

名称

kldダイナミックカーネルリンカ機能

解説

LKM (Loadable Kernel Modules) 機能は、 FreeBSD 3.0 で廃止予定で、上位の kld インタフェースを支持します。このインタフェースは、前のものと同じように、システム管理者が実行中のシステムから機能性をダイナミックに追加し取り除くことをできるようにします。また、この能力はソフトウェア開発者がそれらの変化をテストするために頻繁にリブートしないでカーネルの新しい部分を開発するのを支援します。

様々なタイプのモジュールはシステムにロードできます。事前に定義された方法でシステムに追加することができる以下で記載されたいくつかの定義されたモジュールタイプがあります。さらに、モジュール自体がローディングとアンローディングを扱う、一般的なタイプがあります。

FreeBSD システムは大規模にローダブルカーネルモジュールを使用して、ほとんどのファイルシステムのローダブルバージョン、 NFS クライアントとサーバ、すべてのスクリーンセーバ、 iBCS2 と Linux エミュレータを提供します。 kld モジュールは、デフォルトでそれらに適合しているカーネルとともに /boot/kernel ディレクトリに置かれます。

kld インタフェースは、 kldload(8), kldunload(8)kldstat(8) プログラムを通じて使用されます。

kldload(8) プログラムは、 a.out(5) または ELF 形式のローダブルモジュールのいずれかをロードできます。他のどんなモジュールも与えられたモジュールに依存していないなら、 kldunload(8) プログラムは、どんな与えられたローダブルモジュールもアンロードします。 kldstat(8) プログラムは、現在システムにロードされているモジュールの状態をチェックするために使用されます。

カーネルモジュールは、システムセキュリティレベル kern.securelevel が 1 未満である場合にだけロードされるかまたはアンロードされます。

モジュールタイプ

デバイスドライバモジュール
新しいブロックとキャラクタデバイスドライバは、 kld でシステムにロードできます。ロードされたドライバのデバイスノードは、モジュールがロードされたとき、自動的に作成され、 devfs(5) によってアンロードされるとき破壊されます。新しいデバイスがモジュールのローディングの結果として利用可能になるとき、利用者は実行するユーザランドプログラムを指定することができます。または既存のデバイスは、 devd(8) を設定することによって、モジュールがアンロードされるとき、消えさります。

関連ファイル

/boot/kernel
モジュールバイナリを含むディレクトリはまた、ディレクトリに存在するカーネルのために構築されました。
/usr/include/sys/module.h
kld モジュールをコンパイルするのに必要である定義を含んでいるファイル
/usr/share/examples/kld
サンプル kld モジュールを実装する手本のソースコード

歴史

kld 機能は、 FreeBSD 3.0 で登場し、 lkm 機能の置き換えして設計されました。それは、 SunOS 4.1.3 によって提供されたローダブルカーネルモジュール機能の機能性に似ています。

作者

kld 機能は、元々 Doug Rabson <dfr@FreeBSD.org>によって実装されました。

バグ

モジュール B が別のモジュール A に依存しているが、依存状態のモジュール A がコンパイルされていない場合、 kldload(8) モジュール A がシステムに既に存在していても、モジュール B のロードに失敗します。

複数のモジュールがモジュール A に依存していて、依存状態のモジュール A がコンパイルされている場合、 kldload(8) は、いずれかのモジュールがロードされているとき、モジュール A のインスタンスをロードします。

カスタムエントリポイントがモジュールに使用されて、モジュールが‘ELF’バイナリとしてコンパイルされる場合、 kldload(8) はエントリポイントの実行に失敗します。

kldload(8) は、モジュールをロードしている間に遭遇するどんなエラーでも‘ ENOEXEC (Exec format error)’という不可解なメッセージを返します。

システムの内部のインタフェースが変更されるとき、古いモジュールはしばしばこれを検出することができません、そして、ロードされるときそのようなモジュールはしばしばクラッシュか不可解な失敗を引き起こします。

November 8, 1998 FreeBSD