c - 如何在没有内核源代码树的情况下构建外部内核模块

标签 c linux makefile linux-kernel

我有一个编译内核模块和用户空间应用程序的第 3 方软件包。不幸的是,这个第 3 方非常复杂,并且没有使用 Kbuild 来构建内核模块(我试过但没有成功)。

我尝试使用以下几行构建一个简单的驱动程序:

    arm-linux-gnueabihf-gcc  -D__KERNEL__ -Wall -include /lib/modules/4.4.62-18.6-default/build/include/generated/autoconf.h -MD -MP   -Werror -O2 -I /usr/src/linux-4.4.62-18.6/include -I /src/include -DMODULE -c -o hello_dkm.o hello_dkm.c  
    $(LD) -o $(debug_target) $(LD_COMMON_FLAGS) -g $(debug_Objs)

我有:

fatal error: /usr/src/linux-4.4.62-18.6/include/linux/thread_info.h:54:29: fatal error: asm/thread_info.h: No such file or directory

附录

  • 平台:Altera Cyclone V SoC,ARM cortex A9 双核
  • 内核:linux Altera 3.7.0
  • 主机:Linux openSuse 42

PS:在我团队的项目平台中,很难使用使用内核源代码树的经典编译行: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) 模块

提前致谢

最佳答案

您的直接问题是“asm/thread_info.h”不在您的CPATH 中,也没有在您的任何-I 参数中指定。您需要在系统上找到该文件并将其根放入 CPATH 环境变量或 -I 指令中。

为了清楚起见,如果您将文件定位在 /usr/local/include/linux/asm/thread_info.h,您必须在 arm-linux-gnueabihf-gcc 之前 加上CPATH=/usr/local/include/linux,或者在命令行某处插入-I/usr/local/include/linux,也许是对的在 arm-linux-gnueabihf-gcc 之后。

可能还会有其他问题,但这应该会让您进入下一步。

关于c - 如何在没有内核源代码树的情况下构建外部内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44279759/

相关文章:

C89:使用 rand_r() 的多线程随机值

c - 如何计算 mpu6050 的倾斜角度?

c - 返回类型默认为 'int' [-Wimplicit-int]

linux - fdisk - 创建一半磁盘大小的交换分区

Linux如何使用rm和exclude开关

c - 如何确定源文件的编译顺序?

vim - windows上gnu make的libintl3和libiconv2在哪里,需要在MinGW上用ruby编译vim

c - 给定输入的程序分析

linux - bash CLI 参数设置脚本变量吗?

python - 尝试安装 Python 音频工具时 make install 失败