我正在研究智能手机项目。在编译过程中,它为用户空间构建安装了内核头文件。
为什么用户空间应用需要内核头文件?
答案 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
中定义,包括此应用程序。