У меня есть модуль ядра, который выделяет память, и я хотел бы поделиться этой памятью с пользовательским процессом. В обычном режиме мы можем делать это только с помощью: mmap,/proc, shmem и т. Д., Но в однопользовательском режиме для встроенных устройств нет способа поделиться простым указателем?Обмен памятью из ядра linux в пользовательское пространство в однопользовательском режиме
ответ
"Единый пользовательский режим" является соглашением определяется пользовательским приложением. Это не имеет никакого значения для ядра; все те же правила применяются как «нормальный режим».
Если вы хотите получить доступ к памяти - любая память - из пользовательского пространства вам необходимо каким-то образом отобразить эту память в процессе. Использование mmap()
на специальном файле или устройстве - самый естественный способ сделать это.
Файловая система pseudo sysfs (/sys
) предназначена для этой цели (выведите данные ядра в пользовательское пространство). Вы также можете записать эти структуры данных из пользовательского пространства.
Заканчивать Greg Kroah-Hartman's Driver Tutorial
Read SysFS Documentation
Спасибо за информацию, я вижу, что sysfs похож на ramfs, что именно то, что я ищу! –
@PhilBouchard Ты уверен? sysfs не имеет ничего общего с ramfs, кроме того, что они являются файловыми системами. – duskwuff
Я имел в виду, что sysfs можно читать как ramfs (прямой доступ к памяти) –
Я думаю, что режим одиночного пользователя должен отключать эти правила доступа, потому что никто не заботится о многопользовательских режимах во встроенных устройствах. –
@PhilBouchard К сожалению, вы сами в этом думаете. Защита памяти столь же важна во встроенных устройствах, как и в других местах. – duskwuff
Если вы тщательно протестировали свои процессы, и вы «доверяете им», то я думаю, что должен быть способ напрямую поговорить с ядром и делать все, что вы хотите (для встроенных устройств, конечно, конечно). –