一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

寫內(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  
    默認安裝目錄為:/lib/modules/`uname -r`/extra,可以通過INSTALL_MOD_PATH宏在默認安裝路徑前加前綴。
    例如:
   #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文件,如果有,則在編譯時會使用該文件。

示例:
  假設有這么幾個文件:8123_if.c 8123_if.h  8123_pci.c 8123_bin.o_shipped(二進制的模塊文件)
  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
    
     注意,沒有源碼的二進制.o文件必須以原文件名加_shipped結尾,例如8123_bin.o_shipped,KBuild會把8123_bin.o_shipped
         復制為8123_bin.o,然后一起編譯。
        
        
.Makefile中如何包括自己的include文件
    由于采用Kbuild編譯外部內(nèi)核模塊時,編譯路徑切換到了內(nèi)核源碼樹的目錄,因此如果在Makefile中使用相對路徑來包含另一個文件
    時,會找不到該文件。因此,不能用
       include ../config.mk
      
    應該用:
       ifeq ($(obj),)
          obj= .
       endif
       include $(obj)/../config.mk 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    色婷婷久久五月中文字幕| 精品一区二区三区乱码中文| 中国黄色色片色哟哟哟哟哟哟| 精品国自产拍天天青青草原| 神马午夜福利免费视频| 99久久国产精品免费| 日韩成人免费性生活视频| 久久国产青偷人人妻潘金莲| 日韩18一区二区三区| 色老汉在线视频免费亚欧| 国产综合欧美日韩在线精品| 在线观看国产午夜福利| 国产日韩欧美在线亚洲| 日本精品最新字幕视频播放| 大香蕉伊人精品在线观看| 91欧美日韩国产在线观看| 国产精品一区二区香蕉视频| 亚洲夫妻性生活免费视频| 国产又大又硬又粗又湿| 成人午夜激情在线免费观看| 欧美精品二区中文乱码字幕高清| 人妻少妇久久中文字幕久久| 久热这里只有精品九九| 国产精品一区日韩欧美| 国产高清一区二区白浆| 男女午夜福利院在线观看| 中文字幕日韩精品人一妻| 国产免费无遮挡精品视频 | 欧美六区视频在线观看| 99久久免费看国产精品| 狠狠做深爱婷婷久久综合| 日韩人妻av中文字幕| 99少妇偷拍视频在线| 欧美一级内射一色桃子| 制服丝袜美腿美女一区二区 | 少妇人妻精品一区二区三区| 亚洲欧美日本国产有色| 国产一区在线免费国产一区| 国产福利一区二区久久| 国产精品欧美一区两区| 国产内射一级一片内射高清视频|