Linux编译内核模块静态库

来源:互联网 发布:sm抢购软件助手 编辑:程序博客网 时间:2024/06/09 23:39

如果你到静态库不需要使用任何内核数据结构或者函数那么你可以参考

如何将内核静态库编译连接到驱动程序中去

http://blog.csdn.net/boywhp/archive/2010/12/07/6059688.aspx

 

如果你需要在静态库里面使用一些内核数据结构,如简单的添加一个 #include <linux/kernel.h>,你会发现编译器输出一堆错误!

最常见的是 <asm/linkxxx.h> 找不到之类,那么你可以参考我的静态库makefile

 

RM = rm -f

 

CCFLAGS = -c -O2 -D__KERNEL__

 

ARFLAG  = -rc

 

CC = gcc -fno-common -v

AR = ar

 

lib_OBJECTS  =  xxxx.o

lib_SOURCE  =  xxxx.c

 

KDIR := /lib/modules/$(shell uname -r)/build/include

X86_ASMDIR := /lib/modules/$(shell uname -r)/build/arch/x86/include

CONFIG_FILE := /lib/modules/$(shell uname -r)/build/include/generated/autoconf.h

 

LIB = xxxx.a

 

xxxx.a:$(lib_OBJECTS)

$(AR) $(ARFLAG) -o $@ $^

 

$(lib_OBJECTS):$(lib_SOURCE)

#$(CC) $(CCFLAGS) -o $@ $^

$(CC) $(CCFLAGS) -I$(KDIR) -I$(X86_ASMDIR) -include $(CONFIG_FILE) -o $@ $^

 

clean:

$(RM) $(lib_OBJECTS.o)

$(RM) $(LIB)

 

注意makefile中的粗体行,解决了系统找不到包含文件问题,另外指明了编译内核模块的默认配置autoconf.h

 

 

原创粉丝点击