4. 모듈 파라미터 처리

모듈은 command line에서 인자들을 받을  있다인자를 모듈로 넘기기 위해서는 module_param() 매크로를 사용하여 변          .     “ insmod

hello_world_parm.ko myarg1=1같이 int형의 하나의 인자를 넘기기 위해서는 커널의 모듈 코드에 다음과 같이 선언해야 한다.

 

int myarg1 = 0

module_param(myarg1, int, 0);

 

module_parm 매크로는 변수의 이름타입, sysfs 관련된 파일의 permission 이렇게 3개의 인자를 갖는다. 인자로 배열을 넘기는 방법은 약간 다르다먼저 매크로는

module_param_array 사용하며 4개의 인자를 갖는다. 3번째 인자로 배열의 갯수를 받을  있는 변수를 추가되었다.

 

int myarg2 [4];

int count;

module_parm_array(myarg2, int, &count , 0);

 

인자의 갯수를 특별히 받고 싶지 않다면 단순히 NULL 사용하면 된다.

다음모듈의 파라미터를 설명하기 위한 MODULE_PARM_DESC() 매크로가 있다이것은 모듈을 사용하는 사람을 위해서 인자를 설명하기 위한 방법이다이것은 변수의 이름과  변수를 설명하는 문자열을 받게 된다.

 

MODULE_PARM_DESC(myarg2, "This is int array forI/O port data");

위의 모든 것을  포함해서 hello_world2 만들어 보자.

 

#include <linux/module.h>

#include <linux/moduleparam.h>

#include <linux/kernel.h>

#include <linux/init.h>

#include <linux/stat.h>

 

MODULE_LICENSE("GPL");

MODULE_AUTHOR("you");

 

static int argint = 1;

static char *argstring = "This is a string";

static int argarray[2] = { 0, };

static int size_argarray= 0;

 

 

module_param(argint, int, S_IRUSR | S_IWUSR |

S_IRGRP | S_IWGRP);

MODULE_PARM_DESC(argint, "A short integer");

module_param(argstring, charp, 0000);

MODULE_PARM_DESC(argstring, "A character string");

module_param_array(argarray, int, &size_argarray,

0000);

MODULE_PARM_DESC(argarray, "An array of

integers");

 

 

static int __init hello_init(void)

{

int i;

printk(KERN_EMERG "argint : %d ", argint);

printk(KERN_EMERG "argstring : %s ", argstring);

for (i = 0; i < (sizeof (argarray) / sizeof (int)); i++)

{

printk(KERN_INFO "argarray [%d] : %d ", i,

argarray [i]);

}

printk(KERN_INFO "argarrary size : %d ",size_argarray);

return 0;

}

static void __exit hello_exit(void)

{

printk(KERN_EMERG "Goodbye, world ");

}

module_init(hello_init);

module_exit(hello_exit);

 

 

위의 코드를 컴파일   실행하기 전에 modinfo 통해 모듈의 정보를 확인해보자.

 

root@barrios-desktop:~/example/module2# modinfo

hello_world.ko

filename: hello_world.ko

license: GPL

author: you

vermagic: 2.6.18 SMP mod_unload 586 REGPARM gcc-4.1

depends:

srcversion: 300231DCA83E809D0F54644

parm: argarray:An array of integers (array of int)

parm: argstring:A character string (charp)

parm: argint:A short integer (int)

 

 

위와 같이 이전에 비하여 많은 정보들이 출력되는 것을  수 있다 중에는 여러분들이 파라미터를 설명하는문자열도 출력된다이번에는 모듈을 로드해보자무엇이 출력되는가?

 

root@barrios-desktop:~/example/module2# insmod

hello_world.ko argint=100 argstring="hey"

argarray=100,200

여러분들의 예상이 맞는가?


출처 : http://www.linux.co.kr/home2/board/bbs/board.php?bo_table=lecture&wr_id=1640&sca=1&sca2=32

+ Recent posts