아래와 같이 구현하면 어떻게 될까요?

Makefile

MODULE=multi_init

obj-m := $(MODULE).o
$(MODULE)-objs += check_money.o
$(MODULE)-objs += get_money.o
$(MODULE)-objs += put_money.o

KERNEL_DIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

all: 

     $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules

clean: 

     rm -rf *.o *.ko *mod.c .*cmd .*versions Module.symvers modules.order  

 
check_money.c
#include <linux/init.h>
#include <linux/module.h>

int check_money_init(void)
{
  printk(KERN_ALERT "%s() : called\n", __FUNCTION__);
  return 0;
}

void check_money_exit(void)
{
  printk(KERN_ALERT "%s() : bye\n", __FUNCTION__);
}

module_init(check_money_init);
module_exit(check_money_exit);
MODULE_LICENSE("Dual BSD/GPL");
 
get_money.c
#include <linux/init.h>
#include <linux/module.h>

int get_money_init(void)
{
  printk(KERN_ALERT "%s() : called\n", __FUNCTION__);
  return 0;


void get_money_exit(void)
{
  printk(KERN_ALERT "%s() : bye\n", __FUNCTION__);
}

module_init(get_money_init);
module_exit(get_money_exit);
MODULE_LICENSE("Dual BSD/GPL"); 
  
put_money.c
#include <linux/init.h>
#include <linux/module.h>

int put_money_init(void)
{
  printk(KERN_ALERT "%s() : called\n", __FUNCTION__);
  return 0;


void put_money_exit(void)
{
  printk(KERN_ALERT "%s() : bye\n", __FUNCTION__);
}

module_init(put_money_init);
module_exit(put_money_exit);
MODULE_LICENSE("Dual BSD/GPL"); 
   


컴파일 하면 에러 납니다. 


module_init(), module_exit() 는 한 모듈당 하나씩만 사용 가능합니다.

가끔씩 이거 물어 보시는 분들이 있어서 정리해 놓았습니다.


 


블로그 이미지

김유석0

댓글을 달아 주세요