【发布时间】:2017-05-31 08:39:16
【问题描述】:
我有一个编译内核模块和用户空间应用程序的第 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) modules
提前致谢,
【问题讨论】:
-
我认为
c++标签不适用于这个问题。 -
对于编译内核模块,您需要内核构建目录中的一些文件(即构建内核后的源目录),即使您不使用
kbuild来满足您的目的.您需要配置选项,因为它们被 Linux 头文件(作为宏)使用。您需要来自Module.symvers文件的内核核心符号版本。在没有kbuild的情况下描述整个构建过程对于 Stack Overflow 来说似乎过于宽泛。
标签: c linux makefile linux-kernel