阅读:1600回复:1
如何编写带有两个C文件的驱动
现在有三个文件分别为 main.c fvo.c fvo.h
main.c为驱动程序 而fvo.c fvo.h只是一般的普通程序,但是main需要调用里面某些方法,如fun() fun()在fvo.h中声明,在fvo.c中实现 在main.c中包含fvo.h头文件,编译里报fun undefined 错误 请哪位达人帮小弟,编写fvo.c fvo.h时需要注意哪些,以及如何写这个Makefile文件啊 |
|
沙发#
发布于:2008-04-10 19:30
已解决!
编写fvo.c和fvo.h和一般的应用程序编程没有什么太大的区别,只是要注意,一般C库的头 文件和函数在驱动程序里得不到支持。只能使用内核导出的符号表中的函数。对于你自己 的fvo.c中的函数,如果在别的文件中不需要调用着最好在函数定义的头上加上static,对 于需要导出的函数需要使用EXPORT_SYMBOL或者EXPORT_SYMBOL_GPL来显式导出。 至于makefile的编写要区分你的内核版本,对于2.4的版本,我不大清楚,貌似和应用程序 的makefile的编写差不多。 至于2.6的内核版本,因为采用了kbuild,可以比较方便的编写。示例如下, # Comment/uncomment the following line to disable/enable debugging #DEBUG = y # Add your debugging flag (or not) to CFLAGS ifeq ($(DEBUG),y) DEBFLAGS = -O -g -DSCULL_DEBUG # "-O" is needed to expand inlines else DEBFLAGS = -O2 endif CFLAGS += $(DEBFLAGS) CFLAGS += -I$(LDDINC) ifneq ($(KERNELRELEASE),) # call from kernel build system simple-objs := main.o fvo.o obj-m := simple.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) LDDINC=$(PWD)/../include modules endif clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions depend .depend dep: $(CC) $(CFLAGS) -M *.c > .depend ifeq (.depend,$(wildcard .depend)) include .depend endif 更详细的内容可以参考源代码树中的/Documentaion/kbuild/makefiles.txt |
|