当前位置:  开发笔记 > 运维 > 正文

我们对用户程序和Linux内核模块之间的通信有什么选择?

如何解决《我们对用户程序和Linux内核模块之间的通信有什么选择?》经验,为你挑选了2个好方法。

我是Linux内核模块编程的新手.从我到目前为止阅读的材料中,我发现用户程序有3种方式来请求服务或与Linux内核模块通信

    / dev中的设备文件

    / proc文件系统中的文件

    ioctl()调用

问题:我们还有哪些其他选项可用于用户程序和Linux内核模块之间的通信?



1> caf..:

您的选项3)实际上是选项1)的子选项 - ioctl()是与设备文件交互的一种方式(read()并且write()是通常的方式).

另外两个值得考虑的方法是:

sysfs文件系统;

Netlink套接字.



2> user502515..:

基本上,许多标准IPC机制 - 参见 http://en.wikipedia.org/wiki/Inter-process_communication - 可以使用:

    文件和内存映射文件:设备文件(如上所述)或/ dev,procfs,sysfs,debugfs或您自己的文件系统中的类似特殊文件,具有读/写,ioctl,mmap的笛卡尔积

    可能是信号(用于kthread)

    套接字:使用选择的协议:TCP,UDP(参见knfsd,但可能不太容易),PF_LOCAL或Netlink(许多子接口 - 基本netlink,genetlink,Connector,...)

此外,

 4. 系统调用(虽然模块不是真的可用)

 5. 网络接口(类似于tun).

Netlink的工作示例 - 仅举几例 - 可以在例如中找到

git://git.netfilter.org/libmnl(userspace side)

net/core/rtnetlink.c(base netlink)

net/netfilter/nf_conntrack_netlink.c(nfnetlink)

fs/quota/netlink.c(genetlink)

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有