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
,这取决于您的主板。
我是内核编译的新手,正在尝试为 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
,这取决于您的主板。