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

            天下

            記錄修行的印記

            module_param()說(shuō)明

            module_param()說(shuō)明
            在用戶態(tài)下編程可以通過(guò)main()的來(lái)傳遞命令行參數(shù),而編寫一個(gè)內(nèi)核模塊則通過(guò)module_param() 
            module_param宏是Linux 
            2.6內(nèi)核中新增的,該宏被定義在include/linux/moduleparam.h文件中,具體定義如下:

            #define module_param(name, type, perm)      \
                module_param_named(name, name, type, perm)

            其中使用了 
            3 個(gè)參數(shù):要傳遞的參數(shù)變量名, 變量的數(shù)據(jù)類型, 以及訪問(wèn)參數(shù)的權(quán)限。

            perm參數(shù)的作用是什么?

            最后的 module_param 字段是一個(gè)權(quán)限值,表示此參數(shù)在sysfs文件系統(tǒng)中所對(duì)應(yīng)的文件節(jié)點(diǎn)的屬性。你應(yīng)當(dāng)使用 
            <linux/stat.h> 中定義的值. 這個(gè)值控制誰(shuí)可以存取這些模塊參數(shù)在 sysfs 中的表示.當(dāng)perm為0時(shí),表示此參數(shù)不存在 sysfs文件系統(tǒng)下對(duì)應(yīng)的文件節(jié)點(diǎn)。 否則, 模塊被加載后,在/sys/module/ 目錄下將出現(xiàn)以此模塊名命名的目錄, 帶有給定的權(quán)限.。
            權(quán)限在include
            /linux/stat.h中有定義
            比如:
            #define S_IRWXU 00700
            #define S_IRUSR 00400
            #define S_IWUSR 00200
            #define S_IXUSR 00100

            #define S_IRWXG 00070
            #define S_IRGRP 00040
            #define S_IWGRP 00020
            #define S_IXGRP 00010

            #define S_IRWXO 00007
            #define S_IROTH 00004
            #define S_IWOTH 00002
            #define S_IXOTH 00001

            使用 S_IRUGO 作為參數(shù)可以被所有人讀取, 但是不能改變; S_IRUGO
            |S_IWUSR 允許 root 來(lái)改變參數(shù). 注意, 如果一個(gè)參數(shù)被 sysfs 修改, 你的模塊看到的參數(shù)值也改變了, 但是你的模塊沒有任何其他的通知. 你應(yīng)當(dāng)不要使模塊參數(shù)可寫, 除非你準(zhǔn)備好檢測(cè)這個(gè)改變并且因而作出反應(yīng).

            >>> 

            這個(gè)宏定義應(yīng)當(dāng)放在任何函數(shù)之外, 典型地是出現(xiàn)在源文件的前面.定義如:

            static char *whom = "world";
            static int howmany = 1;
            module_param(howmany, 
            int, S_IRUGO);
            module_param(whom, charp, S_IRUGO);

            模塊參數(shù)支持許多類型:
            bool 
            invbool 
            一個(gè)布爾型( 
            true 或者 false)值(相關(guān)的變量應(yīng)當(dāng)是 int 類型). invbool 類型顛倒了值, 所以真值變成 false, 反之亦然. 

            charp :一個(gè)字符指針值. 內(nèi)存為用戶提供的字串分配, 指針因此設(shè)置. 
            int 
            long 
            short 
            uint 
            ulong 
            ushort 
            基本的變長(zhǎng)整型值. 以 u 開頭的是無(wú)符號(hào)值. 

            數(shù)組參數(shù), 用逗號(hào)間隔的列表提供的值, 模塊加載者也支持. 聲明一個(gè)數(shù)組參數(shù), 使用: 
            module_param_array(name,type,num,perm); 

            這里 name 是你的數(shù)組的名子(也是參數(shù)名), 
            type 是數(shù)組元素的類型, 
            num 是一個(gè)整型變量, 
            perm 是通常的權(quán)限值. 

            如果數(shù)組參數(shù)在加載時(shí)設(shè)置, num 被設(shè)置成提供的數(shù)的個(gè)數(shù). 模塊加載者拒絕比數(shù)組能放下的多的值. 

            測(cè)試模塊,源程序hello.c內(nèi)容如下: 

            #include 
            <linux/init.h> 
            #include 
            <linux/module.h>
            #include 
            <linux/moduleparam.h>         

            MODULE_LICENSE(
            "Dual BSD/GPL");     

            static char *who= "world";             
            static int times = 1;       
            module_param(times,
            int,S_IRUSR);     
            module_param(who,charp,S_IRUSR);   

            static int hello_init(void)       
            {
                
            int i;
                
            for(i=0;i<times;i++)
                   printk(KERN_ALERT 
            "(%d) hello, %s!\n",i,who);
                 
            return 0;
            }

            static void hello_exit(void
            {
                printk(KERN_ALERT
            "Goodbye, %s!\n",who);
            }

            module_init(hello_init);
            module_exit(hello_exit);

            編譯生成可執(zhí)行文件hello

            插入: 
            # insmod hello.ko who
            ="world" times=5 

            出現(xiàn)5次
            "hello,world!": 

            #(
            1)hello,world! 
            #(
            2)hello,world! 
            #(
            3)hello,world! 
            #(
            4)hello,world! 
            #(
            5)hello,world! 

            卸載: 
            # rmmod hello 

            出現(xiàn): 
            #Goodbye,world
            !

            posted on 2012-11-06 15:54 天下 閱讀(591) 評(píng)論(0)  編輯 收藏 引用 所屬分類: kernel & Driver

            <2012年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評(píng)論

            久久99精品久久久久久秒播| 日本精品久久久中文字幕| 久久亚洲中文字幕精品一区四 | 伊人久久一区二区三区无码| 久久久久久久久久久精品尤物 | 久久乐国产综合亚洲精品| 无码人妻精品一区二区三区久久 | 久久精品国产亚洲5555| 亚洲国产精品成人久久| 亚洲综合久久综合激情久久| 亚洲欧洲精品成人久久奇米网| 久久国产精品77777| 亚洲国产成人久久综合一区77| 久久99国产综合精品| 久久久精品久久久久影院| yellow中文字幕久久网| 久久亚洲精品无码AV红樱桃| 久久亚洲精品国产亚洲老地址 | 精品无码久久久久久久动漫| 国产精品无码久久综合| 99久久精品免费看国产一区二区三区| 精品久久久久久亚洲| 久久青青草原精品国产| 久久久久人妻一区二区三区| 久久精品国产国产精品四凭| 一级做a爰片久久毛片人呢| 亚洲va久久久噜噜噜久久| 伊人久久国产免费观看视频| 久久精品一区二区影院| 久久精品中文字幕一区| 四虎国产精品免费久久久| 99精品久久精品一区二区| 无码人妻久久一区二区三区免费丨| 综合久久一区二区三区 | 久久久久人妻一区精品性色av| 国产成年无码久久久免费| 久久九九兔免费精品6| 久久精品国产亚洲av麻豆蜜芽| 日韩欧美亚洲综合久久| 久久亚洲精品无码aⅴ大香| 久久久久久曰本AV免费免费|