Makefile文件:

  obj-m += xxx.o

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  KERN_DIR = /work/system/linux-2.6.22.6

  PWD = $(shell pwd)

  all:
    make -C $(KERN_DIR) M=`PWD` modules

  clean:
    make -C $(KERN_DIR) M=`PWD` modules clean
    rm -rf modules.order

解析:

   obj-y +=xxx.o 

  该模块将会编译到zImage   

  obj-m +=xxx.o   

  该模块不会编译到zImage 但会生成一个独立的 xxx.ko 静态编译

  KERN_DIR = /work/system/linux-2.6.22.6  

  这句是对 KERN_DIR 进行赋值,确定后面使用内核源码时的内核源码路径。

  PWD = $(shell pwd)  

  这句表示当前路径

  make -C $(KERN_DIR) M='pwd' modules  

  这句是 makefile 中的规则:make modules 就是编译成模块的意思,-C 选项的作用是指从当前工作目录转移到你所指定的位置,-C $(KDIR) 就是指明跳

  转到内核源码目录下读取那里的 MakefileM= 选项的作用是,指明需要编译成模块的源文件的位置,M='pwd'就是指明需要编译成模块的源文件在当前目录

    下因此程序会自动返回到当前目录中查找模块源码,将其编译,生成KO文件。

  make -C $(KERN_DIR) M=`PWD` modules clean    

  这句也是 makefile 中的规则:make modules clean 就是将已经编译-链接成的KO文件删除。

  rm -rf modules.order                 

  这句的意思就是删除编译-链接过程中生成的其他文件 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄