Загрузка LKM приводит к ошибке неопределенного символа

#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, потому что этот адрес не является логическим адресом, верно?