以下に基づいてkgdboeを構築しようとしています。地図時間。デフォルトのカーネルでは利用できないドライバが必要なため、更新されたカーネル5.9.0でUbuntu 20.04を実行しています。ヘッダー、モジュール、カーネルイメージの.debパッケージをダウンロードし、手動でインストールしてカーネルを更新しました。私のuname -r
出力はです5.9.0-050900-generic
。ビルドモジュールを使用しようとするとmake -C /lib/modules/$(uname -r)/build M=$(pwd)
エラーが発生します。
ERROR: modpost: "__module_address" [/home/ipc/Downloads/kgdboe/kgdboe.ko] undefined!
また、GITからLinuxカーネルソースツリー全体を手動でダウンロードし、5.9.0を確認しました。完全なソースツリーへのパスを使用してmakeコマンドでこのモジュールを作成すると、モジュールが構築されます。ただし、モジュールのマジックバージョンとuname -r出力が一致しないためmodprobe -f
。
私の質問は、なぜLinuxヘッダーでビルドできないのかということです。モジュールを構築するためのヘッダーフォルダを準備するためのいくつかのステップがありませんか?カーネルヘッダ用にこのモジュールをビルドする方法、またはuname -r
出力用のビルドモジュール(5.9.0)のバージョンマジックを更新する方法を見つけようとしています。
答え1
(編集がおかしくなってすみません)
KGBoEはLinuxカーネル> v5.7.0と互換性がありません(参照:協会)。 KGDBoEが正常に動作するためには、LinuxカーネルとKGDBoEソースコードを次のようにパッチする必要がありました。
- 最近のカーネルバージョンからエクスポートされていないカーネルの欠落しているシンボルを再エクスポートします。
diff --git a/kernel/kallsyms.cb/kernel/kallsyms.c
index 4fb15fa96734..4669f3cfb55b 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -176,6 +176,7 @@ unsigned long kallsyms_lookup_name(const char *name)
}
return module_kallsyms_lookup_name(name);
}
+EXPORT_SYMBOL_GPL(kallsyms_lookup_name);
int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
unsigned long),
diff --git a/kernel/module.c b/kernel/module.c
index 1c5cff34d9f2..cd07a842bdb2 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -4517,7 +4517,7 @@ struct module *__module_address(unsigned long addr)
}
return mod;
}
-
+EXPORT_SYMBOL_GPL(__module_address);
以下をコメントアウトして、KGDBoEモジュールパラメータkallsyms_lookup_name_addressを無効にします。
kgdboe_main.c ファイルから
//uint64_t kallsyms_lookup_name_address; //module_param(kallsyms_lookup_name_address、ullong、0444);
static int __init kgdboe_init(void) { // if (!kallsyms_lookup_name_address) // { // printk(KERN_ERR "kgdboe: このカーネルバージョンでは、 kallsyms_lookup_name のアドレスを明示的に指定する必要があります。 'kallsyms_lookup_name_します。insmodコマンド。 'Linen');
Tracewrapper.hファイルから:// extern uint64_t kallsyms_lookup_name_address; //#define kallsyms_lookup_name ((unsigned long(*)(const char *))kallsyms_lookup_name_address)