【发布时间】:2017-05-06 10:51:21
【问题描述】:
我正在为 4.4 内核上的 MIPS 架构编译驱动程序。似乎编译器不包括
/linux-4.4.34/include/linux/types.h
但它包含
/linux-4.4.34/include/uapi/linux/types.h
因此,我看到以下错误。我没有在驱动程序 makefile 中包含路径 /linux-4.4.34/include/uapi。有人可以解释驱动程序如何包含路径 /include/linux 而不是 /include/uapi/linux 吗?
./arch/mips/include/asm/mipsregs.h:871:33: error: unknown type name 'u16'
【问题讨论】:
-
你能发布 /arch/mips/include/asm/mipsregs.h:871:33 的内容吗
-
对于在
include/uapi下包含一个标题,应该使用指令#include <uapi/..>。因此,不可能将此文件与非 uapi 文件混淆。至于u16类型,对于 mips,它的定义可以通过以下标头链访问:include/linux/types.h- >include/uapi/linux/types.h->arch/mips/include/asm/types.h->include/asm-generic/int-ll64.h。不知道为什么给定的定义在您的情况下不可用。请提供完整的错误消息(带有文件链,其中出现了错误)。 -
u16 类型从未被用户空间 (uapi) 包含的 Linux 头文件声明,而是使用用户空间使用 __u16。
-
@Tsyvarev,他们的 Makefile 和调用编译器的命令行可能是错误的。他们很可能正在尝试将其编译为(用户空间)应用程序。 u16 是 Linux 内核的内部类型。用户空间应该使用 __u16。
-
@anbu,上下文不够。
标签: c linux-kernel cross-compiling device