好吧我正在尝试编译一个简单的内核模块,当我指向包含include的下面任何一个时,它会抱怨各种各样的东西。
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和编译?
还有什么我需要知道才能编译这个东西吗?
- 奖金问题
答案 0 :(得分:4)
使用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)等...,内核构建系统会参与其中,并为您完成工作。
答案 1 :(得分:1)
您的链接的示例2.2包含以下行而不是您列出的行:
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
这看起来像是编译问题的可能原因。你改变它的任何特殊原因?
答案 2 :(得分:0)
查看几个源树(2.6.32是我手头上最老的),没有processor.h
的实例位于通用目录中,所有都是特定于体系结构的。例如
/usr/src/linux-headers-2.6.32-24/arch/x86/include/asm/processor.h
所以我猜你在Makefile中缺少一个include目录。