Доброго времени суток, коллеги.
В рамках курсовой работы по курсу «Операционные системы» в МИЭМ НИУ ВШЭ, я реализовал однонаправленный механизм взаимодействия между драйвером ядра Linux и приложением на Erlang/OTP: https://github.com/MIEMHSE/erlangio.
Механизм представляет из себя следующее: драйвер при загрузке создает два устройства (одно символьное misc, а второе — файл в procfs). При записи в /dev/erlangio данные сохраняются в массив, а затем отдаются при чтении /dev/erlangio или /proc/erlangio. Приложение на Erlang/OTP при запуске создает callback на действие закрытия файла по записи с помощью механизма inotify. При вызове callback'а, данные читаются из /proc/erlangio. Почему нельзя было обойтись одним misc-устройством? Потому что при попытке открытия устройства из /dev/ с использованием операции file:open/2, возвращается eisdir. По причине странной работы с файлами, из procfs приходится читать файл небольшим костылем.
И вот, собственно, вопрос. Пытаясь изначально реализовать обмен не через procfs или сокеты (а, допустим, с помощью mmap), столкнулся с тем, что не смог найти вменяемого IPC между, собственно, ядром и юзерспейсом, если не считать kdbus (оно уже в ядре?). Может кто подскажет чего-нибудь путного почитать на эту тему?
Спасибо.