我在一个USB ACM驱动程序中工作,“我需要从内核空间向用户空间应用程序发送通知,以便调用回调函数”。我不太了解在代码中使用内核到用户界面。在这种情况下,sysfs能提供多大的帮助。请发送一些示例代码来使用sysfs,这样我就可以在我的代码中获得一个实现的想法。我到处都找不到它。此外,请告诉任何其他简单的方式实现内核到用户空间的通知。提前谢谢。
发布于 2015-08-05 04:01:59
我的建议是创建一个到用户空间可以访问的内核驱动程序的sysfs接口。如果使用正确的属性创建,则可以像从用户空间读取文件一样读取每个sysfs属性。然后,您可以在用户空间中使用poll函数来轮询该文件上的操作。要从内核空间触发此操作,您可以在您的属性上使用sysfs_notify函数,它将唤醒您的用户空间代码。下面是我会怎么做
内核1.创建Kobject或将属性附加到以前的kobject 2.当您想向用户空间发出信号时,在kobject和属性上调用sysfs_notify
用户空间
从该线程中创建一个新线程,该线程将在等待sysfs_notify
发布于 2018-10-14 23:25:25
另一种选择是使用eventfd。您创建eventfd,将整数文件描述符传递到内核空间(例如,通过sysfs或ioctl),然后将您从用户空间获得的文件描述符转换为内核空间中的eventfd_ctx。这就是它-您有您的通知通道。
用户空间
#include <sys/eventfd.h>
int efd = eventfd(0, 0);
// pass 'efd' to kernel space内核空间
#include <linux/eventfd.h>
// Set up
int efd = /* get from user space - sysfs/ioctl/write/... */;
struct eventfd_ctx* efd_ctx = eventfd_ctx_fdget(efd);
// Signal user space
eventfd_signal(efd_ctx, 1);
// Tear down
eventfd_ctx_put(efd_ctx);https://stackoverflow.com/questions/31761579
复制相似问题