1
我有一個內核模塊需要訪問內核的_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;
}
這是否意味着_etext
和_stext
條目我看到的是/proc/kallsyms
假的符號,內核模塊不能實際鏈接到?
啊 - 是的 - 我開始懷疑。至於我想要完成的工作,我正在使用設備NAND中其他人的2.6.37內核。對於我正在做的一些工作,我需要oprofile。他們沒有構建oprofile,也沒有包含像CONFIG_PROFILING這樣的許多依賴配置文件。 –
......我可以用他們的配置參數建立我自己的內核,但是把它放到NAND上似乎是一個問題。我也可以構建一個類似的內核,但是有一個模塊化的oprofile,但是內核中沒有許多依賴的依賴關係,並且依賴關係不易被模塊化。因此,對於我的工作,我一直在搗亂一個Frankenstein創建的oprofile模塊,並且內置了一些必要的依賴項。 –
哇,我的吊,,這只是一個令人沮喪的漫長的路要走,以獲得一些分析數據。祝你好運! – sarnold