zoukankan      html  css  js  c++  java
  • 引用 模块编译Makefile模板

    本文转载自geyingzhen《模块编译Makefile模板》
     

     

    引用

    geyingzhen  模块编译Makefile模板

    ifneq ($(KERNELRELEASE), )      

             //判断KERNELRELEASE是否定/义,KERNELRELEASE是在linux内核源码中主Makefile中定义的
           
           obj-m:=drive.o

               //编译生成目标文件
    else    

                //若KERNELRELEASE没有否定义,  

            KERNELDIR ?=/lib/modules/$(shell uname -r)/build

                           //KERNELDIR是本Makefile 依赖的linux内核源码路径  ,如是交叉编译时就取开发板上运行的源码路径
            PWD :=$(shell pwd)

                      //取当前的路径,         
     default:
           $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

               //到linux源码所在的目录执行主Makefile 并当前路径传给主Makefile,告诉主Makefile执行完后返回到当前目录,执行Makefile,

               //moudules可以省略,加上表示是以模块形式编译.
     endif                   
                                                                                  
                
    KERNELRELEASE是在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时, KERNELRELEASE没有被定义,所以make将读取执行else之后的内容。如果make的目标是clean,直接执行clean操作,然后结束。当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容。else之前的内容为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。mymodule-objs := file1.o file2.o表示mymoudule.o 由file1.o与file2.o 连接生成。obj-m := mymodule.o表示编译连接后将生成mymodule.o模块。 

  • 相关阅读:
    HDOJ 1846 Brave Game
    并查集模板
    HDU 2102 A计划
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    POJ 1321 棋盘问题
    CF 999 C.Alphabetic Removals
    CF 999 B. Reversing Encryption
    string的基础用法
    51nod 1267 4个数和为0
  • 原文地址:https://www.cnblogs.com/wangjingyuwhy/p/3417325.html
Copyright © 2011-2022 走看看