소스 구조가 아래와 같습니다. 

timer/timer.c
dummy/dummy.c

아래와 같이 구현하면 정상적으로 동작할까요?

timer/timer.c
#include <linux/init.h>

int timer(void)
{
  printk(KERN_ALERT "%s()\n", __FUNCTION__);

 

dummy/dummy.c
#include <linux/init.h>
#include "timer/timer.h"

int dummy(void)
{
  timer();

 

정답은 실패한다 입니다. 

리눅스 커널에서는 외부에 공개할 함수는 EXPORT_SYMBOL 이라는 매크로를 사용하여 지정해 주어야 합니다. 

위 소스들은 아래와 같이 수정하면 정상 동작합니다. 


 
timer/timer.c
#include <linux/init.h>

int timer(void)
{
  printk(KERN_ALERT "%s()\n", __FUNCTION__);


EXPORT_SYMBOL(timer);
 

dummy/dummy.c
#include <linux/init.h>
#include "timer/timer.h"

int dummy(void)
{
  timer();

 

참고로 static 함수는 EXPORT_SYMBOL 매크로를 사용해도 외부에서 접근할 수  없습니다. 왜냐면 static 이기 때문입니다.

 
블로그 이미지

김유석0

,