カーネルモジュールの開発は初めてです。そこで、参照用に「The Linux Kernel Module Programming Guide」という本を使用している単純な hello world カーネル モジュールから始めました (カーネル 2.6 に対応しています)。yum を使用して kernel-devel および kenel ヘッダーをインストールしました。私はfedora 17を使用しています。シンボリックリンクが見つかりました
/lib/modules/3.3.4-5.fc17.x86_64/build -> /usr/src/kernels/3.3.4-5.fc17.x86_64
これで、1 つの hello-1.c (単純なカーネル モジュールと作業ディレクトリ内の Makefile) ができました。Makefile は次のとおりです。
obj-m += hello-1.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
$make でエラーが発生する場合:
make -C /lib/modules/3.3.4-5.fc17.x86_64/build M=/root/kerneldev modules
make: *** /lib/modules/3.3.4-5.fc17.x86_64/build: No such file or directory. Stop.
make: *** [all] Error 2
/lib/modules/3.3.4-5.fc17.x86_64/build には実際のモジュール (シンボリックリンクではない) が含まれていたため、Centos-5.x で同じプログラムを正常に実行します。問題は何ですか?なぜそのような違いは?