How to communicate with a Linux kernel module from user space without littering /dev with new nodes?

╄→尐↘猪︶ㄣ 提交于 2019-11-30 03:57:27

Netlink sockets are designed for that kind of requirements, too...

Also see

There's also the /sys filesystem (sysfs):

Sysfs exports information about devices and drivers from the kernel device model to userspace, and is also used for configuration.

(from Wikipedia)

You could also read/write from /dev device nodes.

IMHO, /dev is already littered with stuff and adding your own nodes there isn't a big issue. Don't forget that you can have lots of ioctl codes for a single device node, and the ioctl paramters are passed by reference so can be as big as you like.

Third one is add a new syscall, but the two you have written are the preferred ones, I think. I've found this document that might help, but I still think this option is unadvised: http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_add_systemcall.html

Another acceptable option might be sharing memory.

obayhan

You could also use Shared Memory and IOCTL

debugfs is another good possibility for APIs that are less stable than sysfs, but the API is basically the same. Here is a minimal runnable example.

configfs is another one. It allows easy dynamic creation of kernel objects from userspace through the filesystem: https://www.kernel.org/doc/Documentation/filesystems/configfs/configfs.txt

In any case, you will have to dirty some namespace... a filesystem entry in case of sysfs and debugfs. Just choose your poison.

Also, udev rules make /dev very similar to sysfs and debugfs: How to create a device in /dev automatically upon loading of the kernel module for a device driver?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!