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

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

    • 分享

      linux模塊編程

       木芙蓉的圖書館 2011-05-26

      Linux內(nèi)核模塊介紹

      時間:2010-11-02 09:19:52  來源:  作者:

      Linux 內(nèi)核是一個龐大的工程,做為驅(qū)動開發(fā)工程師又怎么入手呢,是不是我們每次開發(fā)一個模塊程序都要重新編譯內(nèi)核呢?如果是這樣,那將是一件比較頭痛的事情,還好,聰明的Linux 具有一項比較智能編譯選項,可以將我們開發(fā)的驅(qū)動模塊做為一個模塊,單獨編譯和單獨加載,卸載。那我們下面來看看Linux內(nèi)核模塊結(jié)構(gòu)。

        一、模塊加載函數(shù):  (必須)

        module_init(initialization_funciton);

        二、模塊卸載函數(shù):   (必須)

        module_exit(cleanup_function);

        三、模塊參數(shù):

        module_param(參數(shù)名,參數(shù)類型,參數(shù)讀/寫權(quán)限)

        在模塊插入時: insmod   模塊名   參數(shù)名=參數(shù)值

        eg:

        static char *book_name = " Linux 設(shè)備驅(qū)動 ";

        static  int num = 4000;

        module_param(num, int , S_IRUGO);

        module_param(book_neme ,charp, S_IRUGO);

        參數(shù)類型:  byte, short, ushort, int uint, long , ulong, charp(字符指針), bool,

        四、導(dǎo)出符號   (建議有)

        EXPORT_SYMBOL( 符號名/函數(shù)名)

        EXPORT_SYMBOL_GPL(符號名 /函數(shù)命)

        五、模塊聲明

        MODULE_LICENSE(" Dual BSD/GPL ");

        MODULE_AUTHOR (" XXXXX");

        MODULE_DESCRIPTION("XXXXX DRIVER");

        MODULE_VERSION(" XXXX VERSION");

        MODULE_DEVICE_TABLE(TABLE_INFO);

        MODULE_ALISA(XXXXXXX);

        六、驅(qū)動模塊的編譯

        開發(fā)好的模塊程序可以和內(nèi)核一起編譯,也就是將模塊編譯進內(nèi)核,也可以將模塊單獨編譯成一個獨立的模塊。為了開發(fā)的方便性,我們把驅(qū)動程序編譯成模塊,怎么編譯呢?編譯成什么格式呢?在Linux 中我們都是借助頂級目錄的Makefile 來編譯我們寫的驅(qū)動程序, 我可以自己寫一個Makefile 來編譯我們寫的驅(qū)動:

        eg:

        obj-m := xxx.o

        xxx.o-objs := xxx1.o xxx2.o

        make -C "Linux 源碼頂級Makefiel路徑" M = ‘pwd’  modules

        clean:

        rm -rf  *.o

        下面看看一個簡單的模塊程序:

        #include <linux/module.h>

        #include <linux/init.h>

        MOUDULE_LICENSE(" Dual BSD/GPL");

        static int hello_init(void)

        {

        printk( KERN_ALERT " hello world enter n");

        return 0;

        }

        static void hello_exit(void)

        {

        printk(KERN_ALERT " hello world exit  n");

        }

        module_init(hello_init);

        module_exit(hello_exit);

        MODULE_AUTHOR("Larry");

        MODULE_VERSION(" V2.0");

        MODULE_DESCRIPTION(" Hello World test driver");

        當我們編寫完代碼后可以按以下步驟操作:

        A 編譯:   make

        B 在我們的目標板上插入模塊: insmod xxx.ko

        C 退出時執(zhí)行:               rmmod  xxx

       一、模塊加載函數(shù):  (必須)
        module_init(initialization_funciton);
        二、模塊卸載函數(shù):   (必須)
        module_exit(cleanup_function);
        三、模塊參數(shù):
        module_param(參數(shù)名,參數(shù)類型,參數(shù)讀/寫權(quán)限)
        在模塊插入時: insmod   模塊名   參數(shù)名=參數(shù)值
        eg:
        static char *book_name = " Linux 設(shè)備驅(qū)動 ";
        static  int num = 4000;
        module_param(num, int , S_IRUGO);
        module_param(book_neme ,charp, S_IRUGO);
        參數(shù)類型:  byte, short, ushort, int uint, long , ulong, charp(字符指針), bool,
        四、導(dǎo)出符號   (建議有)
        EXPORT_SYMBOL( 符號名/函數(shù)名)
        EXPORT_SYMBOL_GPL(符號名 /函數(shù)命)
        五、模塊聲明
        MODULE_LICENSE(" Dual BSD/GPL ");
        MODULE_AUTHOR (" XXXXX");
        MODULE_DESCRIPTION("XXXXX DRIVER");
        MODULE_VERSION(" XXXX VERSION");
        MODULE_DEVICE_TABLE(TABLE_INFO);
        MODULE_ALISA(XXXXXXX);
        六、驅(qū)動模塊的編譯
        開發(fā)好的模塊程序可以和內(nèi)核一起編譯,也就是將模塊編譯進內(nèi)核,也可以將模塊單獨編譯成一個獨立的模塊。為了開發(fā)的方便性,我們把驅(qū)動程序編譯成模塊,怎么編譯呢?編譯成什么格式呢?在Linux 中我們都是借助頂級目錄的Makefile 來編譯我們寫的驅(qū)動程序, 我可以自己寫一個Makefile 來編譯我們寫的驅(qū)動:
        eg:
        obj-m := xxx.o
        xxx.o-objs := xxx1.o xxx2.o
        make -C "Linux 源碼頂級Makefiel路徑" M = ‘pwd’  modules
        clean:
        rm -rf  *.o
        下面看看一個簡單的模塊程序:
        #include <linux/module.h>
        #include <linux/init.h>
        MOUDULE_LICENSE(" Dual BSD/GPL");
        static int hello_init(void)
        {
        printk( KERN_ALERT " hello world enter n");
        return 0;
        }
        static void hello_exit(void)
        {
        printk(KERN_ALERT " hello world exit  n");
        }
        module_init(hello_init);
        module_exit(hello_exit);
        MODULE_AUTHOR("Larry");
        MODULE_VERSION(" V2.0");
        MODULE_DESCRIPTION(" Hello World test driver");
        當我們編寫完代碼后可以按以下步驟操作:
        A 編譯:   make
        B 在我們的目標板上插入模塊: insmod xxx.ko
        C 退出時執(zhí)行:               rmmod  xxx

      本篇文章來自<A href='http://www.'>IDC專家網(wǎng)</a> 原文鏈接:http://www./articles/1215484977397/20101101/1215945767022_1.html

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多