• <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設(shè)備驅(qū)動(dòng)程序:gnu make 擴(kuò)展語(yǔ)法

            要點(diǎn):
            在用戶(hù)空間驅(qū)動(dòng)程序
            insmod
            modprobe
            rmmod


            一些宏:
            LINUX_VERSION_CODE
            整數(shù)宏


            GNU make 擴(kuò)展語(yǔ)法
            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
            由內(nèi)核構(gòu)造系統(tǒng)使用的makefilet符號(hào),用來(lái)確定在當(dāng)前目錄中應(yīng)構(gòu)造哪些模塊.
            即m:指定把對(duì)象編譯為模塊

            obj-y
            指定把對(duì)象編譯進(jìn)內(nèi)核中

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

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


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

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


            -C 用于指定內(nèi)核源代碼的目錄

            -M 用于module所在的目錄

             

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

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

            評(píng)論

            # re: Linux設(shè)備驅(qū)動(dòng)程序:gnu make 擴(kuò)展語(yǔ)法 2013-02-12 17:52 kangear

            學(xué)習(xí)了,轉(zhuǎn)載過(guò)去了,不過(guò)沒(méi)有一個(gè)官方的參考資料嗎。好像不是太全呀。  回復(fù)  更多評(píng)論   

            # re: Linux設(shè)備驅(qū)動(dòng)程序:gnu make 擴(kuò)展語(yǔ)法 2014-11-11 10:03 away

            不錯(cuò)  回復(fù)  更多評(píng)論   

            # re: Linux設(shè)備驅(qū)動(dòng)程序:gnu make 擴(kuò)展語(yǔ)法 2014-11-11 10:04 away

            好像應(yīng)該用 obj-m :=hello.o
            一行就夠了  回復(fù)  更多評(píng)論   

            <2011年11月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(lèi)(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評(píng)論

            午夜不卡久久精品无码免费| 久久精品卫校国产小美女| 996久久国产精品线观看| 久久人人爽人人爽人人AV | 久久精品国产亚洲Aⅴ香蕉| 精品国产乱码久久久久久1区2区| 久久人人爽人人人人爽AV | 久久免费国产精品| 久久综合给久久狠狠97色| 色播久久人人爽人人爽人人片AV| 少妇久久久久久被弄到高潮 | 无码精品久久久久久人妻中字| 婷婷久久久亚洲欧洲日产国码AV | 久久99久久成人免费播放| 香蕉99久久国产综合精品宅男自| 伊人久久大香线蕉综合网站 | 无码久久精品国产亚洲Av影片| 狠狠88综合久久久久综合网| 久久99国产精品久久| 一97日本道伊人久久综合影院| 久久丫精品国产亚洲av不卡 | 久久亚洲AV成人无码国产| 人妻丰满?V无码久久不卡| 久久久久se色偷偷亚洲精品av| 国产精品视频久久| 久久人人爽人人爽人人爽| 国产精品一久久香蕉产线看| 四虎影视久久久免费| 久久精品无码专区免费东京热| 久久久久亚洲精品无码网址 | 亚洲国产精久久久久久久| 国产一区二区久久久| 九九精品99久久久香蕉| 人妻精品久久久久中文字幕| 伊人久久精品线影院| 久久精品国产免费一区| 亚洲精品美女久久777777| 精品多毛少妇人妻AV免费久久 | 久久影视综合亚洲| 亚洲国产成人久久综合一 | 久久综合狠狠色综合伊人|