Linux: 编译用于处理驱动程序的 ioctl 的用户空间代码

Linux: Compiling userspace code for handling driver's ioctl

我是内核编译的新手,正在尝试为 ARM 板的现有内核驱动程序交叉编译用户空间程序。基本上,我正在尝试访问驱动程序的 ioctl 设施。

我正在使用 arm-linux-gnueabihf-gcc (4.9.2)。

我可以成功编译内核。用户空间代码如下所示

getefuse.c

#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <sys/ioctl.h> 
#include <linux/amlogic/efuse.h> //The driver's header file
....

当我尝试编译用户空间代码时,我陷入了 'include' 文件问题的漩涡中。内核源代码位于 /home/cheema/boards/linux/

$ arm-linux-gnueabihf-gcc -I/home/cheema/boards/linux/include getefuse.c
In file included from getefuse.c:7:0:
/home/cheema/boards/linux/include/linux/amlogic/efuse.h:5:24: fatal   error: mach/efuse.h: No such file or directory
#include <mach/efuse.h>
                    ^
compilation terminated.

我尝试添加缺少的 'include' 文件路径。但是每次我添加另一个文件路径时,编译器都会为不同的文件提供 No such file or directory 错误。

我相信我必须使用内核的配置文件(Makefile??)来解决这个问题,但不知道如何。

看起来文件 efuse.h 包含 mach/efuse.h。但是 mach 仅在内核构建系统下定义。它对 user-space.

处的交叉编译器没有任何意义

您只需包含具有 ioclt 编号的文件。如果是 mach/efuse.h,则只包含该文件作为 #include <path_to_file>

您应该能够识别您的 mach,这取决于您的主板。