日期:2014-05-16  浏览次数:20648 次

为什么我的程序源文件里不能包含内核头文件?
编写了一个内核程序,想先生成.o文件,然后再连接到其他文件生成.ko文件。
下面一层(这一层可以包含内核头文件)把linux内核中提供的函数做了封装,这一层只是对下面一层调用,现在想改一下,让本层直接用内核提供的函数,但一在源文件里加上包含内核头文件的语句(像#include <linux/sched.h> ),就提示找不到sched.h这个文件。估计是Makefile的问题,请大家帮忙看一下:
Makefile
---------------------------------------
#source   file
SUBDIRS   :=
SUBDIRS   :=   abc
SUBDIRS   :=   abcd
SUBDIRS   :=   abcde

AD_SRC   :=   $(foreach   subdir,   $(SUBDIRS),   $(wildcard   $(subdir)/*.c))

#obj   files
AD_OBJ   :=   $(AD_SRC:.c=.o)

#dependecy   files
AD_DEP   :=   $(AD_SRC:.c=.d)

#final   target
LIB_DIRS   =   $(CURDIR)/../lib
LIB_NAME   =   ad.o

#rules   to   make   the   objs

CC   =   gcc
LD   =   ld
MV   =   mv

CFLAGS   :=
CFLAGS   :=   -I   $(CURDIR)/h
CFLAGS   :=   -I   $(CURDIR)/../h
CFLAGS   :=   -Wall   -Wstrict-prototypes   -Wno-trigraphs   -fno-strict-aliasing   -fno-common   -Os   -fomit-frame-pointer   -g   -Wdeclaration-after-statement   -pipe   -msoft-float   -m32   -fno-builtin-sprintf   -fno-builtin-log2   -fno-builtin-puts   -mpreferred-stack-boundary=2   -fno-unit-at-a-time   -march=i686   -mregparm=3

LDFLAGS   :=
LDFLAGS   +=   -r

%.o   :   %.c
                @$(CC)   -M   -MT   $*.o   -c   $(CFLAGS)   $ <   -o   $*.d
                @$(CC)   -c   $(CFLAGS)   $ <   -o   $@

#final   target
all:   $(AD_OBJ)
                @$(LD)   $(LDFLAGS)   -o   $(LIB_NAME)   $(AD_OBJ)
                $(MV)   $(LIB_NAME)   $(LIB_DIRS)/$(addsuffix   _shipped,   $(LIB_NAME))

clean:
                rm   -f   $(AD_OBJ)
                rm   -f   $(AD_DEP)

#The   dependent   file   can   be   include   only   when   the   target   is   NOT   "clean "
ifeq(   ,   $(findstring   clean,   $(MAKECMDGOALS)))
-include   $(AD_DEP)
endif  
---------------------------------

------解决方案--------------------
请指定内核源代码目录