ldd中Makefile的解释

#   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
    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)   $(CFLAGS)   -M   *.c   >   .depend

ifeq   (.depend,$(wildcard   .depend))
include   .depend
endif
说明:
1.   $(shell   uname   -r)会调用uname   -r这个shell命令并把结果展开作为值,返回值是当前内核版本号,整体来说KERNELDIR   ?=   /lib/modules/$(shell   uname   -r)/build的含义就是在KERNELDIR未定义时赋值为:/lib/modules/2.6.xx/build   (假设当前内核版本号为2.6.xx),这就是一个路径,一般来说会是一个符号链接,指向真正的内核源码的路径。我的版本号是2.6.28-17-generic。
2.   modules不是伪目标,$(MAKE)   -C   $(KERNELDIR),   M=$(PWD),   LDDINC=$(PWD)/../include   modules的含义:-C   $(KERNELDIR)表示在读取makefile前进入$(KERNELDIR)目录,M=$(PWD),   LDDINC=$(PWD)/../include则只是传了2个变量给Makefile,modules则是$(KERNELDIR)中的Makefile中的target。
3.   产生依赖信息文件,如果存在的话则将其包含到Makefile中。
4.   这个Makefile调用时有2种可能,一种是KERNELRELEASE已定义,那实际上是在内核整体编译中调用;另一种则是KERNELRELEASE未定义,调用的方式应该会是类似make   modules的方式调用。
5,

modules:
$(MAKE)   -C   $(KERNELDIR)   M=$(PWD)   LDDINC=$(PWD)/../include   modules
这个是整个Makefile中的第一句依赖,因此是整个Makefile的入口,这个就是真正的编译命令,大意就是调用/lib/modules/$(shell   uname   -r)/build下modules的Makefile去编译你的驱动模块。

     KERNELRELEASE 是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读取执行else之后的内容。如果make的目标是clean,直接执行clean操作,然后结束。当make的目标为modules时,-C $(KERNELDIR)指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。

 

      补充如下一个文件的理解:

wm97xx-ts-y := wm97xx-core.o         //wm97xx-ts.o := wm97xx-core.o  类似与等于
obj-$(CONFIG_TOUCHSCREEN_ADS7846)       += ads7846.o
obj-$(CONFIG_TOUCHSCREEN_ATMEL_TSADCC)  += atmel_tsadcc.o
obj-$(CONFIG_TOUCHSCREEN_BITSY)         += h3600_ts_input.o
obj-$(CONFIG_TOUCHSCREEN_CORGI)         += corgi_ts.o
obj-$(CONFIG_TOUCHSCREEN_GUNZE)         += gunze.o
obj-$(CONFIG_TOUCHSCREEN_ELO)           += elo.o
obj-$(CONFIG_TOUCHSCREEN_FUJITSU)       += fujitsu_ts.o
obj-$(CONFIG_TOUCHSCREEN_INEXIO)        += inexio.o
obj-$(CONFIG_TOUCHSCREEN_MIGOR)         += migor_ts.o
obj-$(CONFIG_TOUCHSCREEN_MTOUCH)        += mtouch.o
obj-$(CONFIG_TOUCHSCREEN_MK712)         += mk712.o
obj-$(CONFIG_TOUCHSCREEN_HP600)         += hp680_ts_input.o
obj-$(CONFIG_TOUCHSCREEN_HP7XX)         += jornada720_ts.o
obj-$(CONFIG_TOUCHSCREEN_HTCPEN)        += htcpen.o
obj-$(CONFIG_TOUCHSCREEN_USB_COMPOSITE) += usbtouchscreen.o
obj-$(CONFIG_TOUCHSCREEN_PENMOUNT)      += penmount.o
obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI)     += synaptics_i2c_rmi.o
obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213)    += touchit213.o
obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT)    += touchright.o
obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)      += touchwin.o
obj-$(CONFIG_TOUCHSCREEN_TSC2007)       += tsc2007.o
obj-$(CONFIG_TOUCHSCREEN_UCB1400)       += ucb1400_ts.o
obj-$(CONFIG_TOUCHSCREEN_WACOM_W8001)   += wacom_w8001.o
obj-$(CONFIG_TOUCHSCREEN_WM97XX)        += wm97xx-ts.o   //目标obj中要包含wm97xx-ts.o 
obj-$(CONFIG_TOUCHSCREEN_DA9034)        += da9034-ts.o
wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705)  += wm9705.o
wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9712)  += wm9712.o
wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713)  += wm9713.o
obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE)      += mainstone-wm97xx.o
obj-$(CONFIG_TOUCHSCREEN_MICCO)         += micco_touch.o

     

其中有:obj += wm97xx-ts.o

wm97xx-ts.o := wm97xx-core.o wm97xx.o

http://topic.csdn.net/u/20070815/22/cbd2f64d-f6e3-4938-97f8-4f8fe5a21465.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值