HotPlug
HotPlugとsysfs
前回はsysfsを取り上げて、カーネル2.5で行われる新しいドライバ・モデルの導入に関して簡単に解説した。カーネルのHotPlugサポートは、システムの使い勝手を向上させる機構であるが、新しいドライバ・モデルの設計と実装を担当しているPatrick Mochelは、HotPlugをsysfsドライバ・モデルで統合して、一体化したサポートを実現させた。即ちカーネル2.5/2.6では、sysfsに適応した全てのバス、およびドライバ・クラスでHotPlugが利用できるようになっている。
HotPlugとPnP
HotPlugのサポートは、すでにカーネル2.4でPlug and Play(PnP)機構の一部を実現するために導入されている。ここでPnPという用語は意味が広いので簡単に解説する。
PnPは元々IntelとMicrosoftが推奨したISAバスのリソース(IRQ、IOポート、IOメモリ領域、DMAチャネル)を、ハードウェアとOSで自動的に割り当てる仕組みであった。その後Windows95で、発見したデバイス用ドライバの自動検索とインストール機構が、USBやIEE1394(FireWire)等のWDMでは、活線挿抜(Hot Plug)に対応したドライバの自動ロードとアンロードがPnPとして実現されている。さらにはMicrosoftによってHardwareとは独立したネットワーク・プロトコルが、uPnP(Universal Plug and Play)として提案されている。
機能概要
LinuxカーネルのHotPlug実装の(当初の)目的は、ユーザにシステム管理を意識させないUSB、CardBus、network、IEEE1394等のドライバ・モジュールの自動ロード、アンロードのサポートであった。対象となるUSB等のデバイスのプラグインを検出すると、カーネルは/proc/sys/kernel/hotplugに記述してあるアプリケーション(helperプログラム)を呼び出し、実際のドライバのロードや設定処理はこのhelperプログラム(/sbin/hotplug)が行うようになっている。/sbin/hotplugは、「Linux Hotplugging」というカーネル開発とは別のプロジェクトとして開発されている。(helperプログラムとしては、Linux Hotpluggingのほかに、Vine等で採用されていてusbmgrの後継にあたるmurasakiもある。)
カーネル2.4では、主に次のサブシステムのデバイスがサポートされている。
- IBM Channel Devices
- IEEE 1394
- Networking
- PCI (Card Bus)
- USB
カーネル2.5では、上記に加えて以下のサブシステムのデバイスがサポートされているが、さらにカーネル開発ではサポート・デバイスの拡大と、すでに実現しているCPU(s390/s390x、x86、ia64)、メモリ(ia64)のほかIDE DISK等へのHot Swap機能の拡張としての実装も検討されている。
- Docking Stations
- Input
- PCI (Extended)
- SCSI
このようにLinuxカーネル開発において、ゆるやかだが着実に進みつつある新しいドライバ・モデルの導入は、様々なデバイスやバスとのインタフェイスを抽象化、単純化する事により利便性と応用範囲を広げるものである。しかし、ここ最近のハードウェアの技術革新が進んでいるため、今後2年以内に実用になると予想される新しいバスの種類も多い。残念ながらHotPlugのカーネル実装作業は、次期開発用カーネルである2.7でも終らないだろうと予想されている。
udev
2003年4月11日に、Linux USBサブシステムのメンテナとして有名なGregKH(Greg Kroah-Hartman)から、sysfsドライバ・モデルに合致する動的なデバイス名の管理機構を、Linux Hotpluggingに対して提供するツール(udev 0.1)とパッチがLinux-kernel MLとLinux-Hotplug MLに投稿され、カーネル開発者の注目を得た。このudevが次期リリースにどのように取り入れられるかはまだわからないが、MLでも評価されているので今後に注目したい。