RiverNorth 发表于 2010-06-01 14:27

驱动开发 Makefile文件的写法

刚开始看linux驱动程序开发,对其中makefile感到很迷惑,
比如下面程序中的,$(MAKE) -C $(KERNELDIR) M=$(PWD) LDDINC=$(PWD)/../include modules,起到什么作用
而且下面这段代码并没有指出文件的依赖关系,所使用的编译器等等
关于内核模块的makefile写法,有没有相关的资料ifeq ($(DEBUG),y)
DEBFLAGS = -O -g -DSCULL_DEBUG # "-O" is needed to expand inlines
else
DEBFLAGS = -O2
endif

EXTRA_CFLAGS += $(DEBFLAGS)
EXTRA_CFLAGS += -I$(LDDINC)

ifneq ($(KERNELRELEASE),)
# call from kernel build system

scull-objs := main.o pipe.o access.o

obj-m        := scull.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) $(EXTRA_CFLAGS) -M *.c > .depend


ifeq (.depend,$(wildcard .depend))
include .depend
endif

wtz_wh 发表于 2010-06-03 10:18

Google 《跟我一起学写Makefile》

aaaaa5aa 发表于 2010-06-03 21:19

内核模块的makefile,不是有相关工具么

kangyingkui 发表于 2010-06-04 21:23

编译器是用的内核中指定的编译器    而内核的路径给出来了 就可以了

jujumao1202 发表于 2012-05-03 20:11

顶楼主,哈哈哈哈哈

liwangli1983 发表于 2012-05-04 10:13

因为这个makefile实际上是调用了kernel源码中的makefile来进行实际的编译工作
页: [1]
查看完整版本: 驱动开发 Makefile文件的写法