国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Linux之module_param()函數(shù)學(xué)習(xí)
long, charp, bool or invbool, or XXX if you define param_get_XXX,
   param_set_XXX and param_check_XXX.

*/
   #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(name, type, perm)               
    module_param_named(name, name, type, perm)
由此可知 module_param的實(shí)現(xiàn)是通過(guò)module_param_named(name, name, type, perm)的。
3.module_param使用了3個(gè)參數(shù):變量名,它的類型,以及一個(gè)權(quán)限掩碼用來(lái)做一個(gè)輔助的sysfs入口。
這個(gè)宏定義應(yīng)當(dāng)放在任何函數(shù)之外,典型地是出現(xiàn)在源文件的前面。
eg: static char *whom="world"
    static int    tige=1;
    module_param(tiger,int,S_IRUGO);
    module_param(whom,charp,S_IRUGO);
4.模塊參數(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 開(kāi)頭的是無(wú)符號(hào)值.
5.數(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ù)組能放下的多的值.

Tiger-John說(shuō)明:

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ù)值也改變了, 但是你的模塊沒(méi)有任何其他的通知. 你應(yīng)當(dāng)不要使模塊參數(shù)可寫,除非你準(zhǔn)備好檢測(cè)這個(gè)改變并且因而作出反應(yīng).


二實(shí)例:

說(shuō)了這么多,看一個(gè)程序體驗(yàn)以下:

1.module_param.c

view plaincopy to clipboardprint?
/* 
*   file name : module_param.c 
*   author    : tiger-John    
*/
#include<linux/init.h> 
#include<linux/module.h> 
#include<linux/kernel.h>  
MODULE_LICENSE("GPL");  
static char *who;  
static int  times;  
module_param(who,charp,0644);  
module_param(times,int,0644);  
static int __init hello_init(void)  
{  
    int i;  
    for(i = 1;i <= times;i++)  
    printk("%d  %s!\n",i,who);  
    return 0;  
}  
static void __exit hello_exit(void)  
{  
    printk("Goodbye,%s!\n",who);  
}  
module_init(hello_init);  
module_exit(hello_exit); 
/*
*   file name : module_param.c
*   author    : tiger-John  
*/
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
MODULE_LICENSE("GPL");
static char *who;
static int  times;
module_param(who,charp,0644);
module_param(times,int,0644);
static int __init hello_init(void)
{
 int i;
 for(i = 1;i <= times;i++)
 printk("%d  %s!\n",i,who);
 return 0;
}
static void __exit hello_exit(void)
{
 printk("Goodbye,%s!\n",who);
}
module_init(hello_init);
module_exit(hello_exit);


2.編寫Makefile文件

view plaincopy to clipboardprint?
1 obj-m:=module_param.o  
2 CURRENT_PATH:=$(shell pwd)  
3 VERSION_NUM :=$(shell uname -r)  
4 LINUX_PATH  :=/usr/src/linux-headers-$(VERSION_NUM)  
5   
6 all :  
7         make -C $(LINUX_PATH) M=$(CURRENT_PATH) modules  
8 clean :  
9          make -C $(LINUX_PATH) M=$(CURRENT_PATH) clean 
  1 obj-m:=module_param.o
  2 CURRENT_PATH:=$(shell pwd)
  3 VERSION_NUM :=$(shell uname -r)
  4 LINUX_PATH  :=/usr/src/linux-headers-$(VERSION_NUM)
  5
  6 all :
  7         make -C $(LINUX_PATH) M=$(CURRENT_PATH) modules
  8 clean :
  9          make -C $(LINUX_PATH) M=$(CURRENT_PATH) clean
 


3.在終端輸入:make

4 .加載模塊: sudo insmdo module_param.ko who=tiger times=4


5.dmesg :查看結(jié)果。


過(guò)程實(shí)例:

a.在終端輸入:make


think@Ubuntu:~/module_param$ make
make -C /usr/src/linux-headers-2.6.32-25-generic M=/home/think/module_param modules
make[1]: 正在進(jìn)入目錄 `/usr/src/linux-headers-2.6.32-25-generic'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]:正在離開(kāi)目錄 `/usr/src/linux-headers-2.6.32-25-generic'
think@Ubuntu:~/module_param$

b.在終端輸入: sudo insmod module_param.ko who=tiger times=4

think@Ubuntu:~/module_param$ sudo insmod module_param.ko who=tiger times=4

c 在終端輸入:dmesg

[ 4297.711137] 1  tiger!
[ 4297.711139] 2  tiger!
[ 4297.711140] 3  tiger!
[ 4297.711141] 4  tiger!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
17. 內(nèi)核參數(shù)解析
Linux內(nèi)核module
module
ldd3之模塊學(xué)習(xí)總結(jié)(頁(yè) 1) - 文檔專區(qū) - 無(wú)分類文檔 - Linux論壇 - p...
Ubuntu下module_param()j解釋與實(shí)例
驅(qū)動(dòng)程序用到的頭文件linux/include/linux/init.h(基于linux ...
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服