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

            小默

            [轉(zhuǎn)]module_param(name, type, perm)的理解 //TODO

            http://www.ruixuedz.com.cn/article/dc/155.html
            ---------------------------------------------------------------------
            module_param(name, type, perm)是一個(gè)宏,向當(dāng)前模塊傳入?yún)?shù),對(duì)源碼分析如下

            在include\linux\moduleparam.h中

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

            #define module_param_named(name, value, type, perm)               \
                param_check_##type(name, &(value));                   \
                module_param_call(name, param_set_##type, param_get_##type, &value, perm); \
                __MODULE_PARM_TYPE(name, #type)



            #define module_param_call(name, set, get, arg, perm)                  \
                __module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm)


            #define __module_param_call(prefix, name, set, get, arg, perm)        \
                /* Default value instead of permissions? */            \
                static int __param_perm_check_##name __attribute__((unused)) =    \
                BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2));    \
                static char __param_str_##name[] = prefix #name;        \
                static struct kernel_param const __param_##name            \
                __attribute_used__                        \
                __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \
                = { __param_str_##name, perm, set, get, arg }



            __attibute__ 是gcc的關(guān)鍵字,可參考
            http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html
            __attibute__將參數(shù)編譯到__param段中,

            module_param是一步一步展開(kāi)的,
            上面幾個(gè)宏在include\linux\moduleparam.h中的順序剛好相反

            module_param宏的類(lèi)似函數(shù)調(diào)用的順序
            module_param->module_param_named->module_param_call->__module_param_call

            展開(kāi)的順序正好相反
            __module_param_call->module_param_call->module_param_named->module_param



            type類(lèi)型可以是byte,short,ushort,int,
            uint,long,ulong,charp(注:字符指針),bool,invbool,
            perm表示此參數(shù)在sysfs文件系統(tǒng)中所對(duì)應(yīng)的文件節(jié)點(diǎ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

            當(dāng)perm為0時(shí),表示此參數(shù)不存在 sysfs文件系統(tǒng)下對(duì)應(yīng)的文件節(jié)點(diǎn)。

            posted on 2010-05-18 22:44 小默 閱讀(1227) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Linux

            導(dǎo)航

            統(tǒng)計(jì)

            留言簿(13)

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

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            漂亮人妻被中出中文字幕久久| 热久久视久久精品18| 狠狠色婷婷综合天天久久丁香 | 亚洲国产精品婷婷久久| 国产精品久久久99| 久久午夜无码鲁丝片秋霞| 亚洲人成网亚洲欧洲无码久久| 国产精品久久久久影院色| 久久精品中文字幕第23页| 日韩人妻无码精品久久久不卡 | 国产A级毛片久久久精品毛片| 久久99精品国产99久久| 精品久久久久久久国产潘金莲| 国内精品久久久久久久97牛牛| 伊人热热久久原色播放www | 色综合久久无码中文字幕| 精品久久久久久国产免费了| 久久久久亚洲精品天堂| 久久频这里精品99香蕉久| 狠狠久久综合伊人不卡| 999久久久免费精品国产| 久久久久久久精品妇女99| 久久久WWW成人| 国产精品久久久久一区二区三区| 波多野结衣AV无码久久一区| 人妻丰满?V无码久久不卡| 久久黄色视频| 国产69精品久久久久99| 久久中文娱乐网| 国产精品99久久久久久宅男 | 久久精品aⅴ无码中文字字幕重口| 亚洲精品乱码久久久久久不卡| 久久99精品久久久久久水蜜桃 | 欧美精品九九99久久在观看| 精品久久久久久无码免费| 91久久香蕉国产熟女线看| 国产激情久久久久影院小草 | 精品久久久无码中文字幕| 四虎国产精品免费久久5151| 国产日产久久高清欧美一区| 国产精品久久免费|