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

时间:2015-03-11 21:01:32

标签: linux-kernel linux-device-driver cross-compiling embedded-linux

我是内核编译的新手,我正在尝试为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
....

当我尝试编译用户空间代码时,我陷入了一个包含&#39; include&#39;文件问题。内核源代码驻留在/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.

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

我相信我必须使用内核的配置文件(Makefile ??)来摆脱这种混乱,但不知道如何。

1 个答案:

答案 0 :(得分:1)

文件efuse.h似乎包含mach/efuse.h。但mach仅在内核构建系统下定义。在用户空间交叉编译并不意味着什么。

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

您应该能够识别您的mach,这取决于您的董事会。