编写驱动的makefile使要

通常在编译linux驱动时,咱们须要在交叉编译环境中进行编译,因此要在编译环境中搭建交叉编译环境。编写驱动的makefile使须要制定驱动依赖的内核的路径,makefile写法以下:
  KERN_DIR = /xxx/xxx/linux-2.6.22.6
  
  all:
      make -C $(KERN_DIR) M=`pwd` modules 
  
  clean:
      make -C $(KERN_DIR) M=`pwd` modules clean
      rm -rf modules.order
  
 obj-m    += buttons.olinux

     KERN_DIR=/XXX/XXX/linux-2.6.22.6,这句是对KERN_DIR进行赋值,肯定后面使用内核源码时的内核源码路径。shell

  make -C $(KERN_DIR) M='pwd' modules,这句是makefile的规则:-C选项的做用是指将当前工做目录转移到你所指定的位置,当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile。ui

    M=$(PWD) 代表而后从内核makefile中返回到当前目录继续读入、执行当前的Makefile。M是内核根目录下的Makefile中使用的变量,"M="选项的做用是,当用户须要以某个内核为基础编译一个外部模块的话,须要在make modules命令中加入"m=dir",程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成ko文件。M=‘pwd’这句话是用来制定咱们编译的驱动的路径。这句能够这样来写PWD:=$(shell pwd)  M='PWD'。源码

================================================================================编译

当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 代表而后返回到当前目录继续读入、执行当前的Makefile。
当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else以前的内容,其为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。
 基础

相关文章
相关标签/搜索