多个文件编译驱动模块
本帖最后由 Gen216ius 于 2010-12-05 14:17 编辑编译一个驱动模块,这个模块的源代码(.c文件与.h文件)不在内核源码树下,但它包含了源码下的一些头文件.h及源文件.c。
比如说这个工程由以下文件来实现:
工程文件夹下
led.c
源码树文件夹下
gpio.c
gpio.h
现在led.c通过GPIO端口来控制,那么led.c中就调用了gpio.c中的文件。这样的Makefile要怎么写啊?!!!
我的Makefile如下
obj-m := led.o
led-objs=gpio.o
KDIR ?=/opt/mv_pro_4.0/montavista/pro/devkit/lsp/ti-davinci
CC=arm_v5t_le-gcc
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
$(CC) -o ledtest main.c
clean:
rm -rf *.ko *.o *.mod.c .tmp_versions *.symvers gpiotest reg led
可就是点不亮灯啊
奇怪现象:在gpio.c中修改led.c调用的函数名,但led.c中还是原来的,这使得led.c中根本就找不到实现函数,但这却不会出错!!说明led.c中根本就没有调用gpio.c的函数吧!!!
多个文件编译出一个驱动模块是怎么样写Makefile啊?!!!!!!麻烦大家指点一下哈!!!!谢谢!!!!! 如果是多个源文件编译出一个模块,那么假设模块名是mytest.ko,那么源文件名不能有mytest.c,下面是一个例子:
obj-m := mytest.o
mytest-objs := file1.o file2.o file3.o 本帖最后由 Gen216ius 于 2010-12-05 18:08 编辑
回复 2# EZWORD
谢谢EZWORD!!!
我的情况是这样的:
比如工程文件夹下只有一个文件file.c,而其他的文件(file2.c、file3.c)是在内核源码树下的,
file1.c中调用了file2.c或者file3.c中的函数。那么这个Makefile应该怎么样写呢?!!! 本帖最后由 EZWORD 于 2010-12-05 18:36 编辑
上面说的很清楚呀,你的应该这样写
KDIR ?=/opt/mv_pro_4.0/montavista/pro/devkit/lsp/ti-davinci
CC=arm_v5t_le-gcc
obj-m := my_led.o
my_led-objs:=gpio.o led.o
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
$(CC) -o ledtest main.c
clean:
rm -rf *.ko *.o *.mod.c .tmp_versions *.symvers gpiotest reg led
回复 4# EZWORD
编译结果如下,并且灯还是没亮,请高手看看是不是哪里错了!!!!
# ls
loadmodules.shmain.cMakefileReadMe.txtuser_gpio.cuser_gpio.h
# make all
make -C /opt/mv_pro_4.0/montavista/pro/devkit/lsp/ti-davinci M=/opt/nfs/GPIOdriver modules
make: Entering directory `/opt/mv_pro_4.0/montavista/pro/devkit/lsp/ti-davinci'
CC /opt/nfs/GPIOdriver/user_gpio.o
In file included from /opt/nfs/GPIOdriver/user_gpio.c:16:
include/asm/arch/gio.h: In function `gpio_set':
include/asm/arch/gio.h:114: warning: implicit declaration of function `__raw_writel'
include/asm/arch/gio.h: In function `gpio_get_value':
include/asm/arch/gio.h:165: warning: implicit declaration of function `__raw_readl'
make: *** 没有规则可以创建“/opt/nfs/GPIOdriver/led.o”需要的目标“/opt/nfs/GPIOdriver/gio.o”。 停止。
make: *** 错误 2
make: Leaving directory `/opt/mv_pro_4.0/montavista/pro/devkit/lsp/ti-davinci'
make: *** 错误 2
#
页:
[1]