为什么用户空间应用需要内核头文件?

时间:2015-04-27 05:34:42

标签: linux-kernel smartphone

我正在研究智能手机项目。在编译过程中,它为用户空间构建安装了内核头文件。

为什么用户空间应用需要内核头文件?

1 个答案:

答案 0 :(得分:4)

通常,需要这些标头,因为用户空间应用程序经常与内核通信,传递一些数据。要做到这一点,他们必须就他们之间传递的数据结构达成一致。

libc库只需要大多数内核头文件(如果你正在使用它),因为它通常会提供符合某些标准(如POSIX)的抽象隐藏所有低级方面(它通常会提供它拥有包含文件)。例如,这些标题将提供其参数使用的所有结构的所有系统调用号和定义。

然而,一些"定制服务"由libc处理的内核提供的。一个例子是创建直接与某些硬件驱动程序通信的用户空间程序。这可能需要传递一些数据结构(所以你需要一些结构定义),知道一些神奇的数字(所以你需要一些定义)等等。

作为示例,请查看内核源代码中的hid-example.c。例如,它将调用此ioctl:

struct hidraw_report_descriptor rpt_desc;
[...]
ioctl(fd, HIDIOCGRDESC, &rpt_desc);

但它在哪里得到HIDIOCGRDESC或知道struct hidraw_report_descriptor的结构?它们当然在linux/hidraw.h中定义,包括此应用程序。