HotPlug

ユーザにとってデバイスドライバの存在は、常に意識する必要は無いが、システム内部では重要な役割を持っている。今回はユーザの使い勝手を向上するために、今後不可欠と思われるカーネルの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でも評価されているので今後に注目したい。