udev
基礎
- systemd の一部として提供されるデバイスの認識に関わるデーモン
- 認知までの流れ
- Linux カーネルが新しいデバイスを検知
- uevent によって udev に通知
- ルールに基づき処理を行う
ルールファイル
任意のデバイスを接続したときの挙動を記載できる
拡張子は
.rules
/etc/udev/rules.d
- システムの管理者が作成・変更することを想定したルールファイルの保存場所
/run/udev/rules.d
- 一時的に作成されるルールファイルの保存場所
/lib/udev/rules.d
- パッケージ等システムが提供するルールファイルの保存場所
優先順位は /etc => /run => /lib
- /lib を無効にしたい場合には /etc 以下に同名のファイルを用意し
/dev/null
へシンボリックリンクを貼れば良い
- /lib を無効にしたい場合には /etc 以下に同名のファイルを用意し
sample : /lib/udev/rules.d/80-drivers.rules
# do not edit this file, it will be overwritten on update
ACTION=="remove", GOTO="drivers_end"
ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}+="kmod load tifm_sd"
SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}+="kmod load tifm_ms"
SUBSYSTEM=="memstick", RUN{builtin}+="kmod load ms_block mspro_block"
SUBSYSTEM=="i2o", RUN{builtin}+="kmod load i2o_block"
SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev"
KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}+="kmod load sm_ftl"
LABEL="drivers_end"
- キーバリューの変数をベース
ACTION=="remove", GOTO="drivers_end"
- ACTION が add でなければ、GOTO で指定された drivers_end ラベルにジャンプ
ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}"
- ENV
- カーネルドライバーの中や他のルールで設定されるデバイスプロパティ
- ENV の MODALIAS に何か値が設定されていたとき
- RUN
- 追加したコマンドを実行する変数
- kmod load $env{MODALIAS} が実行されるということ
+=
とすることでこれまで他のルールが追加した値に追記- RUN が評価されるのは,すべてのルールが評価されたあと
builtin
- udev コマンド内部のビルドインコマンドを実行することを意味
- ENV
- 特殊デバイス
- /dev/null
- /dev/zero
- /dev/random