こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

linux/module.h インクルードできない

もう自力ではわからず、検索しても解決できなかったので、わかる方、力を貸してください。

まず環境は Ubuntu 12.10 をVirtualBoxで動かしています。

そして、以下のパッケージをインストールしました。

linux-source-3.5.0
linux-header-3.5.0-19-generic

その後、以下のソースをコンパイルしようとしました。

1 #include <linux/module.h> /* module 作成には必須 */
2 #include <linux/kernel.h> /* printk */
3
4 MODULE_LICENSE( "GPL" );
5
6 static char* msg = "module [message.o]";
7
8
9 /*
10 * モジュールの初期処理
11 * insmod 時に呼ばれる
12 */
13 int
14 init_module( void )
15 {
16 printk( KERN_INFO "%s : loaded into kernel\n", msg );
17
18 /* モジュール初期化に成功したので 0 を返す
19 0 以外の値を返せば初期化失敗とみなされモジュールは
20 カーネルには組み込まれない */
21 return 0;
22 }
23
24
25 /*
26 * モジュールの解放処理
27 * モジュールの参照数が 0 であれば、rmmod 時に呼ばれる
28 */
29 void
30 cleanup_module( void )
31 {
32 printk( KERN_INFO "%s : removed from kernel\n", msg );
33 }
34
35
36 /* End of message.c */

このソース自体はネットで公開されていたもののコピペです。
これを解説を読んで、いざコンパイルというときに、

linux/module.h そのようなファイルやディレクトリはありません

上のエラーが出ます。

でも、/usr/src/linux-source-3.5.0/include/linuxの中に、module.hは確かにありました。
あったのにもかかわらず、そのようなファイルやディレクトリがありませんというのは、いったいどのような原因が考えられるのでしょうか。
自力では解決できなかったので、わかるかた教えてください。

投稿日時 - 2012-12-17 05:05:27

QNo.7848605

すぐに回答ほしいです

質問者が選んだベストアンサー

コンパイル時のコマンドラインはどんな感じなんでしょう?
makeを使用しているのならば、そのMakefileの内容はどうなっていますか?

インクルードファイルのディレクトリを指定するコマンドラインスイッチなりあるかと思われますが、
/usr/src/linux-source-3.5.0/include
は指定されてますか?
# シンボリックリンクで指定されていても良いのですが……。

投稿日時 - 2012-12-17 06:08:40

お礼

回答ありがとうございます。
インストール後、シンボリックリンクを貼ってみましたが、うまくいきませんでした・・・。

いまだ解決できずにいますが、すばやい回答本当にありがとうございました。

投稿日時 - 2012-12-20 00:36:14

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

Wr5

元にしたページは
http://homepage3.nifty.com/rio_i/lab/driver24/001module.html
ですかね?
こちらはカーネル2.4向けのページみたいですから、作成するモジュールの拡張子には気をつける必要がありますけど。
# 2.6からはカーネルモジュールの拡張子は.koになっているハズです。
# /lib/modules辺りに各バージョンのカーネルモジュールが入っているでしょうから覗いてみるとよいでしょう。

ちなみに……
特にインクルードファイルのディレクトリを指定しなかった場合、gccだと/usr/include辺りがデフォルトで指定されていたかと思われます。

http://okwave.jp/qa/q4149026.html

というワケで、/usr/src/linux-source-3.5.0/include/linuxへのシンボリックリンクを/usr/include/linuxに作成すると、指定なしでも参照してくれるかも知れません。
# が…/usr/includeとか不用意にいぢるのは避けた方が良いかと思われます。

投稿日時 - 2012-12-17 06:18:34

お礼

回答ありがとうございます。

Wr5さんにも言っていただいたことですが、シンボリックリンクについて助言していただきありがとうございます。

まだLinux環境でのプログラミングは初心者で、gccのデフォルトインクルードディレクトリも知りませんでした。

学ぶことがまだまだ多い状況ですが、すばやい回答本当に有難うございました。

投稿日時 - 2012-12-20 00:40:05

あなたにオススメの質問