HOME/Articles/

Linux I/Oデバイス管理

Article Outline

LinuxにおけるI/Oデバイス管理について

LinuxにおけるI/Oデバイス管理について学習したため、そのまとめとして個々に整理する。


sysfsファイルシステム

  • Linuxにおける特殊ファイルシステムの一種であり、一般的には/sysディレクトリにマウントされている。
  • procファイルシステム同様、ユーザーモードのアプリケーションからカーネル内部のデータにアクセスするために設計されたものであるが、procファイルシステムよりも、接続されているデバイスやバスについてより構造化されている。以下、sysfsに含まれる代表的なディレクトリを記載する。
    • /sys/block
      • 接続されているブロックデバイスについての情報を提供。
    • /sys/devices
      • カーネルが認識しているハードウェアデバイスについての情報を、接続されているバスごとに提供。
    • /sys/bus
      • システム内のバスについての情報を提供。
    • /sys/drivers
      • カーネルに登録済みのドライバーについての情報を提供。
    • /sys/class
      • カーネルが認識しているハードウェアデバイスについての情報を、デバイスの種別ごとに提供。
    • /sys/power
      • ハードウェアデバイスの電源状態を制御するファイルを提供。
    • /sys/firmware
      • ハードウェアデバイスのファームウェアを制御するファイルを提供。

kオブジェクト

  • Linuxにおけるデバイスドライバモデルを実装するために使用されるデータ構造。
  • 各kオブジェクトは、それぞれsysfsのディレクトリと対応している。
  • バス・デバイス・ドライバのディスクリプタなどをそれぞれ「コンテナ」という概念で扱い、kobject構造体によって表される。

デバイスファイル

  • UNIX系オペレーティングシステムの特性上、あらゆるものをファイルとして扱うことを基本としており、デバイスの入出力に関してもファイルへの読み書きと同様に行えるように設計されている。
  • このような、デバイスとのやり取りに使用されるファイルをデバイスファイルと呼び、各デバイスファイルへの読み書きは対応するデバイスドライバへのデータの受け渡しと等価となる。

デバイスドライバ

  • 様々なデバイスが存在する中、それらのデバイスをオペレーティングシステム上で統一的なインターフェースで操作できるようにするための要素であり、Linuxにおいては主に、デバイスに対する操作をファイル操作のためのインターフェースに対応付ける役割を持つ。
  • 対応するデバイスの性質によって、ブロック型デバイスドライバやキャラクタ型デバイスドライバのようにデバイスドライバの特性が違ってくるが、別記事にて整理する。