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

Linux kernel 如何在内核模块和用户空间应用程序之间共享相同的头文件。,linux-kernel,macros,linux-device-driver,header-files,ioctl,Linux Kernel,Macros,Linux Device Driver,Header Files,Ioctl,我想实现一个简单的模块,其中使用了ioctl()方法。在内核模块中,我使用内核宏,例如\u IO(),\u IOWR()等,来定义我自己的ioctl子命令。事实上,我并不关心这些定义的实际值,因为我将始终使用这些宏而不是实际值 然而,当用户空间中的程序员想要调用myioctl()函数时,他们需要知道这些子命令的实际值或宏定义 我想,在用户空间中,它不会是这样的\u IO(),\u IOWR()宏定义,因此,如何将这些定义导出到应用程序程序员的用户空间中。\u IO和\u IOWR(等等)宏也可以

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

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


我想,在用户空间中,它不会是这样的
\u IO()
\u IOWR()
宏定义,因此,如何将这些定义导出到应用程序程序员的用户空间中。
\u IO
\u IOWR
(等等)宏也可以在用户空间头中使用。定义可以通过#包括
首先拉入内核空间和用户空间源代码

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


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

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