【问题标题】:How to share same header files between kernel modules and userspace applications.如何在内核模块和用户空间应用程序之间共享相同的头文件。
【发布时间】:2015-06-14 13:54:17
【问题描述】:

我想实现一个使用ioctl() 方法的简单模块。在内核模块中,我使用内核宏,例如_IO()_IOWR()等,来定义自己的ioctl子命令。事实上,我并不关心这些定义的实际值,因为我将始终使用这些宏而不是实际值。

然而,当用户空间的程序员想要调用我的ioctl() 函数时,他们需要知道这些子命​​令的实际值或宏定义。

我想,在用户空间中,不会有_IO()_IOWR() 这样的宏定义,那么,如何将这些定义导出到用户空间供应用程序程序员使用。

【问题讨论】:

  • 查看Linux内核源码树中include/uapi文件夹的内容。

标签: linux-kernel macros linux-device-driver header-files ioctl


【解决方案1】:

_IO_IOWR(等等)宏也可以在用户空间的头文件中使用。可以先通过#include <linux/ioctl.h> 将定义拉入内核空间和用户空间源代码。

你应该将你的内核头文件分成两部分:(a) 那些只有内核代码需要的——struct 定义,源文件间声明,其他#includes,或者任何你觉得方便包含的东西用户空间不需要这些——以及(b)定义内核和用户空间之间接口的那些。后者将包含那些_IO* 定义,还可能包括用于将ioctls 中的信息从用户空间传输到内核的自定义结构定义。

然后你需要安排一个策略来在你的内核和用户空间代码之间共享定义接口的头文件。

【讨论】:

    猜你喜欢
    • 2012-03-02
    • 2011-12-16
    • 2018-06-08
    • 2016-08-14
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    相关资源
    最近更新 更多