Драйвер Linux phys_mem_access_prot не определен

У меня есть загружаемый модуль, который выдает предупреждение о phys_mem_access_prot при сборке под Ubuntu 9.10 (Linux 2.6.31-22-сервер).

[664] make -C /lib/modules/`uname -r`/build M=`pwd` 
make: Entering directory `/usr/src/linux-headers-2.6.31-22-server'
  LD      /home/chuck/dev/svd/built-in.o
  CC [M]  /home/chuck/dev/svd/svd.o
  LD [M]  /home/chuck/dev/svd/svd_drv.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "phys_mem_access_prot" [/home/chuck/dev/svd/svd_drv.ko] undefined!
  CC      /home/chuck/dev/svd/svd_drv.mod.o
  LD [M]  /home/chuck/dev/svd/svd_drv.ko
make: Leaving directory `/usr/src/linux-headers-2.6.31-22-server'

Функция отображается в файле System.map-2.6.31-22-server.

[667] grep phys_mem_access_prot /boot/System.map-2.6.31-22-server 
ffffffff8103fb40 T phys_mem_access_prot
ffffffff8103fb50 T phys_mem_access_prot_allowed

и драйвер загружается, поэтому я не понимаю, почему modpost недоволен. Это проблема, потому что ядро ​​​​не экспортирует функцию с EXPORT_SYMBOL()?


person ctuffli    schedule 16.06.2010    source источник


Ответы (1)


Вы сами ответили на свой вопрос! Любая функция ядра, используемая модулем, должна быть экспортирована одним из различных макросов EXPORT_SYMBOL().

Вы также столкнетесь с проблемами, если модулям без GPL потребуется использовать функции, экспортированные по EXPORT_SYMBOL_GPL.

person stsquad    schedule 17.06.2010
comment
Спасибо за подтверждение! То, как LDD объяснил EXPORT_SYMBOL, я не был уверен, применяется ли только модуль → ядро ​​или применяются оба способа. - person ctuffli; 17.06.2010