编译内核模块,头文件问题,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},这样的事情,但我根本没看到,

有人可以解释和/或以下所有问题吗?

  1. 我需要更新我的include以便它知道正确的目录(如果它类似于我正在使用的内核等,请解释我如何解决这个问题)。

  2. 有人可以解释makefile如何知道调用gcc和编译?

  3. 为了让这个东西编译,还有什么我需要知道的吗?

– 奖金问题

  1. 任何人都知道关于如何构建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目录。