3

ボックスで 3.4.7 カーネルを実行し、独自のカーネル モジュールを作成しています。そのうちの 1 つは他のモジュールの関数を呼び出す必要があります。

EXPORT_SYMBOL を使用して、他のカーネル モジュールから関数にアクセスできるようにしました。私の場合、私のモジュール「klm_sse」がこれを行います。

ここで、「klm_sse」によってエクスポートされたシンボルを使用する別のモジュールをロードしますが、ロードすると次のように文句を言います:

[22892.216551] klm_<...>: Unknown symbol sys_srv_register_multiple (err 0)

「cat /proc/kallsyms |」の出力は次のとおりです。ここで、klm_sse はモジュール名です。

ffffffffa013d170 r __ksymtab_sys_srv_register_multiple  [klm_sse]
ffffffffa013d28b r __kstrtab_sys_srv_register_multiple  [klm_sse]
ffffffffa012e9b0 t sys_srv_register_multiple    [klm_sse]

「man」ページから、/proc/kallsyms のエントリに小文字 (ここでは「r」と「t」) が表示されている場合、シンボルがグローバルにエクスポートされていないことを意味することを読みました。

エクスポートをグローバルに表示して、他のユーザーがアクセスできるようにするにはどうすればよいですか?

これを修正するために必要なのはカーネル コンパイル オプションですか? これに関するご意見をお寄せいただきありがとうございます。私は文字通り、これについて 2 日間頭を悩ませています。

何百万も前もって感謝します

4

0 に答える 0