- 论坛徽章:
- 0
|
这是一个gcm的加密测试程序,想要把它打包成内核模块加载到内核中,首先我把代码中该修改的地方都修改了,比如printk还有头文件之类的,然后修改makefile文件出现了问题。
原来的makefile是这样的
INCLUDE_DIRS := ../include ..
INCLUDES := $(foreach i,$(INCLUDE_DIRS),-I $i)
CC := gcc
CXXFLAGS := -g -D LINUX $(INCLUDES)
LDFLAGS += -g
lib_objs := \
aes128_cbc_dec_by4_sse.o \
……这里是一些在上级的include目录下的文件,略去了……
gcm_avx_gen2.o \
gcm_avx_gen4.o
OBJ := $(foreach i,$(lib_objs),../obj/$(i))
gcm: main.o $(OBJ)
$(CC) $(LDFLAGS) -o $@ main.o $(OBJ)
main.o: main.c do_test.h
$(CC) $(CXXFLAGS) -c $< -o $@
clean:
rm -f *.o *.cmd *.ko *.mod.c
执行make命令,首先生成main.o,然后将上级目录下的include中的文件( OBJ 所代表的) 和main.o一块作为依赖,生成gcm可执行程序。。。
——————————————————————————————————————————
下面是我修改后的makefile
INCLUDE_DIRS := ../include ..
INCLUDES := $(foreach i,$(INCLUDE_DIRS),-I $i)
lib_objs := \
aes128_cbc_dec_by4_sse.o \
……这里是一些在上级的include目录下的文件,略去了……
gcm_avx_gen2.o \
gcm_avx_gen4.o
OBJ := $(foreach i,$(lib_objs),../obj/$(i))
obj-m += gcm.o
gcm-objs:= main.o do_test.h $(OBJ)
main.o: main.c do_test.h
$(CC) $(CXXFLAGS) -c $< -o $@
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
rm -rf Module.* modules.*
.PHONY: default clean
问题出现了,如果去掉上面makefile中的
main.o: main.c do_test.h
$(CC) $(CXXFLAGS) -c $< -o $@
这两句,那么就不会生成main.o,出现各种错误。
我们知道内核模块编写执行make后首先应该进入系统的内核目录,可是如果不去掉这两句,系统就会先执行这两句,不会进入系统内核目录下,出现各种错误。而且这两句放到前面也是一样的。。。
——————————————————————————————————————————————
不知道有没有说清楚问题。总结起来就是:我们在内核模块编写的时候,makefile中一般都有
obj-m := my_module.o
my_module-objs := extern_app.o test_module.o
这样的部分,可是如果上面的依赖extern_app.o或者test_module.o不能直接生成,而是需要你去写响应的语句才行,那么该怎么办?
希望有朋友帮忙解惑 |
|