모듈 컴파일시 "CPL 라이센스" 관련 메시지가 뜹니다.

midasyoo의 이미지

초보라서 고수님들께 여쭤봅니다.

일반 리눅스 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. 

무엇이 문제인지 모르겠습니다.

고수님들의 지도 부탁드립니다.

stypr의 이미지

MODULE_LICENSE("GPL");

include밑부분에 써주세요

midasyoo의 이미지

include 밑에...

MODULE_LICENSE("GPL");

을 추가하고 make를 하니까, 아래와 같이 에러가 나네요...

10번 라인은 MODULE_LICENSE("GPL"); 부분이 있는 곳이에요...

[linux@kernel]# make -f Makefile 
gcc -Wall -o2 -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux-2.4.2/include/linux -c hello_world.c 
hello_world.c:10: parse error before string constant
hello_world.c:10: warning: type defaults to `int' in declaration of `MODULE_LICENSE'
hello_world.c:10: warning: data definition has no type or storage class
make: *** [hello_word.o] Error 1

일반 PC에 파란 리눅스 7.1을 설치하여 사용하고 있거든요...

무슨 문제인지를 모르겠습니다.

고수님들의 지도 부탁드립니다...

eminency의 이미지

옵션이 잘못된 것 같습니다..

MODCFLAGS에서 -o2가 아니라 -O2입니다...

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

midasyoo의 이미지

역시 -o2를 -O2로 해도 마찬가지에요...

아래와 같네요...

- 아래 -

[linux@kernel]# make -f Makefile
gcc -Wall -O2 -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux-2.4.2/include/linux -c hello_world.c 

[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.
ifyou의 이미지

저는 아무 이상없이 컴파일 & insmod가 되는데요..

MODULE_LICENSE("GPL") 추가하지 않고도요..

저 역시 wow7.1이고 기본 커널 사용중입니다.

printk를 못 찾는것 보면 소스보다는 환경적인 문제인것 같습니다.

커널 관련해서 본것이 1년이 넘었는지라..

http://linuxkernel.net 에도 가서 참조해 보시는것이..

kkojiband의 이미지

에러 메세지를 보니,

/usr/include/linux 와 /usr/include/asm 이 현재 커널 버젼의 것과 맞지를 않는거같군요...

현재 사용중인 커널의 소스에 있는 것으로 소프트링크시키시고,

MODULE_LICENSE("GPL");

도 꼭 넣으세요...

전 2.4.20 을 쓰는데 위의 라이센스 표시 안해주니까 안되더라구요...--;

모듈쪽 프로그래밍 할때는 커널의 영향을 많이 받으니, 제가 위에 말씀드린 include 파일들도 꼭 현재 버젼에 맞게 고쳐놓는 버릇을 들이도록 하세요...

그럼 전 이만...!

이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~

midasyoo의 이미지

제가 사용하는 커널 버젼이 2.4.2로 알고 있습니다...

이것이 맞는것인지 모르겠는데, uname -a하면 아래와 같이 나오길래, 커널버젼이 2.4.2인줄 알고 있습니다...

[linux@kernel]$ uname -a
Linux 2.4.2-2wl #40 SMP 월 6월 30 17:46:59 KST 2003 i686 unknown

hello_world.c에는 MODULE_LICENSE("GPL");를 추가시켜서 컴파일만 하면 되나요?

아니면, Makefile의 include부분도 변경해야 하나요?

Makefile의 include부분을 아래와 같이 수정하고...

- 아래 -

# Makefile for a basic kernel module

CROSS_COMPILE=gcc

# Modify this statement to your kernel directory
INCLUDEDIR = /usr/src/asm/include/linux
#INCLUDEDIR = /linux-2.4.2/include

#INCS_MOD = $(INCLUDEDIR)/linux/modversions.h

MODCFLAGS := -Wall -O2 -DMODULE -D__KERNEL__ -DLINUX -I$(INCLUDEDIR)
#MODCFLAGS := -Wall -o2 -DMODULE -D__KERNEL__ -DMODVERSIONS -DLINUX -I$(INCLUDED
IR) -include $(INCS_MOD)

hello_word.o: hello_world.c
              $(CROSS_COMPILE) $(MODCFLAGS) -c hello_world.c

hello_world.c의 파일에서 아래와 같이 MODULE_LICENSE("GPL");부분을 넣어서 컴파일했는데, 아래와 같이 메시지가 뜨네요...

- 아래 -

[linux@kernel]# make
gcc -Wall -O2 -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/asm/include/linux -c hello_world.c 
hello_world.c:10: parse error before string constant
hello_world.c:10: warning: type defaults to `int' in declaration of `MODULE_LICENSE'
hello_world.c:10: warning: data definition has no type or storage class
make: *** [hello_word.o] Error 1

잘몰라서 그러는데 지도 부탁드립니다...

kkojiband의 이미지

INCLUDEDIR 설정이 이상한거같은데, 그게 맞나요? 확인해보세요...^^;

보통은...

/usr/src/linux/include/linux
/usr/src/linux/include/asm-i386

이렇게 되야될텐데요...

위의 두 디렉토리를,

/usr/include/linux
/usr/include/asm

으로 각각 소프트 링크시키세요...

커널 2.4.2 에선 라이센스를 꼭 붙여줘야하지는 정확히 잘 모르겠구요...

간단한 예제를 보여드리면요,

<hello.c>

#include <linux/kernel.h>
#include <linux/module.h>

MODULE_LICENSE("GPL");

int init_module( void ) { printk("hello\n"); return 0 }
void cleanup_module( void ) { printk("bye\n"); }

gcc -c -D__KERNEL__ -DMODULE -O -Wall hello.c

이렇게 하면 될텐데, 하위 버젼과 완전히 일치하는지는 잘 모르겠습니다...^^;

정 안되시면 커널을 2.4.20 으로 업그레이드 하시는 편이...--;

제가 허접해서 정확한 답변은 못해드리네요...^^;

그럼 전 이만...!

이제 졸업이다...사랑하는 SKKULUG 후배들아 안녕~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.