我开发了一个内核模块和一些功能。现在我需要在用户空间开发一个程序并调用内核模块中的一些函数。
我还需要在用户空间访问我的程序的内核模块中的一些全局变量。
我开发了一个内核模块和一些功能。现在我需要在用户空间开发一个程序并调用内核模块中的一些函数。
我还需要在用户空间访问我的程序的内核模块中的一些全局变量。
linux-kernel 模块和用户空间程序交互的完整概述http://wiki.tldp.org/kernel_user_space_howto “内核空间,用户空间接口”由 Ariane Keller (它来自 2008-09-28,但大约 2.6内核;唯一的主要新方法是relayfs)
没有列出从用户空间到内核空间的普通函数调用,只有 syscall(添加新的 syscall 并不容易)和 upcall(反向调用)。
最简单的接口之一是 ioctl;但在创建 procfs、sysfs 或类似文件之前,您不能开始使用 ioctl。
其他是 sysctl; 但 sysctl 更适合读取/写入全局变量。(很难通过 sysctl 接口传递多个参数)。
您似乎错过了内核和用户空间分离的重点。如果您的用户程序可以直接修改内核内部的数据,那将很快导致灾难。
用户程序只有一种传统方式可以显式地向内核请求服务 - make a system call
.
还有一些陷阱和一些特定于 Linux 的用户级内核通信机制,但这些与这里无关。
正如其他海报所提到的,内核空间和用户空间之间有明显的区别。所以不,你不能直接从用户空间调用内核函数。我认为在用户空间和内核空间之间发送消息的最简单方法是通过 netlink 套接字。netlink 套接字允许您轻松地在用户级别和内核级别之间传递任意数据结构。
是的 ioctl,系统调用是可行的替代方案,它们在传递任意信息方面不如 netlink 套接字灵活。
您需要安装一个新内核才能使用新调用,除非您已经有一些更新内核的机制... http://www.cyberciti.biz/tips/how-to-patch-running-linux -kernel.html