[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 メーリングリストの案内