是否可以从Linux(ioctl)中的内核空间调用用户空间回调函数?

Mak*_*kis 8 kernel ioctl linux-device-driver linux-kernel

是否有可能在Linux中扩展ioctl接口,以便用户空间应用程序可以向内核空间驱动程序发送指向函数的指针?

我特别想到了以用户可控方式处理流的方法,但是在内核中进行处理.这些操作可以附加到内核模块,但这会使开发变得更容易,因为我不需要在开发期间搞乱内核.

更具体地说,这将是一个过程:

  1. 驱动程序将数据读取到缓冲区.
  2. 数据由这些用户定义的函数处理.
  3. 进行了一些处理,可能还有一些HW块.
  4. 数据由用户空间应用程序使用.

hlo*_*dal 8

我认为您可以通过让驱动程序提供用户空间应用程序打开的一个或多个角色设备(或块设备)来实现您的目标.

然后你可以使用inotify(linux期刊文章)进行内核 - >用户空间事件通信.Ioctl或写入设备以进行用户空间 - >内核事件通信.还可以通过读/写一个或多个设备文件来实现数据交换.

或者,您可以提供/ proc或/ sys文件系统条目或使用netlink.

您可能还会考虑ksocket:

Ksocket是一个linux 2.6内核模块,为内核开发人员提供bsd风格的套接字接口(即套接字,绑定,监听,连接,接受等),以方便他们在Linux内核空间中进行网络编码.接口ksocket存在与glibc中的等效接口大致相同,因此即使是内核空间的新开发人员也无法开发与内核网络相关的程序.