我是内核编译的新手,我正在尝试为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 ??)来摆脱这种混乱,但不知道如何。
答案 0 :(得分:1)
文件efuse.h
似乎包含mach/efuse.h
。但mach
仅在内核构建系统下定义。在用户空间交叉编译并不意味着什么。
您只需要包含具有ioclt编号的文件。如果是mach/efuse.h
,则仅将该文件包含为#include <path_to_file>
您应该能够识别您的mach
,这取决于您的董事会。