向kernel module 傳遞引數(Passing Arugments to Kernel Module)

JUAN425發表於2014-08-15

在Linux中, 建立hello2.c, 檔案內容如下:

#include <linux/init.h> 
#include <linux/module.h>
//step 1 include a file
#include <linux/moduleparam.h>
//step 2 create a variable
int param_var = 0;

//step 3 register (macro)
//module_param(name_var, type, permissions) : register variable name_var
module_param(param_var, int, S_IRUSR | S_IWUSR); // this variable can be read and written to

void display() {
    printk(KERN_ALERT  "Test:: param_var = %d", param_var);
}
/*
 R stands for reading, W stands for writing , X stands for execution(第三個字母(不看下劃線)), USR stands for user, GRP stands for group user
   S_IRUSR
   S_IWUSR
   S_IXUSR
   S_IRGRP
   S_IWGRP
   
   S_TRUSR | S_TWUSR : sue combination
*/

stactic void hello_init(void) 
    //purpose is to register functionalities & allocate resources
    printk(KERN_ALERT "Test:: Hello world \n")
    return 0;
}

static void hello_exit(void) {
    printk(KERN_ALERT  "Test:: Good bye");
}

module_init(hello_init);
module_exit(hello_exit);

接下來, make, 編譯上述檔案。 我們需要切換到超級使用者才可以。 sudo。


這樣我們生成了module。 下面將其插入到kernel中去。 我們需要module傳遞引數(param_var)具體的值。

指令如下:

insmod hello2.ko  param_var = 213t6


然後我們dmsg, 則出現結果(略)。


我們也可以使用一個陣列來儲存我們想要儲存的值, 程式如下:

hello3.c

#include <linux/init.h> 
#include <linux/module.h>
//step 1 include a file
#include <linux/moduleparam.h>
//step 2 create a variable
int param_var[3] = {0, 0, 0};

//step 3 register (macro)
//module_param(name_var, type,NULL,  permissions) : register variable name_var
module_param_array(param_var, int, 3, S_IRUSR | S_IWUSR); // this variable can be read and written to , 3 position  the number of parameters

void display() {
    printk(KERN_ALERT  "Test:: param_var = %d", param_var[0]);
    printk(KERN_ALERT  "Test:: param_var = %d", param_var[1]);
    printk(KERN_ALERT  "Test:: param_var = %d", param_var[2]);
}
/*
 R stands for reading, W stands for writing , X stands for execution(第三個字母(不看下劃線)), USR stands for user, GRP stands for group user
   S_IRUSR
   S_IWUSR
   S_IXUSR
   S_IRGRP
   S_IWGRP
   
   S_TRUSR | S_TWUSR : sue combination
*/

stactic void hello_init(void) 
    //purpose is to register functionalities & allocate resources
    printk(KERN_ALERT "Test:: Hello world \n")
    return 0;
}

static void hello_exit(void) {
    printk(KERN_ALERT  "Test:: Good bye");
}

module_init(hello_init);
module_exit(hello_exit);

執行:

接下來, make, 編譯上述檔案。 我們需要切換到超級使用者才可以。 sudo。


這樣我們生成了module。 下面將其插入到kernel中去。 我們需要module傳遞引數(param_var)具體的值。

指令如下:

insmod hello3.ko  param_var =  12, 13,  356

等等, 步驟同上。

執行完成之後, remove the module。

rmmodule hello3.ko

然後顯示: 

dmsg

顯示內容略。








相關文章