소스 구조가 아래와 같습니다.
timer/timer.c
dummy/dummy.c
아래와 같이 구현하면 정상적으로 동작할까요?
timer/timer.c
dummy/dummy.c
정답은 실패한다 입니다.
리눅스 커널에서는 외부에 공개할 함수는 EXPORT_SYMBOL 이라는 매크로를 사용하여 지정해 주어야 합니다.
위 소스들은 아래와 같이 수정하면 정상 동작합니다.
timer/timer.c
dummy/dummy.c
참고로 static 함수는 EXPORT_SYMBOL 매크로를 사용해도 외부에서 접근할 수 없습니다. 왜냐면 static 이기 때문입니다.
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 이기 때문입니다.
'development' 카테고리의 다른 글
[kernel] module_init(), module_exit() (0) | 2011.11.17 |
---|---|
[kernel] obj-y ? obj-m ? obj-$(CONFIG_TEST) ? (1) | 2011.11.08 |
[kernel] 커널에 새로운 작업 디렉토리를 추가하고 싶다면 (0) | 2011.11.07 |
[program] memmove (0) | 2011.10.27 |
[kernel] struct list_head (0) | 2011.10.26 |