smallcraft
驱动牛犊
驱动牛犊
  • 注册日期2008-04-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1553回复:1

如何编写带有两个C文件的驱动

楼主#
更多 发布于:2008-04-09 23:13
现在有三个文件分别为  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文件啊
smallcraft
驱动牛犊
驱动牛犊
  • 注册日期2008-04-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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
游客

返回顶部