乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      寫內(nèi)核模塊Makefile的技巧

       jijo 2008-05-21

      原創(chuàng) 寫內(nèi)核模塊Makefile的技巧

      新一篇: 今天遇到了麻煩事

      寫內(nèi)核模塊Makefile的技巧

      hansel@163.com
      2007.11.07

         Linux 2.6的內(nèi)核使用Kbuild來編譯內(nèi)核模塊。Kbuild能夠編譯內(nèi)核樹目錄內(nèi)的內(nèi)核模塊,也能夠編譯內(nèi)核樹目錄外的內(nèi)核模塊(外部內(nèi)核模塊)。

      .編譯外部內(nèi)核模塊的命令:
         #cd <your-module-dir>
         #make -C <path-to-kernel> M=`pwd`
        
         其中<your-module-dir>為要編譯的內(nèi)核模塊所在目錄,<path-to-kernel> 為內(nèi)核源碼所在的目錄。
         對于發(fā)行版本的Linux,可以用:
         #make -C /lib/modules/`uname -r`/build M=`pwd`
        
         注意:使用Kbuild之前,必須先成功編譯過內(nèi)核源碼。
         說明:
              .#make -C <path-to-kernel> M=`pwd` modules
              作用與上面的命令一樣
              .以前的內(nèi)核版本可以使用
               #make -C <path-to-kernel> SUBDIRS=`pwd`  modules

      .安裝外部內(nèi)核模塊
         #make -C <path-to-kernel> M=`pwd` modules_install  
          默認(rèn)安裝目錄為:/lib/modules/`uname -r`/extra,可以通過INSTALL_MOD_PATH宏在默認(rèn)安裝路徑前加前綴。
          例如:
         #make -C <path-to-kernel> INSTALL_MOD_PATH=/opt M=`pwd` modules_install  
         則編譯后的模塊會放在/opt/lib/modules/`uname -r`/extra
         通過宏INSTALL_MOD_DIR可以修改是否放在'extra'下,例如:
         #make -C <path-to-kernel> INSTALL_MOD_DIR=golf M=`pwd` modules_install 
         則編譯后的模塊會放在/lib/modules/`uname -r`/golf
        
      .編譯單個文件
         #make -C <path-to-kernel> M=`pwd` <filename>

      .其他命令
         #make -C <path-to-kernel> M=`pwd` clean
         #make -C <path-to-kernel> M=`pwd` help

      .Kbuild文件
        Linux的Kbuild會在內(nèi)核模塊目錄下查找Kbuild文件,如果有,則在編譯時會使用該文件。

      示例:
        假設(shè)有這么幾個文件:8123_if.c 8123_if.h  8123_pci.c 8123_bin.o_shipped(二進(jìn)制的模塊文件)
        Kbuild文件的內(nèi)容:
           obj-m := 8123.o
           8123-y:8123_if.o 8123_pci.o 8123_bin.o
          
        Makefile的內(nèi)容:
           #為了兼容舊版本的Kbuild
           ifneq($(KERNELRELEASE),)
              include Kbuild
           else
              #正常的Makefile
              KDIR:=/lib/modules/`uname -r`/build
              all::
                 $(MAKE) -C $(KDIR) M=`pwd` $@
                
              #其他target
              genbin:
                echo "X" > 8123_bin_shipped
           endif
          
           注意,沒有源碼的二進(jìn)制.o文件必須以原文件名加_shipped結(jié)尾,例如8123_bin.o_shipped,KBuild會把8123_bin.o_shipped
               復(fù)制為8123_bin.o,然后一起編譯。
              
              
      .Makefile中如何包括自己的include文件
          由于采用Kbuild編譯外部內(nèi)核模塊時,編譯路徑切換到了內(nèi)核源碼樹的目錄,因此如果在Makefile中使用相對路徑來包含另一個文件
          時,會找不到該文件。因此,不能用
             include ../config.mk
            
          應(yīng)該用:
             ifeq ($(obj),)
                obj= .
             endif
             include $(obj)/../config.mk 

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多