Всем привет.
Нарыл, что есть модуль ядра, обеспечивающий пользовательский режим доступа к участку памяти с 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)
В чем ошибка - не понимаю. Бьюсь уже не первый день, прошу помощи.