如何在内核模块和用户空间应用程序之间共享相同的头文件。

时间:2015-06-14 13:54:18

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

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

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

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

1 个答案:

答案 0 :(得分:0)

用户空间标头中也提供了_IO_IOWR(等等)宏。可以通过首先#including <linux/ioctl.h>将定义拉入内核空间和用户空间源。

您应该将内核头文件分成两部分:(a)仅由内核代码所需的内容 - struct定义,源间文件声明,其他#includes或其他任何您认为方便的内容包含用户空间不需要的那些 - 以及(b)定义内核和用户空间之间接口的那些。后者将包含那些_IO*定义,还可能包含用于将ioctl中的信息从用户空间传输到内核的自定义结构定义。

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