У меня есть модуль ядра, который должен иметь доступ к символам _stext
и _etext
ядра.По какой-то причине, даже если в ядре есть определения для этих символов (/proc/kallsyms
), всякий раз, когда я загружаю свой модуль, я получаю
mymodule: Unknown symbol _etext (err 0)
mymodule: Unknown symbol _stext (err 0)
Я не запускаю испорченное ядро, а все остальное в модулекажется, что ссылка в порядке.Существуют ли ограничения по модулю или лицензии для ссылок на _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
, являются поддельными символами, на которые модуль ядра не может на самом деле ссылаться?