🐧 Linux 総合学習プラットフォーム

デバイスドライバ実装の用語集(12語)

デバイスドライバ実装に関する Linux 用語を、読み・意味・補足つきでまとめました。

.ko ファイルけーおーふぁいる
ビルド済みのカーネルモジュール本体。kernel object の略。
C言語のソースを make でビルドすると生成される。insmod に渡して組み込む。modprobe は /lib/modules 配下に配置済みの .ko を名前で探して読み込む。
/devでぶ
デバイスファイルが集まる特別なディレクトリ。
/dev/null(捨て場)、/dev/sda(ディスク)、/dev/ttyS0(シリアル)など。現代では udev が機器の接続に応じて中身を動的に作る。
dmesgでぃーめっせーじ
カーネルが出すメッセージ(カーネルリングバッファ)を表示するコマンド/仕組み。
起動ログ、機器の認識、ドライバのエラー、printk の出力などが時系列で並ぶ。ドライバ開発では状態把握と原因切り分けの第一手になる。
printkぷりんとけー
カーネル空間で使うログ出力関数。ユーザ空間の printf に相当。
出力先はカーネルリングバッファで、dmesg や journalctl で読む。KERN_INFO・KERN_ERR などのログレベルを先頭に付けて重要度を示せる。
udevゆーでぶ
機器の接続・切断に応じて /dev のデバイスファイルを動的に管理する仕組み。
昔は /dev に全デバイスファイルを静的に並べていたが、今は udev が実際に存在する機器の分だけ作る。ルールで名前付けや権限を制御できる。
カーネルモジュールかーねるもじゅーる
あとからカーネルに着脱できる拡張機能。多くのドライバはこの形。
拡張子は .ko。insmod / modprobe で組み込み、rmmod / modprobe -r で外す。カーネルを再ビルドせずに機能を追加でき、ドライバ開発の基本単位になる。
カーネル空間かーねるくうかん
カーネルやドライバが動く特権領域。アプリのユーザ空間とは分離される。
ハードウェアへ直接アクセスできる強い権限を持つ反面、ここでの不具合はシステム全体を巻き込みやすい。モジュールはこのカーネル空間で実行される。
キャラクタデバイスきゃらくたでばいす
1バイトずつ順番にやり取りする機器。ls -l の先頭が c。
キーボード・シリアルポート・端末などが該当。バッファ単位ではなくストリーム的に読み書きする。自作ドライバの最初の題材として扱いやすい。
デバイスファイルでばいすふぁいる
ハードウェアをファイルとして扱うための特殊ファイル。/dev にある。
「すべてはファイル」の思想に基づく入口。read / write するとドライバ経由で機器を操作できる。メジャー・マイナー番号で担当ドライバと結びつく。
ブロックデバイスぶろっくでばいす
決まった大きさの塊単位でランダムアクセスする機器。ls -l の先頭が b。
ディスクやSSDが代表。ブロック単位で読み書きし、キャッシュやスケジューラを介して効率化される。ファイルシステムはこの上に構築される。
メジャー番号/マイナー番号めじゃーばんごうまいなーばんごう
デバイスを識別する2つの番号。メジャー=担当ドライバ、マイナー=何番目の機器か。
ls -l /dev でサイズの位置に「8, 0」のように表示される。同じドライバ配下の複数機器をマイナー番号で区別する。mknod で番号を指定してファイルを作ることもできる。
モジュール依存関係もじゅーるいぞんかんけい
あるモジュールが別のモジュールの機能を必要とする関係。
modprobe はこの依存を depmod が作った一覧をもとに自動でたどり、必要なモジュールを先に読み込む。insmod は依存を解決しないため、単体で扱うとき以外は modprobe が安全。

▶ 学習アプリで「引く」を使う