• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            Linux設備驅動程序:gnu make 擴展語法

            要點:
            在用戶空間驅動程序
            insmod
            modprobe
            rmmod


            一些宏:
            LINUX_VERSION_CODE
            整數宏


            GNU make 擴展語法
            obj-m   +=hello.o
            KERNELDIR   := /usr/src/linux-headers-2.6.32-5-686
            PWD :=$(shell pwd)
            .PHONY: test clean all
            all:
                $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
            clean:
                rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versionsm *.order *.symvers .tmp_versions

            test:
                insmod ./hello.ko
                rmmod hello
                dmesg -c

            obj-m
            由內核構造系統使用的makefilet符號,用來確定在當前目錄中應構造哪些模塊.
            即m:指定把對象編譯為模塊

            obj-y
            指定把對象編譯進內核中

            如果我們要構造的模塊為module.ko,并由file1.c和file2.c則正確的makefile可如下編寫:
            obj-m :=module.o
            module-objs :=file1.o file2.o

            為了讓上面的makefile可以工作,必須在大的內核構造系統環境中調用它們,所以上述命令首先要改變-C指定的目錄,即:
             $(MAKE) -C $(KERNELDIR)
            然后指定M變量目錄,即讓makefile在構造modules目標之前返回到模塊源代碼的目錄,既當前目錄 M=$(PWD),最后modules目標指向obj-m變量中設定的模塊.


            M不是一個編譯選項,而是一個變量,從頂層makefile文件里可以找到它的定義
            文件在
            /usr/src/linux-headers-2.6.32-5-common/Makefile

            69 ifeq ("$(origin M)", "command line")
            70   KBUILD_EXTMOD := $(M)
            71 endif


            -C 用于指定內核源代碼的目錄

            -M 用于module所在的目錄

             

            如果一個模塊包括了多個.c文件(如 file1.c , file2.c),則應該以如下方式編寫Makefile
            obj-m := modulename.o
            module-objs := file1.o file2.o

            posted on 2012-03-16 11:11 天下 閱讀(965) 評論(3)  編輯 收藏 引用 所屬分類: kernel & Driver

            評論

            # re: Linux設備驅動程序:gnu make 擴展語法 2013-02-12 17:52 kangear

            學習了,轉載過去了,不過沒有一個官方的參考資料嗎。好像不是太全呀。  回復  更多評論   

            # re: Linux設備驅動程序:gnu make 擴展語法 2014-11-11 10:03 away

            不錯  回復  更多評論   

            # re: Linux設備驅動程序:gnu make 擴展語法 2014-11-11 10:04 away

            好像應該用 obj-m :=hello.o
            一行就夠了  回復  更多評論   

            <2011年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            導航

            統計

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評論

            久久久久亚洲av毛片大| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲国产精品无码久久久蜜芽| 亚洲精品国产字幕久久不卡 | 久久精品中文字幕有码| 欧美日韩精品久久久免费观看| 欧美久久久久久| 天天久久狠狠色综合| 欧美日韩久久中文字幕| 色综合久久88色综合天天| 久久人人爽人人人人片av| 日韩精品久久无码中文字幕| 国产精品视频久久久| 精品免费久久久久国产一区| 综合网日日天干夜夜久久| 国产99久久九九精品无码| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 色综合久久天天综线观看| 久久偷看各类wc女厕嘘嘘| 亚洲美日韩Av中文字幕无码久久久妻妇 | 伊人久久免费视频| 久久这里只有精品18| 久久久久久精品免费免费自慰 | 2021国内精品久久久久久影院| 日韩人妻无码一区二区三区久久99| 久久久久久久97| 亚洲精品乱码久久久久久蜜桃不卡| 欧美一级久久久久久久大| 精品无码久久久久久久久久| 国内精品久久久久| 77777亚洲午夜久久多喷| 亚洲第一极品精品无码久久| 久久亚洲国产精品成人AV秋霞| 亚洲а∨天堂久久精品| 久久99热这里只频精品6| 欧美伊人久久大香线蕉综合| 狠狠精品久久久无码中文字幕| 亚洲综合伊人久久综合| 久久人爽人人爽人人片AV| www.久久热| 午夜精品久久久内射近拍高清 |