我需要编写一个不是设备驱动程序的内核模块。该模块将与一些用户空间进程进行通信。因为我不想使用 ioctl(),所以我要么在 /proc 目录中创建一个文件,要么在 /dev 目录中创建一个设备文件。
问题:我如何在 /proc 和 /dev 之间做出决定。这只是一个判断电话,还是有任何关于使用这两者的不成文协议。
我需要编写一个不是设备驱动程序的内核模块。该模块将与一些用户空间进程进行通信。因为我不想使用 ioctl(),所以我要么在 /proc 目录中创建一个文件,要么在 /dev 目录中创建一个设备文件。
问题:我如何在 /proc 和 /dev 之间做出决定。这只是一个判断电话,还是有任何关于使用这两者的不成文协议。
将新接口添加到 /proc/ 中会遇到很大困难。内核开发人员不高兴它已成为各种接口的垃圾场,除非您实际上是通过 /proc/pid/ 修改有关进程的某些内容,否则我认为您将难以说服内核社区接受它。
/dev/ 中的设备文件可能是可接受的,即使对于不是真正的设备驱动程序的模块也是如此。(例如,/dev/kvm、/dev/pts、/dev/ecryptfs、/dev/fuse、/dev/kmsg、/dev/ptmx 等)但是,使用 ioctl( ),如果可以的话,我认为你是正确的。
内核圈子的当前趋势是 sysfs 或自定义文件系统。sysfs 方法基于每个文件的单值语义,旨在使用 echo 和 cat 进行操作。如果它对您有用,对用户来说非常棒。自定义文件系统让您可以编写非常具体的二进制接口,而 fs/libfs.c 应该可以帮助您根据自己的需要编写自己的文件系统。(我不认识任何使用过 configfs 的人,但我一直认为它看起来很整洁。也许它适合你的模块?)