私は、カーネルの_stext
と_etext
のシンボルにアクセスする必要があるカーネルモジュールを持っています。カーネルはこれらのシンボル(/proc/kallsyms
)の定義を持っているにもかかわらず、何らかの理由、私は私のモジュールをロードするたびに、私は2.6 Linuxカーネルの_stextと_etext - カーネルモジュールがそれらにリンクできないのはなぜですか?
mymodule: Unknown symbol _etext (err 0)
mymodule: Unknown symbol _stext (err 0)
を得るために私は汚染されたカーネルを実行していないよ、とモジュール内の他のすべてがOKをリンクするようです。 _stext
と_etext
へのリンクに関するモジュールまたはライセンスの制限はありますか?カーネルには、コードメモリの先頭と末尾に使用できる代替定義がありますか?
更新:
私はカーネルのソースを見て、そしてkallsyms.c
で、これはありますよ。
static int read_symbol_tr(const char *sym, unsigned long long addr)
{
size_t i;
struct text_range *tr;
for (i = 0; i < ARRAY_SIZE(text_ranges); ++i) {
tr = &text_ranges[i];
if (strcmp(sym, tr->stext) == 0) {
tr->start = addr;
return 0;
} else if (strcmp(sym, tr->etext) == 0) {
tr->end = addr;
return 0;
}
}
return 1;
}
が、これは私が/proc/kallsyms
を見ている_etext
と_stext
エントリがあることを意味していますカーネルモジュールが実際にリンクできない偽のシンボル?
ああ - はい - 私はそれほど疑わしいようになりました。私が達成しようとしているものとして、私は2.6.37カーネルを他の誰かがデバイスNANDに組み込んで作業しています。私がやっている作業の中には、oprofileが必要です。 oprofileを構築したり、CONFIG_PROFILINGのようなoprofileの依存関係の多くを含んでいませんでした。 –
...自分のカーネルを設定パラメータでビルドすることはできますが、NANDに取り込むことは問題になります。同様のカーネルをモジュール化されたoprofileで構築することもできますが、カーネルにはoprofileの依存関係が多くなく、依存関係を簡単にモジュール化することはできません。だから私の仕事のために、フランケンシュタイン作成のoprofileモジュールをハッキングしています。 –
うわー、私の哀悼の言葉は、ちょうどプロファイリングデータを取得するための挫折の長い道のりです。がんばろう! – sarnold