모듈 컴파일시 "CPL 라이센스" 관련 메시지가 뜹니다.
글쓴이: midasyoo / 작성시간: 월, 2003/09/29 - 10:44오후
초보라서 고수님들께 여쭤봅니다.
일반 리눅스 PC상에서 hello_world.c라는 파일을 만들어서 Makefile을 실행시켰더니 아래와 같은 메시지가 뜹니다.
- 아래 -
hello_world.c 파일 내용입니다.
/* * Hello, world module */ #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> /* init_module function */ static int module_begin(void) { printk("Hello, world\n"); return 0; } /* cleanup_module function */ static void module_end(void) { printk("Goodbye cruel world\n"); } EXPORT_NO_SYMBOLS; module_init (module_begin); module_exit (module_end);
Makefile의 내용입니다.
# Makefile for a basic kernel module CROSS_COMPILE=gcc # Modify this statement to your kernel directory INCLUDEDIR = /include MODCFLAGS := -Wall -o2 -DMODULE -D__KERNEL__ -DLINUX -I$(INCLUDEDIR) hello_word.o: hello_world.c $(CROSS_COMPILE) $(MODCFLAGS) -c hello_world.c
컴파일 명령은 아래와 같이 했습니다. 그리고, 다음과 같이 메시지가 뜹니다.
[root@linux kernel]# insmod hello_world.o hello_world.o: unresolved symbol printk hello_world.o: Hint: You are trying to load a module without a GPL compatible license and it has unresolved symbols. Contact the module supplier for assistance, only they can help you.
무엇이 문제인지 모르겠습니다.
고수님들의 지도 부탁드립니다.
Forums:
MODULE_LICENSE("GPL");include밑부분에 써주
MODULE_LICENSE("GPL");
include밑부분에 써주세요
GPL license 부분에서 에러가 나네요...
include 밑에...
MODULE_LICENSE("GPL");
을 추가하고 make를 하니까, 아래와 같이 에러가 나네요...
10번 라인은 MODULE_LICENSE("GPL"); 부분이 있는 곳이에요...
일반 PC에 파란 리눅스 7.1을 설치하여 사용하고 있거든요...
무슨 문제인지를 모르겠습니다.
고수님들의 지도 부탁드립니다...
옵션이 잘못된 것 같습니다.. MODCFLAGS에서 -o2가 아니
옵션이 잘못된 것 같습니다..
MODCFLAGS에서 -o2가 아니라 -O2입니다...
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
-O2로 해도 같은 에러가 나네요...
역시 -o2를 -O2로 해도 마찬가지에요...
아래와 같네요...
- 아래 -
저는 아무 이상없이 컴파일 & insmod가 되는데요..M
저는 아무 이상없이 컴파일 & insmod가 되는데요..
MODULE_LICENSE("GPL") 추가하지 않고도요..
저 역시 wow7.1이고 기본 커널 사용중입니다.
printk를 못 찾는것 보면 소스보다는 환경적인 문제인것 같습니다.
커널 관련해서 본것이 1년이 넘었는지라..
http://linuxkernel.net 에도 가서 참조해 보시는것이..
에러 메세지를 보니,/usr/include/linux 와 /usr
에러 메세지를 보니,
/usr/include/linux 와 /usr/include/asm 이 현재 커널 버젼의 것과 맞지를 않는거같군요...
현재 사용중인 커널의 소스에 있는 것으로 소프트링크시키시고,
MODULE_LICENSE("GPL");
도 꼭 넣으세요...
전 2.4.20 을 쓰는데 위의 라이센스 표시 안해주니까 안되더라구요...--;
모듈쪽 프로그래밍 할때는 커널의 영향을 많이 받으니, 제가 위에 말씀드린 include 파일들도 꼭 현재 버젼에 맞게 고쳐놓는 버릇을 들이도록 하세요...
그럼 전 이만...!
이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~
어떻게 코드를 변경하면 되나요?
제가 사용하는 커널 버젼이 2.4.2로 알고 있습니다...
이것이 맞는것인지 모르겠는데, uname -a하면 아래와 같이 나오길래, 커널버젼이 2.4.2인줄 알고 있습니다...
hello_world.c에는 MODULE_LICENSE("GPL");를 추가시켜서 컴파일만 하면 되나요?
아니면, Makefile의 include부분도 변경해야 하나요?
Makefile의 include부분을 아래와 같이 수정하고...
- 아래 -
hello_world.c의 파일에서 아래와 같이 MODULE_LICENSE("GPL");부분을 넣어서 컴파일했는데, 아래와 같이 메시지가 뜨네요...
- 아래 -
잘몰라서 그러는데 지도 부탁드립니다...
INCLUDEDIR 설정이 이상한거같은데, 그게 맞나요? 확인해보세요..
INCLUDEDIR 설정이 이상한거같은데, 그게 맞나요? 확인해보세요...^^;
보통은...
/usr/src/linux/include/linux
/usr/src/linux/include/asm-i386
이렇게 되야될텐데요...
위의 두 디렉토리를,
/usr/include/linux
/usr/include/asm
으로 각각 소프트 링크시키세요...
커널 2.4.2 에선 라이센스를 꼭 붙여줘야하지는 정확히 잘 모르겠구요...
간단한 예제를 보여드리면요,
이렇게 하면 될텐데, 하위 버젼과 완전히 일치하는지는 잘 모르겠습니다...^^;
정 안되시면 커널을 2.4.20 으로 업그레이드 하시는 편이...--;
제가 허접해서 정확한 답변은 못해드리네요...^^;
그럼 전 이만...!
이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~
댓글 달기