• 締切済み

Linuxカーネル sampleプログラムについて

現在、linuxのsysfsについて勉強中です。 kernel/samples/kobjectの下にある、 kobject-example.c をカーネルにbuilt-inさせ、 ビルドを行い、uImageを作成しました。 具体的な手順は以下のとおりです。 make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- menuconfig Kernel hacking ---> [*] Sample kernel code ---> <M> Build kobject examples -- loadable modules only make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- uImage サンプルソースの説明に * This module shows how to create a simple subdirectory in sysfs called * /sys/kernel/kobject-example In that directory, 3 files are created: * "foo", "baz", and "bar". If an integer is written to these files, it とあったので、 カーネルを起動させ、/sys/kernelの下をみにいったのですが、 存在していませんでした。 そこで、kobject-example.cをkernel/drivers/miscの下に移動させ、 カーネルモジュール(kobject-example.ko)を作成し、insmodしたところ、 下記のようにちゃんとフォルダkobject_exampleが生成されていました。 /sys/kernel # /sys/kernel # ls -l kobject_example/ total 0 -rw-rw-rw- 1 0 0 4096 Jan 1 00:00 bar -rw-rw-rw- 1 0 0 4096 Jan 1 00:02 baz -rw-rw-rw- 1 0 0 4096 Jan 1 00:00 foo ここで質問です。 kernel/samplesの下におかれているサンプルソースは、 このフォルダ直下においていては動作テストをすることができないのでしょうか? 上記のように、わざわざkernel/drivers/miscの下などに移動させて、モジュールの 作成を行わないといけないのでしょうか? ご教示のほどよろしくお願いします。

みんなの回答

回答No.2

No1です > 下記の方法ですと、*.koは作成されておらず、 > built-in.oが作成されていました。 あぁ、そういうことでしたか。 make prepare make modules_prepare を試してみてはいかがでしょうか? (参考URLも見てみてください)

参考URL:
http://wiki.centos.org/HowTos/BuildingKernelModules
mana_Gothic
質問者

お礼

ありがとうございました!

mana_Gothic
質問者

補足

ご回答ありがとうございます。 返信送れて申し訳ございませんでした。 上記方法を試してみたのですが、 やはりkobject-example.koは生成されませんでした。 make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- uImage を行うと、built-in.oというファイルが生成されます。 ~/ext/TI_Android_GingerBread_2_3_4Sources/kernel/samples $ ls -1 Kconfig Makefile built-in.o hw_breakpoint/ kdb/ kfifo/ kobject/ kprobes/ trace_events/ tracepoints/ ~/ext/TI_Android_GingerBread_2_3_4Sources/kernel/samples $ ls -1 ./kobject/ Makefile built-in.o kobject-example.c kset-example.c ~/ext/TI_Android_GingerBread_2_3_4Sources/kernel/samples カーネルにbuilt-inされているのではとおもい、 カーネルイメージを焼きなおしても、やはり /sys/kernelの下に、フォルダkobject_exampleは生成されていません でした。

回答No.1

kernel が module loadable でコンパイルされていて、 カーネルモジュール(.ko)が作成されているのなら、insmode <.ko へのパス> で読み込めると思います。 こんなふうに #insmod kernel/samples/kboject/kobject-example.ko

mana_Gothic
質問者

補足

ご回答ありがとうございます。 >#insmod kernel/samples/kboject/kobject-example.ko すみません、 説明が足りていませんでした。 下記の方法ですと、*.koは作成されておらず、 built-in.oが作成されていました。 [*] Sample kernel codeのように、[*]となっているため、 "loadable modules only"とかかれているにもかかわらず、 カーネルにbuilt-inされるようです。 しかし、カーネルを起動しても、カーネルモジュールが実行されて いませんでした。 また、ビルド時、uImageをmodulesにしても*.koは作成されませんでした。 Kernel hacking ---> [*] Sample kernel code ---> <M> Build kobject examples -- loadable modules only make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- uImage