【发布时间】:2012-12-06 12:01:56
【问题描述】:
我正在尝试为基于 arm 的板交叉编译驱动程序。在 make 文件中,包含文件的搜索路径是主机内核的路径,即它指向 ubuntu 附带的 linux 头文件。 我在主机系统(i7/ubuntu)上也有目标板的内核源代码树。 我的问题是交叉编译需要哪个包含路径(本机系统的 linux 头文件路径或板的内核源代码树的路径? 是否同样适用于所有模块,包括驱动程序?
【问题讨论】:
-
它应该指向主板的内核源代码树。这是因为您正在编译的驱动程序的包含文件可能需要基于平台的头文件。例如。如果您为 ARM 进行交叉编译,则包含文件应该指向 arch/arm/include 而不是通用的 linux 包含文件夹。
-
当我使用板的包含文件时,我得到很多文件丢失的错误。当我使用主机的包含文件(运行 ubuntu 12.04)时没有错误,但驱动程序(模块)以与板不兼容的无效格式编译。在这两种情况下,我都使用供应商提供的工具链中的 arm-linux-gcc 编译器。
-
当您说“驱动程序以无效格式编译”时,究竟是什么错误?你能详细说明一下吗?如果编译正常,是模块插入过程中显示的错误吗?
-
yes 编译正常。但是当我尝试 insmod 驱动程序的 .ko 文件时,我得到了一个无效的格式错误,将错误粘贴到 insmod: error inserting e1000e.ko: -1 Invalid module format