커널 모듈 예제를 작성했는데 printk 가 찍히지 않습니다.
글쓴이: trymp / 작성시간: 월, 2017/12/11 - 4:11오후
/* callee.c */ #include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> int jj_add(int a, int b) { printk("[callee] jj_add called...\n"); return a + b; } int jj_sub(int a, int b) { printk("[callee] jj_sub called...\n"); return a - b; } EXPORT_SYMBOL(jj_add); EXPORT_SYMBOL(jj_sub); MODULE_LICENSE("GPL");
/* caller */ #include <linux/init.h> #include <linux/module.h> int jj_add(int, int); int jj_sub(int, int); int __init init_caller(void) { int x, y; printk("[caller] I'll call jj_add(), jj_sub() from callee.\n"); x = jj_add(3, 2); y = jj_sub(3, 2); printk("[caller] jj_add: %d\n", x); printk("[caller] jj_sub: %d\n", y); return 0; } void __exit exit_caller(void) { printk("jj exit \n"); } module_init(init_caller); module_exit(exit_caller); MODULE_LICENSE("GPL");
리눅스 3.xx 환경에서 위의 두개의 소스로 빌드를 해서
caller.ko 로 insmod 를 하였는데 printk 가 안찍힙니다.
jj_add(), jj_sub() 를 호출안하게 하면 윗줄 printk 는 찍히는데요.
다른 오브젝트에 있는 함수를 호출하면 printk 가 안보이는데
export_symbol 해 주었는데 무었이 문제인지 모르겟습니다.
아시는 분 조언 주시면 감사하겠습니다.
Forums:
callee 도 올리셨나요?
callee 도 올리셨나요?
callee 는 따로 callee.ko 로 있는게 아니라 같이 포함시켜 빌드했습니다.
ㄱㄱ
nm caller.ko | grep " [tTuU]
nm caller.ko | grep " [tTuU] "
댓글 달기