2

カーネルモジュールからカーネルリングバッファーを単純に読み取ろうとしています。/proc/kmsg および dmesg 出力とも呼ばれます。

周りを見回すと、これの呼び出しは sys_syslog(); のようです。私が読んだことから、dmesgはprintk.cにあるdo_syslog()を使用するsyslog()を使用します。

grep を実行すると、do_syslog() が linux/syslog.h で定義されていることがわかったので、このファイルを含めます。

テスト モジュールでの do_syslog() の実際の呼び出しは次のようになります。

read_bytes = do_syslog(2, temp_buffer, 1024, 0);

temp_buffer は、テスト用の単なる char temp_buffer[1024] です。

プログラムはコンパイルされますが、モジュールをロードしようとすると失敗します:

insmod: 'testing.ko' の挿入エラー: -1 モジュール内の不明なシンボル

dmesg から、「不明なシンボル do_syslog (err 0)」が表示されます。

なぜこれは未知のシンボルなのですか? 何かに対してリンクする必要がありますか?

メイクファイルは次のとおりです。

obj-m += testing.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
4

1 に答える 1