• <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>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            編寫Linux內(nèi)核模塊 --- 轉(zhuǎn)

            最近由于學(xué)習(xí)需要,學(xué)習(xí)了一下Linux內(nèi)核模塊的編寫方法,特此把學(xué)習(xí)過程中的問題記錄下來!!!

            1. //  
            2. //hello.c  
            3. //  
            4. #include <linux/init.h>  
            5. #include <linux/kernel.h>  
            6. #include <linux/module.h>  
            7.   
            8. static int hello_init(void) {  
            9.     printk(KERN_WARNING "Module init: Hello world!\n");  
            10.     return 0;  
            11. }  
            12.   
            13. static void hello_exit(void) {  
            14.     printk(KERN_WARNING "Module exit: bye-bye\n");  
            15. }  
            16.   
            17. module_init(hello_init);  
            18. module_exit(hello_exit);  


            最后兩行指定了模塊加載和卸載時(shí)執(zhí)行的函數(shù),加載時(shí)執(zhí)行hello_init,卸載時(shí)執(zhí)行hello_exit。


            下面是Makefile文件

            1. ifneq ($(KERNELRELEASE),)  
            2.     obj-m:=hello.o  
            3. else  
            4.     KDIR := /lib/modules/$(shell uname -r)/build  
            5.   
            6.   
            7. all:  
            8.     make -C $(KDIR) M=$(PWD) modules  
            9. clean:  
            10.     make -C $(KDIR) M=$(PWD) clean  
            11. endif  


            KDIR指向了系統(tǒng)當(dāng)前內(nèi)核的源代碼樹(build是源代碼目錄的一個(gè)鏈接,源代碼一般在/usr/src/kernels/下面)。

            之前我有更新系統(tǒng),把我的源代碼給刪掉了,致使build是個(gè)無效的鏈接,導(dǎo)致編譯不通過,后來我把

            對(duì)應(yīng)版本的源代碼裝上,并給其創(chuàng)建一個(gè)build鏈接復(fù)制到KDIR目錄下覆蓋無效的那個(gè)鏈接,編譯就成功。

            可通過以下命令安裝源代碼樹:

            1. [root@localhost ~]# uname -r  
            3.1.0-7.fc16.i686.PAE

            查詢當(dāng)前系統(tǒng)的內(nèi)核版本

            1. [root@localhost ~]# rpm -qa | grep kernel*  

            kernel-PAE-devel-3.3.0-4.fc16.i686
            kernel-PAE-3.3.0-4.fc16.i686
            kernel-headers-3.3.0-4.fc16.i686
            libreport-plugin-kerneloops-2.0.8-4.fc16.i686
            abrt-addon-kerneloops-2.0.7-2.fc16.i686
            kernel-devel-3.3.0-4.fc16.i686

            先查詢相關(guān)的內(nèi)核包。沒有當(dāng)前內(nèi)核版本的源代碼包和開發(fā)包。

            參照上面的格式把它安裝上。

            1. [root@localhost ~]# yum install kernel-PAE-devel-3.1.0-7.fc16.i686  
            1. [root@localhost ~]# yum install kernel-PAE-3.1.0-7.fc16.i686  
            安裝好后,/usr/src/kernels目錄下會(huì)有相應(yīng)版本的源代碼。


            條件都具備了就可以編譯模塊了。在hello.c文件目錄下執(zhí)行make命令就會(huì)調(diào)用Makefile來編譯。

            編譯好后,會(huì)生成一個(gè)內(nèi)核模塊hello.ko。這就是我們編譯好的內(nèi)核模塊,接下來加載它,并查看結(jié)果。

            1. [root@localhost demo]# insmod hello.ko  
            1. [root@localhost demo]# dmesg | tail -n 5  
            2. <span>[ 2445.017321] virbr0: port 2(vif1.0) entering forwarding state  
            3.   
            4. [ 2445.017439] virbr0: port 2(vif1.0) entering disabled state  
            5.   
            6. [ 2494.639683] hello: module license 'unspecified' taints kernel.  
            7.   
            8. [ 2494.639688] Disabling lock debugging due to kernel taint  
            9.   
            10. [ 2494.639841] Module init: Hello world!  
            11. </span>  

            最后一條消息就是我們編寫的模塊的輸出。

            posted on 2013-02-16 21:57 大龍 閱讀(4004) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲国产成人久久综合一区77 | 久久SE精品一区二区| 99久久综合狠狠综合久久| 77777亚洲午夜久久多喷| 美女写真久久影院| 精品久久久久久久久免费影院| 日本欧美国产精品第一页久久| 亚洲精品国产自在久久| 久久人人爽人人爽人人爽| 久久成人精品视频| 久久笫一福利免费导航| 久久综合久久综合久久| 亚洲国产精品久久久天堂| 久久成人精品| 成人久久久观看免费毛片| 伊人伊成久久人综合网777| 久久精品国产只有精品2020| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲香蕉网久久综合影视| AAA级久久久精品无码片| 看全色黄大色大片免费久久久| 久久久久久国产精品无码超碰| 久久精品免费网站网| 日本人妻丰满熟妇久久久久久| 久久五月精品中文字幕| 91视频国产91久久久| 漂亮人妻被黑人久久精品| 亚洲人成无码久久电影网站| 国产精品伦理久久久久久| 99久久国语露脸精品国产| 日日躁夜夜躁狠狠久久AV| 亚洲AV成人无码久久精品老人| 亚洲国产精品无码久久一线 | 亚洲愉拍99热成人精品热久久| 亚洲乱码日产精品a级毛片久久| 久久精品一区二区国产| 日韩人妻无码一区二区三区久久| 久久久亚洲欧洲日产国码aⅴ| 精品国产乱码久久久久久人妻| 伊人热热久久原色播放www| 亚洲国产精品无码久久九九|