サンプルの hello.ko カーネル モジュールを作成しました。
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world.\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
ここでは、Linux が公開しているカーネル API である「printk」メソッドを使用しました。「/proc/kallsyms」に Linux でエクスポートされたシンボルが表示されます。gcc/ld が呼び出されたカーネル API をどのようにリンクするのか知りたいです。gcc/ld は「/proc/kallsyms」などのファイルからカーネル メソッドのアドレスを取得し、リンクを実行しますか? はいの場合、gcc/ld はどのようにしてそれを知ることができますか? それを伝えるオプションはありませんでした。