insmod 시에 "No module found" 에러가 납니다.

withpiano의 이미지

다음과 같이 make_module.c라는 소스를 만들고

***********************************
#define MODULE
#include<stdio.h>

init init_module(void)
{
printf("Module Test");
return 0;
}

void cleanup_module(void)
{
}

***********************************

# cc -D__KERNEL__ -DLINUX -O6 make_module.o make_module.c
# ld -r -o my_driver.o make_module.o

를 실행하였습니다.

그리고

# insmod my_driver.o 를 실행하니

No Module found in object
insmod error inserting 'my_driver.o' -1 Invalid module format

이런 에러 메세지가 나왔습니다.

모듈을 찾을 수 없다는 것이 무슨 뜻인지...
왜 이런 에러가 나오는 건지 궁금합니다.

책을 보고 하는 것인데, 그대로 똑같이 해도 에러가 나니 답답합니다.

그리고, cc -D__KERNEL__ -DLINUX 이 명령의 옵션이 뜻하는
것은 무엇인지요... 궁금한 것은 많고, 아는 것은 적어 매우 힘드네요..

도움될 만한 모듈 프로그래밍 관련 문서를 아시는 분께도 부탁드립니다.

한컴리눅스 4.0 배포판을 쓰고 있고 커널은 2.6.6 이고
gcc 버전은 3.3.3 입니다

pastime의 이미지

컴파일하는 커널 버전이나 사용하는 리눅스 배포판이 어떤 것인지 등의 정보를 자세히 적어주셔야 좀더 자세한 답변을 얻을 수 있습니다.

Quote:
# cc -D__KERNEL__ -DLINUX -O6 make_module.o make_module.c

-O6 이 아니라 -o 가 아닌가요?

그리고 cc (gcc) 에서 -D 옵션은 이후의 문자열을 define 하는 일을 합니다.
즉, 아래와 같이 컴파일하는 경우는

Quote:
cc -D__KERNEL__ -DLINUX

소스 코드의 윗부분에서 직접 다음과 같이 표기하는 것과 동일한 효과 입니다.

#define __KERNEL__
#define LINUX

...

그리고 모듈 프로그래밍에 대한 문서는 이호님의 홈페이지의 리눅스 커널 프로그래밍 란에서 찾아보시면 됩니다.

http://linuxkernel.net

flyduck의 이미지

2.6 커널이군요. 2.6 커널에서는 커널 모듈의 확장자가 .ko로 바뀌었으며 확장자가 .o인 파일을 로드하려고 하면 그런 에러 메시지가 나오게 됩니다.

2.6 커널인 경우 모듈 소스를 컴파일할 때 Makefile을 만들어서 사용하는 것을 권장합니다. Makefile은 다음과 같이 간단하게 만들면 됩니다.

obj-m := make_module.o

그리고 컴파일할 때는 make를 사용하는데 커널 소스 파일이 있는 위치가 /usr/src/linux-2.6 이라면

make -C /usr/src/linux-2.6 SUBDIRS=`pwd` modules

이렇게 하면 됩니다. 그리고 printf는 printk로 바꾸기 바랍니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

pastime의 이미지

Quote:
#include <stdio.h>

대신에

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

로 해 주세요~ :wink:

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.