Linux kernel 对于用户程序和Linux内核模块之间的通信,我们有哪些选项?
我是Linux内核模块编程的新手。从我到目前为止阅读的材料中,我发现用户程序有3种方式来请求服务或与Linux内核模块通信Linux kernel 对于用户程序和Linux内核模块之间的通信,我们有哪些选项?,linux-kernel,linux-device-driver,kernel-module,Linux Kernel,Linux Device Driver,Kernel Module,我是Linux内核模块编程的新手。从我到目前为止阅读的材料中,我发现用户程序有3种方式来请求服务或与Linux内核模块通信 /dev中的设备文件 /proc文件系统中的文件 ioctl()调用 问:对于用户程序和linux内核模块之间的通信,我们还有哪些其他选项?您的选项3)实际上是选项1的子选项)ioctl()是与设备文件交互的一种方式(read()和write()是常用方式) 另外两种值得考虑的方法是: sysfs文件系统 网络链接套接字 基本上,可以使用许多标准IPC机构-cf.: 文件
read()
和write()
是常用方式)
另外两种值得考虑的方法是:
文件系统李>sysfs
- 网络链接套接字
- git://git.netfilter.org/libmnl (用户空间端)
- net/core/rtnetlink.c(基本netlink)
- net/netfilter/nf_conntrack_netlink.c(nfnetlink)
- fs/quota/netlink.c(genetlink)
,Procfs
,以及类似的机制。这还包括sysfs
条目,以及内核空间在用户空间中公开文件的所有方法(/proc、/dev等。条目基本上是从内核空间公开的文件)/dev
- 基于套接字的机制
是一种套接字,专门用于用户空间和内核空间之间的通信Netlink
系统调用
。内核在用户空间中执行代码。例如,生成一个新进程向上调用
-将内核内存区域映射到用户空间的内存。这允许内核和用户空间读/写相同的内存区域mmap
。用户空间可以引发中断来与内核空间通信。例如,一些CPU使用中断
进行系统调用(而其他CPU可能使用不同的机制,如int80
指令)。内核必须预先定义相应的中断处理程序syscall
-这些是Linux内核中优化某些系统调用执行的机制。其思想是拥有一个共享内存区域,当进程进行系统调用时,用户空间库从该区域获取数据,而不是实际调用相应的系统调用。这节省了上下文切换开销vDSO/vsyscall
- 文件操作:
- :
- 。另见:
- 。另见:
- 。另见:
-
- 。另见:
- 。另见:
- 。另见:
- 。另见:
- 。另见:
- :
- 。另见:
- 这包括所有类型和示例:)
给出了内核和用户空间可以交互(通信)的一些方式。它们如下
poll
ask at:Your right该链接包含很多有用的信息,但链接不是答案。请看哪一个解释了为什么普通链接不是SO想要的。我回答了你的“用户程序和linux内核模块之间的通信还有哪些其他选项?”,这是问题的一部分。如果你问了其他选项以及它们是如何工作的,我会写几页关于它们的,我之所以给你这个链接,是因为它有工作示例,我认为这是不言自明的。正如stackoverflow页面所解释的,指向外部页面的链接可能是暂时的。如果“链接到”页面消失,答案会突然变得无用。没有人建议你需要写一篇文章,但是总结一下选项会让它成为一个更有用的答案。这是一个死链接。@Qeek学术页面是最容易断开的:-)这里有一堆永远不会断开的GitHub+堆栈交换链接: