tarfs について (14)

ええと、ためしに make してみたらヘッダが探せていない模様。何故だー、と言いつつ試行錯誤。LINUXINCLUDE とか EXTRA_CFLAGS とかいぢくり回しつつ、Documentation/kbuild/modules.txt 見てたら Makefile の記述が足らないコトが判明。

${tarfs-objs}: ${HEADERS}
	${MAKE} -C ${KDIR} M=${PWD}

*.o を作るためのソレを追加したところ、一応ヘッダは見つけている模様。ここからコンパイルを通しつつ、なログを記録した方が手は動きそげ。

dir.c から

以下

$ LANG=C make dir.o
make -C /lib/modules/2.6.20/build M=/home/rms/kernel/tarfs/src
make[1]: Entering directory `/home/rms/kernel/linux-2.6.20'
  CC [M]  /home/rms/kernel/tarfs/src/file.o
/home/rms/kernel/tarfs/src/file.c: In function 'tarfs_file_lseek':
/home/rms/kernel/tarfs/src/file.c:52: error: 'struct file' has no member named 'f_reada'
/home/rms/kernel/tarfs/src/file.c:53: error: 'event' undeclared (first use in this function)
/home/rms/kernel/tarfs/src/file.c:53: error: (Each undeclared identifier is reported only once
/home/rms/kernel/tarfs/src/file.c:53: error: for each function it appears in.)
/home/rms/kernel/tarfs/src/file.c: At top level:
/home/rms/kernel/tarfs/src/file.c:68: error: 'generic_file_read' undeclared here (not in a function)
make[2]: *** [/home/rms/kernel/tarfs/src/file.o] Error 1
make[1]: *** [_module_/home/rms/kernel/tarfs/src] Error 2
make[1]: Leaving directory `/home/rms/kernel/linux-2.6.20'
make: *** [dir.o] Error 2
  • struct file 型には f_reada という属性は無い。確かに無い。
  • event というグローバル変数もたしかに無い。2.4 では include/linux/sched.h にて定義。あ、sched.h では外部参照な宣言になっているな。定義はどこだろ。
  • generic_file_read 未定義。2.6 系では include/linux/fs.h に do_generic_file_read という inline な手続きの定義はある。しかも static なので外部参照不能。

とりあえずぼちぼちヤリます。