#linux-kernel
#linux-ядро
Вопрос:
когда я пытаюсь загрузить свой модуль ядра Linux, я получаю сообщение об ошибке с неопределенным символом (очевидно, я получаю предупреждение во время создания). В частности, мне нужно использовать макрос pgd_offset_k
в моем модуле (определенный в asm / pgtable.h). Это расширено в pgd_offset(amp;init_mm, (address))
. Неопределенный символ является init_mm
. Я также проверил его наличие в / proc / kallsyms:
$ cat /proc/kallsyms |grep -w init_mm
c07d49a0 D init_mm
Есть идеи?
Ответ №1:
init_mm
не экспортируется после 2.6.29 на том основании, что никакой код вне дерева не должен его использовать. Вы не можете обойтись без pgd_offset_k
?
Комментарии:
1. Возможно, есть способ, но я его не знаю … я пытаюсь провести несколько экспериментов с виртуальным -> физическим адресом translation…in в частности, я бы преобразовал адрес, возвращенный из вызова ioremap, в физический адрес… это преобразование должно дать мне адрес, переданный в ioremap (я надеюсь :)). Как я могу выполнить это преобразование без pgd_offset_k? Я думаю, что я не могу использовать virt_to_phys, потому что этот адрес не является логическим адресом, верно?