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

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

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

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

>数据由驱动程序读取到缓冲区.
>数据由这些用户定义的函数处理.
>完成了一些处理,可能还有一些HW块.
>数据由用户空间应用程序使用.

解决方法

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

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

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

您可能还会考虑ksocket

Ksocket is a linux 2.6 kernel module that provides bsd-style socket interfaces (namely socket,bind,listen,connect,accept,…) for kernel developers to facilitate their network progaramming in linux kernel space. The interfaces ksocket presents are much the same as their equivalent in glibc,so even new developers for kernel space will have no barrier in developing kernel network-related programms.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...