【问题标题】:Cross compile module with arm-eabi-gcc使用 arm-eabi-gcc 交叉编译模块
【发布时间】:2016-12-26 13:00:13
【问题描述】:

我有一个视频模块,我正在使用arm-eabi-gcc 交叉编译器进行编译。我使用以下命令编译 $ arm-eabi-gcc -O2 -DMODULE -D__KERNEL__ -W -Wall -isystem /lib/modules/uname -r/build/include panel-xxxxxxx.c.

我收到以下错误

 In file included from /lib/modules/3.13.0-32-generic/build/include/linux/types.h:5:0,
             from /lib/modules/3.13.0-32-generic/build/include/linux/list.h:4,
             from /lib/modules/3.13.0-32-generic/build/include/linux/module.h:9,
             from panel-gis317.c:17:
/lib/modules/3.13.0-32-generic/build/include/uapi/linux/types.h:4:23: fatal error: asm/types.h: No such file or directory
compilation terminated.

在google上搜索后,我发现我需要指定硬件架构,但我找不到在命令行上使用archgcc的正确用法。

谁能建议我在不使用Makefile的情况下在命令行上交叉编译给定.cfile(module)的标志

注意:我这样做是为了测试硬件上的.ko 模块的insmod

顺便说一句,借助.o文件,我们可以知道哪个cross-compiler用于编译.c file

【问题讨论】:

  • -02 应该是 -O2
  • 我对编译器命令行中的 uname -r 部分感到困惑。这评估的是主机的内核版本,而不是目标的 - 在我看来是错误的。您需要主机上的目标内核包含文件并包含这些文件。

标签: c linux linux-kernel cross-compiling kernel-module


【解决方案1】:

Linux 内核架构的特定包含在arch//include 中。虽然它可能无法确保正确编译只是设置...

但请尝试将 /lib/modules/$(uname -r)/build/arch/arm/include 添加到您的包含路径中。

以下是在您的 PC 上为 Pi2 构建您自己的内核和模块的简单指南: http://lostindetails.com/blog/post/Compiling-a-kernel-module-for-the-raspberry-pi-2

他们使用 makefile 方法。

【讨论】:

    【解决方案2】:

    以下链接将帮助您 Cross-compiling of kernel module for ARM architecture

    这也有一个制作文件方法的例子。 作为旁注,如果您想了解“asm/types.h”在 Linux 中的重要性,您可以在这里查看所有函数都使用 this 。 http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

    要了解有关您的输出 (.o) 文件的更多信息,请使用命令“file”

    "file outputfilename.o" 如果您正确交叉编译文件并且使用 64 位系统作为主机并且您的目标是 32 位,您可以在此处验证它。在适当的工作情况下,您的编译输出将是 32 位。

    【讨论】:

      【解决方案3】:

      构建核外内核模块的方式有几处需要改变。

      首先,使用内核 Makefile 而不是直接调用编译器,以获得所有必要的 CFLAGS。

      其次,指定 CROSS_COMPILE=arm-eabi- 因为构建中需要其他 binutils。

      从包含模块源代码和 Makefile 的目录中运行以下命令:

      $ make CROSS_COMPILE=arm-eabi- -C <path_to_kernel_src> M=$PWD
      

      由单个源文件组成的模块的 Makefile 将包含以下行:

      obj-m := panel-xxxxxxx.o
      

      内核 kbuild Makefile 规则将负责生成 modinfo 源文件,并将其编译并链接到 .ko 模块二进制文件中。

      更多详情请见Documentation/kbuild/modules.txt

      【讨论】:

        猜你喜欢
        • 2011-08-20
        • 1970-01-01
        • 1970-01-01
        • 2014-11-14
        • 1970-01-01
        • 2019-06-19
        • 2023-04-02
        • 2014-10-23
        • 2014-10-06
        相关资源
        最近更新 更多