모듈은 커맨드 라인 인자를 받을 수 있다. 인자를 모듈로 넘기기 위해서는 커맨드 라인 인자의 값을 저장할 변수를 전역으로 선안한 후 메커니즘을 활성화 시키기 위해 MODULE_PARM() 매크로를 사용한다. 실행 시간에 insmod는 주어진 인자로 변수를 채울 것이다. 변수의 선언과 매크로들은 명확성을 위해 모듈 서두에 위치해야 한다.

MODULE_PARM() 매크로는 2개의 인자를 받는다. 변수의 이름과 타입이다.
타입 : byte "b" // short int "h" // integer "i" // long "l" // string "s"
문자열은 "char *"로 해야 하며, insmod는 그 문자열을 위한 메모리를 할당한다. 늘 변수를 초기화하는 습관을 갖길 권한다. 이것은 커널 코드이므로 반드시 방어적으로 프로그래밍 해야한다.

MODULE_PARM()은 배열 역시 지원된다. '-'에 의해 분리된 두 번호는 최대 최소값을 알려준다.

// 2.4
#include <linux/module.h>
#include <linux/kernel.h>

static int  onevalue = 1;
static char  *twostring = NULL;

MODULE_PARM(onevalue, "i");
MODULE_PARM(twostring, "s");

int init_module(void)
{
  printk("onevalue = [%d]\n", onevalue);
  printk("twostring = [%s]\n", twostring);

  return 0;
}

void cleanup_module(void)
{
  printk("Remove...\n");
}

MODULE_AUTHOR("장난감");
MODULE_DESCRIPTION("이 장난감은...");
MODULE_LICENSE("GPL")
/*
 * 실행
 * insmod test.o onevalue=0x64 twostring="test..."
 */


// 2.6
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/moduleparam.h>

static int onevalue = 1;
static char *twostring = NULL;

module_param(onevalue, int0);
module_param(twostring, charp, 0);

int init_test(void)
{
  printk("onevalue = [%d]\n", onevalue);
  printk("twostring = [%s]\n", twostring);

  return 0;
}

void exit_test(void)
{
  printk("Remove...\n");
}

module_init(init_test);
module_exit(exit_test);
MODULE_LICENSE("GPL");

/*
 * 실행
 * insmod test.ko onevalue=0x64 twostring="test..."
 */






+ Recent posts