カーネルモジュールについて
カーネルはOSの中核をなすプログラムで、ハードウェアの監視や
アプリケーションの実行等を行います。そのカーネルでハードウェア
の監視を行うためにはデバイスドライバが必要となります。
デバイスドライバは、【カーネルに組み込んで利用する場合】と
【カーネルモジュールとして利用する場合】があります。
【カーネルに組み込んで利用する場合】
システム起動時、カーネルをメモリにロードした時点でデバイスをサポートすることができます。
ハードディスクなどシステムで頻繁に利用するハードウェアが適しています。
【カーネルモジュールとして利用する場合】
ハードウェアを利用するたびに、必要なカーネルモジュールをメモリにロードします。
システムで利用する頻度が低いハードウェアが適しています。
システム稼動中にロードされているカーネルモジュールを一覧表示する
ためには、「lsmod」コマンドを利用します。「lsmod」はカーネルモジュールごとに
「名前」「サイズ」「利用回数」「このモジュールを参照しているモジュール名」を表示します。
「cat /proc/modules」としても「lsmod」と同じ出力になります。
# lsmod
Module Size Used by
intel_agp 19360 1
agpgart 26024 2 intel_agp
parport_pc 21440 0
lp 8360 0
parport 31176 2 parport_pc,lp
joydev 7744 0
bcm5700 136108 0
iptable_filter 2048 0
iptable_mangle 2048 0
ip_tables 14976 2 iptable_filter,iptable_mangle
dump_blockdev 4608 0
dump_gzip 2052 0
zlib_deflate 21528 1 dump_gzip
【カーネルモジュールのロード】
modprobeは設定ファイルやコマンドラインで指示することにより、モジュールのロード、
アンロードや状態表示などさまざまなモジュール管理を行うことができます。
たとえば1つまたは複数のモジュールを、それが必要とするモジュールとあわせてロードしたり、
モジュールロード時にスクリプトを実行したりすることができます。
modprobeの設定ファイルはカーネルのバージョンによって異なります。
カーネル2.4系で使用される設定ファイルは/etc/modules.conf、
カーネル2.6系で使用される設定ファイルは/etc/modprobe.confです。
これら設定ファイルに処理内容を記述して、そのmodprobeを実行すると、
システムがモジュールをロードする際、設定ファイルに記述された処理内容
が参照されて自動的に実行されます。
以下はモジュールのbcm5700をロードしています。
# vi /etc/modprobe.conf
alias eth0 bcm5700
# modprobe eth0
またカーネルモジュールを操作するとき「modprobe」は「modules.dep」ファイルを利用して、
モジュール間の依存関係を調べます。その結果、モジュールが他のモジュールを必要と
している場合は、そのモジュールを先にロードします。
modules.depファイルを最新の状態に更新するには、「depmod」コマンドを実行します。
アプリケーションの実行等を行います。そのカーネルでハードウェア
の監視を行うためにはデバイスドライバが必要となります。
デバイスドライバは、【カーネルに組み込んで利用する場合】と
【カーネルモジュールとして利用する場合】があります。
【カーネルに組み込んで利用する場合】
システム起動時、カーネルをメモリにロードした時点でデバイスをサポートすることができます。
ハードディスクなどシステムで頻繁に利用するハードウェアが適しています。
【カーネルモジュールとして利用する場合】
ハードウェアを利用するたびに、必要なカーネルモジュールをメモリにロードします。
システムで利用する頻度が低いハードウェアが適しています。
システム稼動中にロードされているカーネルモジュールを一覧表示する
ためには、「lsmod」コマンドを利用します。「lsmod」はカーネルモジュールごとに
「名前」「サイズ」「利用回数」「このモジュールを参照しているモジュール名」を表示します。
「cat /proc/modules」としても「lsmod」と同じ出力になります。
# lsmod
Module Size Used by
intel_agp 19360 1
agpgart 26024 2 intel_agp
parport_pc 21440 0
lp 8360 0
parport 31176 2 parport_pc,lp
joydev 7744 0
bcm5700 136108 0
iptable_filter 2048 0
iptable_mangle 2048 0
ip_tables 14976 2 iptable_filter,iptable_mangle
dump_blockdev 4608 0
dump_gzip 2052 0
zlib_deflate 21528 1 dump_gzip
【カーネルモジュールのロード】
modprobeは設定ファイルやコマンドラインで指示することにより、モジュールのロード、
アンロードや状態表示などさまざまなモジュール管理を行うことができます。
たとえば1つまたは複数のモジュールを、それが必要とするモジュールとあわせてロードしたり、
モジュールロード時にスクリプトを実行したりすることができます。
modprobeの設定ファイルはカーネルのバージョンによって異なります。
カーネル2.4系で使用される設定ファイルは/etc/modules.conf、
カーネル2.6系で使用される設定ファイルは/etc/modprobe.confです。
これら設定ファイルに処理内容を記述して、そのmodprobeを実行すると、
システムがモジュールをロードする際、設定ファイルに記述された処理内容
が参照されて自動的に実行されます。
以下はモジュールのbcm5700をロードしています。
# vi /etc/modprobe.conf
alias eth0 bcm5700
# modprobe eth0
またカーネルモジュールを操作するとき「modprobe」は「modules.dep」ファイルを利用して、
モジュール間の依存関係を調べます。その結果、モジュールが他のモジュールを必要と
している場合は、そのモジュールを先にロードします。
modules.depファイルを最新の状態に更新するには、「depmod」コマンドを実行します。
ホットプラグについて
USB規格では、PCに電源を入れたまま周辺機器やパーツの取り付け・取り外しが
できるホットプラグに対応しています。以前は/sbin/hotplugを実行認識していましたが、
現在では/sbin/hotplugを使用せず動的にデバイスを管理するudevを使用した対応が一般的となっています。
すなわち、ホットプラグデバイス接続時にカーネルがudevのデーモン
であるudevdに通知し、udevdは/etc/udev/ディレクトリ以下に格納
されたスクリプトを実行します。
このとき、デバイスに関する情報はシステム上のデバイスのデータベースを
管理しているHALのデーモンであるhaldに通知され、新たにデバイスの登録が
行われます。その後、D-BUSにより各アプリケーションにその情報が通知され、
デバイスを使用できるようになります。
USB接続デバイスの確認は「lsusb」コマンドを使用します。
# lsusb
Bus 004 Device 001: ID 0000:0000 Virtual Hub
Bus 003 Device 001: ID 0000:0000 Virtual Hub
Bus 002 Device 003: ID 046d:c001 Logitech Inc. N48/M-BB48 [FirstMouse Plus]
Bus 002 Device 001: ID 0000:0000 Virtual Hub
Bus 001 Device 002: ID 049f:0052 Compaq Computer Corp.
Bus 001 Device 001: ID 0000:0000 Virtual Hub
できるホットプラグに対応しています。以前は/sbin/hotplugを実行認識していましたが、
現在では/sbin/hotplugを使用せず動的にデバイスを管理するudevを使用した対応が一般的となっています。
すなわち、ホットプラグデバイス接続時にカーネルがudevのデーモン
であるudevdに通知し、udevdは/etc/udev/ディレクトリ以下に格納
されたスクリプトを実行します。
このとき、デバイスに関する情報はシステム上のデバイスのデータベースを
管理しているHALのデーモンであるhaldに通知され、新たにデバイスの登録が
行われます。その後、D-BUSにより各アプリケーションにその情報が通知され、
デバイスを使用できるようになります。
USB接続デバイスの確認は「lsusb」コマンドを使用します。
# lsusb
Bus 004 Device 001: ID 0000:0000 Virtual Hub
Bus 003 Device 001: ID 0000:0000 Virtual Hub
Bus 002 Device 003: ID 046d:c001 Logitech Inc. N48/M-BB48 [FirstMouse Plus]
Bus 002 Device 001: ID 0000:0000 Virtual Hub
Bus 001 Device 002: ID 049f:0052 Compaq Computer Corp.
Bus 001 Device 001: ID 0000:0000 Virtual Hub
USBデバイスについて
USBは、キーボードやマウス、モデムなどの周辺機器とパソコン
を結ぶバスの規格の1つです。
プラグアンドプレイやホットプラグ対応といった特徴を持ち、広く普及しています。
従来の規格USB1.1は最大転送速度が12Mbpsと低速でしたが、
現在ではUSB2.0(転送速度480Mbps)が普及しています。
※最近では、USB3.0もでてきました。
Linuxもカーネル2.4からUSB1.1に対応、
2.4.18以降(2.6も含む)のカーネルでUSB2.0が対応しました。
特徴を以下にまとめてます。
・最大127のUSBデバイスを接続可能
・プラグアンドプレイによりドライバを自動認識
・ホットプラグを実装し、PC起動中に抜き差し可能
・USBポートからの電源供給
・USBコントローラとしてOHCI,UHCI,EHCIがある
USBコントローラとは、USBを制御するためのチップのことです。
【USB1.1】
☆Intel社とVIA社主導
USBコントローラ:UHCI
USBモジュール(カーネル2.6):uhci_hcd
☆SiS社主導
USBコントローラ:OHCI
USBモジュール(カーネル2.6):ohci_hcd
【USB2.0】
UHCIとOHCIの互換性の問題を解消するべくEHCIに統一。
USBコントローラ:EHCI
USBモジュール(カーネル2.6):ehci_hcd
USB規格は、「デバイスクラス」として、USBデバイスの機能ごとに
データ送受信形式を標準化して定義しています。「クラス・ドライバ」
はデバイスクラスごとに利用される汎用ドライバを指し、1つのデバイスクラス
に属するUSBデバイスは、同じクラス・ドライバを介して制御されます。
各デバイスクラスには固有の「クラスID」が設定されており、
各USBデバイスは、自身が属するデバイスクラスのクラスIDに応じて、クラス・ドライバを選択利用します。
なおクラスID255は、汎用ドライバであるクラス・ドライバでは対応できないUSB
デバイスのデバイスクラスを表します。この場合はドライバとしてクラス・ドライバ
ではなく、ベンダーが提供している「ベンダー・デバイス・ドライバ」を利用します。
を結ぶバスの規格の1つです。
プラグアンドプレイやホットプラグ対応といった特徴を持ち、広く普及しています。
従来の規格USB1.1は最大転送速度が12Mbpsと低速でしたが、
現在ではUSB2.0(転送速度480Mbps)が普及しています。
※最近では、USB3.0もでてきました。
Linuxもカーネル2.4からUSB1.1に対応、
2.4.18以降(2.6も含む)のカーネルでUSB2.0が対応しました。
特徴を以下にまとめてます。
・最大127のUSBデバイスを接続可能
・プラグアンドプレイによりドライバを自動認識
・ホットプラグを実装し、PC起動中に抜き差し可能
・USBポートからの電源供給
・USBコントローラとしてOHCI,UHCI,EHCIがある
USBコントローラとは、USBを制御するためのチップのことです。
【USB1.1】
☆Intel社とVIA社主導
USBコントローラ:UHCI
USBモジュール(カーネル2.6):uhci_hcd
☆SiS社主導
USBコントローラ:OHCI
USBモジュール(カーネル2.6):ohci_hcd
【USB2.0】
UHCIとOHCIの互換性の問題を解消するべくEHCIに統一。
USBコントローラ:EHCI
USBモジュール(カーネル2.6):ehci_hcd
USB規格は、「デバイスクラス」として、USBデバイスの機能ごとに
データ送受信形式を標準化して定義しています。「クラス・ドライバ」
はデバイスクラスごとに利用される汎用ドライバを指し、1つのデバイスクラス
に属するUSBデバイスは、同じクラス・ドライバを介して制御されます。
各デバイスクラスには固有の「クラスID」が設定されており、
各USBデバイスは、自身が属するデバイスクラスのクラスIDに応じて、クラス・ドライバを選択利用します。
なおクラスID255は、汎用ドライバであるクラス・ドライバでは対応できないUSB
デバイスのデバイスクラスを表します。この場合はドライバとしてクラス・ドライバ
ではなく、ベンダーが提供している「ベンダー・デバイス・ドライバ」を利用します。