LED クラスドライバ †最近の Linux カーネルには LED クラスドライバ(というのかな?)という,LED を抽象化するレイヤのドライバが入っています. もっとも,PC/AT 互換機ではこのドライバで扱えるデバイスは普通は付いていないので,「使ったことがある」という人はあまり多くないでしょう. 参考文献 †Linux カーネルソースの linux/Documentation/leds-class.txt に説明があります. HDL-GXR では †先日の HDL-GXR 対応パッチでは,LED デバイスとして
を登録してあります. さらに,
も,ホントは LED ではないのだけど登録してあります. というわけで,これらも LED と同じ手順で制御できます. いじってみる †ユーザランドからは /sys の下のダミーのファイルから制御します. というわけで,HDL-GXR で実際に見てみます. # cd /sys/class/leds # ls -l 合計 0 drwxr-xr-x 2 root root 0 2008-12-13 21:44 USB1 drwxr-xr-x 2 root root 0 2008-12-13 21:44 USB2 drwxr-xr-x 2 root root 0 2008-12-13 21:44 buzzer drwxr-xr-x 2 root root 0 2008-12-13 21:44 eSATA1 drwxr-xr-x 2 root root 0 2008-12-13 21:44 error drwxr-xr-x 2 root root 0 2008-12-13 21:44 fan drwxr-xr-x 2 root root 0 2008-12-13 21:44 status # 確かに登録したデバイスが見えています. 今回は USB1 LED をいじってみましょう. # cd USB1 # ls -l 合計 0 -rw-r--r-- 1 root root 4096 2008-12-13 22:14 brightness lrwxrwxrwx 1 root root 0 2008-12-13 22:14 device -> ../../../devices/platform /leds-gpio lrwxrwxrwx 1 root root 0 2008-12-13 22:14 subsystem -> ../../leds -rw-r--r-- 1 root root 4096 2008-12-13 22:14 trigger -rw-r--r-- 1 root root 4096 2008-12-13 21:44 uevent # 手動制御 †ユーザランドから逐次制御するには brightness ファイルに値を書き込んでやります. 値は輝度で 0 〜 255 の値を取ります. が,輝度制御できない LED の場合は 0 で消灯,それ以外は点灯,となります. HDL-GXR の LED は輝度制御の機能は無いので,後者の制御パターンになります. やってみましょう. # echo 1 > brightness USB1 LED が点灯しました. # echo 0 > brightness USB1 LED が消灯しました. ハートビート †LED ドライバには,ユーザランドからの手動制御以外にも,カーネル側で自動で駆動する機能があります. # cat trigger [none] timer heartbeat default-on # ここはディスクの I/O スケジューラと同じようなインターフェースとなっていて
となっています. ここでは none (自動制御なし)が有効になっています. 制御ロジックを変更するのも I/O スケジューラと同様に,変更したい名前を書き込んでやります. つまり,heartbeat ロジックに変更する場合は # echo heartbeat > trigger でおっけー. LED が点滅しだしましたね. しかし,この点滅パターン,「ピカッピカッ……ピカッピカッ……」って,まさにハートビートww timer ロジック †さて,先ほどの trigger の中身に timer というロジックがありました. これに切り替えてみましょう. # echo timer > trigger …何も起きませんね.LED は消灯したまま. ところが # ls -l 合計 0 -rw-r--r-- 1 root root 4096 2008-12-13 22:22 brightness -rw-r--r-- 1 root root 4096 2008-12-13 22:34 delay_off -rw-r--r-- 1 root root 4096 2008-12-13 22:34 delay_on lrwxrwxrwx 1 root root 0 2008-12-13 22:14 device -> ../../../devices/platform /leds-gpio lrwxrwxrwx 1 root root 0 2008-12-13 22:14 subsystem -> ../../leds -rw-r--r-- 1 root root 4096 2008-12-13 22:32 trigger -rw-r--r-- 1 root root 4096 2008-12-13 21:44 uevent delay_off と delay_on という 2 つのファイルが突如あらわれました. ドキュメントによると
のだそうです. やってみましょう. # echo 1000 > delay_off # echo 1000 > delay_on 1秒点灯→1秒消灯→…,のパターンで点滅しました. その他の制御ロジック †default-on †ドライバの起動時に on になる,というだけのロジックです. ユーザランドからの制御では意味がありません. カーネル側で「ユーザランドからの未制御時は on になって欲しい」という場合に指定します. HDL-GXR では fan の制御で指定しています. 未制御時にファンが止まってたらマズイですね. ホンモノの LED の場合は power LED なんかに使うのかなぁ? ide-disk †IDE HDD のアクセスランプになるらしいですが,HDL-GXR では使えなかったので,試してません. |