[Armadillo:03029] Re: Armadillo-500 ledctrlスクリプトについて
Yasushi SHOJI
email@hidden
2008年 6月 19日 (木) 13:51:46 JST
At Wed, 18 Jun 2008 18:24:50 +0900,
g-kihara wrote:
>
> >> sysfsの writeが呼ばれます。fs/sysfs/file.c::sysfs_write_file()です。
>
> このsysfs_write_file()が呼ばれた後、最後にarmadillo5x0_led_set()
> が呼ばれますか?
> このsysfs_write_file()は呼ばれないのではないでしょうか?
なぜ? linuxですべての書き込みは VFSレイヤが処理します。VFSは
すべてのファイルシステムの interfaceレイヤの役割をしています。
そこで、vtable[1]の役割をしているのが、
struct file_operations
です。sysfsも例外ではなく、このfile operations経由で書き込みや読み込み
が処理されます。この書き込み用の関数として登録されているのが
sysfs_write_file
なので、必ず通ります。printk()を入れてみればわかるかも。
file_operationsについては、LDD3の「3.3.1 ファイル操作」にも説明があり
ますが、Linuxカーネルの「12章 仮想ファイルシステム(VFS)」に詳しい説明
があります。
[1] http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A2%E6%95%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
> 以下の流れは理解できます。
>
> echo $2 > /sys/calss/leds/$1/$3
> ->sysfs経由でwrite要求が行われる
sysfs_write_file() ->
この間が抜けてますね。
flush_write_buffer() ->
> -> sysfs store()
> -> led_set_brightness()
> -> armadillo5x0_led_set()
じゃないでしょうか。
--
yashi
armadillo メーリングリストの案内