
こんばんは、自分は今LKMの分割コンパイルに挑戦しています。
以下のようなファイルを作成して、モジュールを作ってみました。
[Makefile]
obj-m:= message.o
message-objs:= message.o sample_func.o
KDIR:= /lib/modules/$(shell uname -r)/build
PWD:= $(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.o *.ko *.symvers *~ *.mod.c
[message.c]
#include <linux/module.h>
#include <linux/kernel.h>
#include "sample_func.h"
static char *msg = "[message.o]:";
static int message_module(void)
{
printk(KERN_INFO "%s loaded\n",msg);
printk(KERN_INFO "%s %d\n", msg, sample_add(2,3));
return 0;
}
static void message_remove(void)
{
printk(KERN_INFO "%s removed\n", msg);
}
module_init(message_module);
module_exit(message_remove);
[sample_func.c]
#include "sample_func.h"
static int inner_add(int,int);
int sample_add(int a, int b)
{
return inner_add(a,b);
}
static int inner_add(int a, int b)
{
return a+b;
}
[sample_func.h]
int sample_add(int,int);
コンパイルは正しく通るようなのですが、/var/log/messages に何も出力がありません。
(KERN_INFOを指定しているので/var/log/messagesに出力されると思っているのですが。。。)
lsmodで確認したところ、モジュールはカーネル内に正常に組み込まれているようでした。
どなたか解決方法をご存知の方教えていただけないでしょうか。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは。
前回と同じ回答になってしまいますが、
もう少し名前の付け方を工夫された方が良いかと。
obj-m <= lsmodするモジュール名を指定
(モジュール名)-objs <= モジュールを構成するオブジェクトファイル(ソース)を指定
のような感じになるので、
> obj-m := message.o
> message-objs := message.o sample_func.o
だと、message.ko は messege.c のみから構成されて sample_func.c がリンクされていない状況だと思います。
作りたいモジュールを message.ko だとするならば、
obj-m := message.o
message-objs := message-main.o sample_func.o
のようにして、message-main.c と sample_func.c を作るのが良いかと。
逆に、カーネルモジュールの名前を変更して、
obj-m := msg.o
msg-objs := message.o sample_func.o
のようにしても良いかと思います。
前回に続いて今回もお答えいただきありがとうございました。
この方法で無事に実行することができました。
ネーミングでひっかかってることに気がつかなかったので、
名前の付け方をもう一度見直そうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows11 デバイスセキュリテ...
-
SolarisとLinuxの違い
-
Linuxの頻繁なバージョンアップ...
-
Debian テスト版からsarge版へ...
-
UNIXとBSDとLinuxの違いを小学...
-
IDE-SATAアダプタを使ったUbunt...
-
OS選択時のGRUBに関して質問が...
-
エラー”Illegal seek”はどんな...
-
カーネルバッファとは何でしょうか
-
パフォーマンスモニタの%Proces...
-
パソコンでゲームをプレイしよ...
-
1枚でも「1枚”組”」なのですか?
-
OS再インストール前にブルーバ...
-
ubuntu8.0.4にopenssl-develを...
-
phpでmb関数が使えない
-
Apacheとtomcatの削除
-
「クラスが登録されていません 」
-
外部レポジトリとは
-
Debianにpstreeをインストール...
-
LinuxのOS(CentOS6.10)のイン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows11 デバイスセキュリテ...
-
SolarisとLinuxの違い
-
カーネルバッファとは何でしょうか
-
パフォーマンスモニタの%Proces...
-
デュアルCPUのマシンにRedHat9...
-
/dev/nvme0n1p2 clean と表示さ...
-
フェイクRAIDとソフトウェアRAI...
-
カーネルアップグレード後、una...
-
Windows Vistaは本当にゴミOSな...
-
Linuxって何?
-
Dockerコンテナ(centos7.9)の...
-
エラー”Illegal seek”はどんな...
-
最近、よくOpenWall という言葉...
-
HP-UX(11.23)からDAT装置を認識...
-
違いを教えください!!
-
OSの中身
-
CentOS6 の画面サイズの設定
-
デュアルコアCPUをシングルにし...
-
割り込み不可能?なプロセスを...
-
unix と lynux の違い、そして...
おすすめ情報