编译内核模块,头文件问题,makefile问题
好吧,我正在尝试编译一个简单的内核模块,当我指向包含包含的任何下面的内容时,它会抱怨各种各样的东西。
linux-headers-2.6.31-21 linux-headers-2.6.31-22 linux-headers-2.6.31-21-generic linux-headers-2.6.31-22-generic linux-headers-2.6.31-21-generic-pae linux-headers-2.6.31-22-generic-pae
我正在尝试按照以下网站上的说明操作: http : //www.faqs.org/docs/kernel/x145.html
我更新了make文件,如下所示:
TARGET := hello_world WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes INCLUDE := -isystem /usr/src/linux-headers-2.6.31-22-generic/include CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE} CC := gcc ${TARGET}.o: ${TARGET}.c .PHONY: clean clean: rm -rf ${TARGET}.o
例如,当我输入make时,我得到以下错误以及更多,调查文件夹,我看到处理器和缓存文件是asm-generic,如果它不指向,我应该如何编译它文件的正确位置?
/usr/src/linux-headers-2.6.31-22-generic/include/linux/prefetch.h:14:27: error: asm/processor.h: No such file or directory /usr/src/linux-headers-2.6.31-22-generic/include/linux/prefetch.h:15:23: error: asm/cache.h: No such file or directory
最终目标(可怕)是建立一个虚拟文件系统,星期四……(是的,我知道这不太可能)我理解一些make文件,但奇怪的是我预计我应该看到像$ {CC}这样的东西$ {INCLUDE},这样的事情,但我根本没看到,
有人可以解释和/或以下所有问题吗?
-
我需要更新我的include以便它知道正确的目录(如果它类似于我正在使用的内核等,请解释我如何解决这个问题)。
-
有人可以解释makefile如何知道调用gcc和编译?
-
为了让这个东西编译,还有什么我需要知道的吗?
– 奖金问题
- 任何人都知道关于如何构建VFS的任何真正详细的教程,我有一个我们被分配到另一所学校的项目, http://oslab.info/index.php/Labs/HW4 ,并且基于有限的编程我们已经在此之前完成,它似乎是一项艰巨的任务。
使用2.6内核,您应该使用内核构建系统。 以下是在内核树之外构建的模块的示例:
ifneq ($(KERNELRELEASE),) # We were called by kbuild obj-m += target.o else # We were called from command line KDIR := /lib/modules/$(shell uname -r)/build #KDIR := /home/cynove/src/kernel/linux-source-2.6.31 PWD := $(shell pwd) default: @echo ' Building target module 2.6 kernel.' @echo ' PLEASE IGNORE THE "Overriding SUBDIRS" WARNING' $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules install: ./do_install.sh *.ko endif # End kbuild check ######################### Version independent targets ########################## clean: rm -f -r *.o *.ko .*cmd .tmp* core *.i
通过调用make -C($ KDIR)等…,内核构建系统会参与其中,并为您完成工作。
您的链接的示例2.2具有以下行而不是您列出的行:
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
这看起来像是编译问题的可能原因。 你改变它的任何特殊原因?
看一下几棵源树(2.6.32是我手头上最老的)没有processor.h
h的实例,它们都在通用目录中,都是特定于体系结构的。 例如
/usr/src/linux-headers-2.6.32-24/arch/x86/include/asm/processor.h
所以我猜你在Makefile中缺少一个include目录。