1. 程式人生 > >module_param 用於動態開啟/關閉 驅動打印信息

module_param 用於動態開啟/關閉 驅動打印信息

裝載 沒有 實現 但是 mod insmod \n alias 我們

1.定義模塊參數的方法:

module_param(name, type, perm);

其中,name:表示參數的名字; type:表示參數的類型; perm:表示參數的訪問權限;

type參數設定的類型和perm的訪問權限具體數值數值請參考內核定義。

2、可以在insmod(裝載模塊)的時候為參數指定值,如果沒有指定則使用默認值

static int num=10;
module_param(num,int,S_IRUGO);
static int hello_init(void)
{
    printk("Hello module init./n");
    printk(
"num=%d/n",num); return 0; } static void hello_exit(void) { printk("Goodbye module exit./n"); } module_init(hello_init); module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION(
"a simple module"); MODULE_ALIAS("hello");

上面的num=10,則10是參數num的默認值。

保存為源文件hello.c, 編譯生成hello.ko , 當我們使用insmod進行載入時, 使用

insmod hello.ko num=20

則可以 cat /sys/module/hello/parameters/num ,看到為 20

3、驅動的打印調試信息正常情況下我們並不希望看到,但是出現錯誤的情況下還是需要查看的,可使用以下方法:

static int num=0;
module_param(num,int,S_IRUGO);

/* 驅動運行中調用的操作 */
int fun_test()
{
    if(num)
    {
        printk("This is a test!\n");
    }
}

static int hello_init(void)
{
    printk(
"Hello module init./n"); printk("num=%d/n",num); return 0; } static void hello_exit(void) { printk("Goodbye module exit./n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("Dual BSD/GPL"); MODULE_DESCRIPTION("a simple module"); MODULE_ALIAS("hello");


默認運行中不會出現打印信息“This is a test”。

查看 /sys/modules/hello/parameters/num參數,默認數值是0,

echo 1 > /sys/modules/hello/parameters/num    #打開調試信息打印
echo 0 > /sys/modules/hello/parameters/num    #關閉調試信息打印


以上操作即可以實現動態關閉/打開調試信息

module_param 用於動態開啟/關閉 驅動打印信息