我正在研究一个智能手机项目。在编译过程中,它正在安装用于构建用户空间的内核头文件。
为什么用户空间应用程序需要内核头?
发布于 2015-04-27 07:25:01
通常,这些头是必需的,因为用户空间应用程序经常与内核对话,传递一些数据。要做到这一点,他们必须就他们之间传递的数据结构达成一致。
大多数内核头只需要libc库(如果使用的话),因为它通常通过提供符合POSIX等标准的抽象来向您隐藏所有低级的方面(它通常会提供自己的包含文件)。例如,这些头将提供所有syscall数字和它们的参数所使用的所有结构的定义。
但是,内核提供的一些“自定义服务”不是由libc处理的。一个例子是创建与某些硬件驱动程序直接对话的用户空间程序。这可能需要传递一些数据结构(所以您需要一些结构定义),知道一些神奇的数字(所以您需要一些定义),等等。
例如,从内核源代码中查看hid-example.c。例如,它将调用这个ioctl:
struct hidraw_report_descriptor rpt_desc;
[...]
ioctl(fd, HIDIOCGRDESC, &rpt_desc);但是它是从哪里得到HIDIOCGRDESC的,还是知道struct hidraw_report_descriptor的结构呢?它们当然是在这个应用程序包含的linux/hidraw.h中定义的。
https://stackoverflow.com/questions/29887930
复制相似问题