LINUX.ORG.RU

Сборка модуля gpiomem для mips arch

 , ,


0

1

Всем привет.

Нарыл, что есть модуль ядра, обеспечивающий пользовательский режим доступа к участку памяти с GPIO-регистрами. Работает аналогично /dev/mem, но отображает только одну страницу памяти и не требует прав root:

https://github.com/raspberrypi/linux/commit/825010a8ee015e0b7876cbcb90a82b3d2...

Модуль написан для архитектуры arm, мне же нужна архитектура mips. Связавшись с автором, выяснил, что код может быть скомпилирован и для mips, нужно только поправить адреса размещения регистров в памяти. С этим проблем не возникло.

Для сборки использовал toolchain openwrt 18.06.0. Ядро 4.9.111. В время компиляции модуля вылезла ошибка:

implicit declaration of function 'phys_mem_access_prot'; did you mean 'phys_mem_access_prot_allowed'? [-Werror=implicit-function-declaration]

Функция 'phys_mem_access_prot' объявляется и определяется в файле drivers/char/mem.c, который вроде как подключается к ядру на этапе сборки. В конфиге ядра:

CONFIG_DEVMEM=y

CONFIG_DEVKMEM=y

Если я объявляю (без определения) функцию 'phys_mem_access_prot' в исходнике модуля gpiomem, то компиляция проходит успешно, но модуль не загружается:

#modprobe gpiomem

1 module could not be probed

- gpiomem

в логе dmesg:

gpiomem: Unknown symbol phys_mem_access_prot (err 0)

В чем ошибка - не понимаю. Бьюсь уже не первый день, прошу помощи.

Ответ на: комментарий от senswet

править drivers/char/mem.c

как минимум убрать static, а там еще что-то про экспорт наружу какой-то макрос кажется был, я забыл уже.

sergej ★★★★★
()
Ответ на: комментарий от sergej

Или определить ее в исходнике модуля?

senswet
() автор топика

Нарыл, что есть модуль ядра, обеспечивающий пользовательский режим доступа к участку памяти с GPIO-регистрами.

кстати, буть готов к тому что работает это через ж.пу с непредсказуемым результатом если есть драйверы использующие GPIO из диапазона который ты смапишь для юзера

anonymous
()
Ответ на: комментарий от anonymous

для мипсов эта функция не экспортируется, замени на pgprot_noncached()

Сделал. Модуль скомпилировался и загрузился, но устройства /dev/gpiomem как не было, так и нет. Буду копать дальше.

senswet
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.