* LED クラスドライバ [#g223f2a6] 最近の Linux カーネルには LED クラスドライバ(というのかな?)という,LED を抽象化するレイヤのドライバが入っています. もっとも,PC/AT 互換機では,このドライバで扱えるデバイスは普通は付いていないので,「使ったことがある」という人はあまり多くないでしょう. ** 参考文献 [#vf239fa6] Linux カーネルソースの linux/Documentation/leds-class.txt に説明があります. ** HDL-GXR では [#bbb13729] 先日の HDL-GXR 対応パッチでは,LED デバイスとして - status (STATUS 窓の 緑 LED) - error (STATUS 窓の 赤 LED) - eSATA1 (eSATA1 接続中) - USB1 (USB1 接続中) - USB2 (USB2 接続中) を登録してあります. さらに, - fan (ファン制御) - buzzer (ブザー制御) も,ホントは LED ではないのだけど登録してあります. というわけで,これらも LED と同じ手順で制御できます. ** いじってみる [#nc40b437] ユーザランドからは /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 # ** 手動制御 [#f121da36] ユーザランドから逐次制御するには brightness ファイルに値を書き込んでやります. 値は輝度で 0 〜 255 の値を取ります. が,輝度制御できない LED の場合は 0 で消灯,それ以外は点灯,となります. HDL-GXR の LED は輝度制御の機能は無いので,後者の制御パターンになります. やってみましょう. # echo 1 > brightness USB1 LED が点灯しました. # echo 0 > brightness USB1 LED が消灯しました. ** ハートビート [#db01e697] LED ドライバには,ユーザランドからの手動制御以外にも,カーネル側で自動で駆動する機能があります. # cat trigger [none] timer heartbeat default-on # ここはディスクの I/O スケジューラと同じようなインターフェースとなっていて - 組み込まれているロジックの名前が表示 - 現在有効のロジック名が [ ] で囲まれている となっています. ここでは none (自動制御なし)が有効になっています. 制御ロジックを変更するのも I/O スケジューラと同様に,変更したい名前を書き込んでやります. つまり,heartbeat ロジックに変更する場合は # echo heartbeat > trigger でおっけー. LED が点滅しだしましたね. しかし,この点滅パターン,「ピカッピカッ……ピカッピカッ……」って,まさにハートビートww