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
子命令。事实上,我并不关心这些定义的实际值,因为我将始终使用这些宏而不是实际值
然而,当用户空间中的程序员想要调用myioctl()
函数时,他们需要知道这些子命令的实际值或宏定义
我想,在用户空间中,它不会是这样的
\u IO()
,\u IOWR()
宏定义,因此,如何将这些定义导出到应用程序程序员的用户空间中。\u IO
和\u IOWR
(等等)宏也可以在用户空间头中使用。定义可以通过#包括
首先拉入内核空间和用户空间源代码
您应该将内核头文件分为两部分:(a)仅由内核代码所需的部分--struct
定义、源文件间声明、其他#includes,或用户空间不需要的任何其他文件--(b)那些定义内核和用户空间之间接口的。后者将包含那些\u IO*
定义,还可能包括用于将ioctl
中的信息从用户空间传输到内核的自定义结构定义
然后,您需要安排一种策略,在内核和用户空间代码之间共享接口定义头文件。检查Linux内核源代码树中
include/uapi
文件夹的内容。