페도라 core 6을 다운 받고 간단한 hello.ko 예제 만들었습니다. 근데 에러가.. ToT

오리옹의 이미지

====== Makefile ========

obj-m := test.o

#KDIR := /lib/modules/$(shell uname -r)/build
KDIR := /usr/src/kernels/2.6.18-1.2798.fc6-i686
PWD := $(shell pwd)

default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
rm -rf *.ko
rm -rf *.mod
rm -rf .*.cmd
rm -rf *.o

====== test.c =======
#include
#include
#include

static int hello_init(void)
{
printk("Hello, world\n");
return 0;
}

static void hello_exit(void)
{
printk("Goodbye, world\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("Dual BSD/GPL");

======== 결과 ==========
컴파일은 제대로 되었습니다.
그러나 insmod를 하니 다음과 같은 결과가 나왔습니다.

[root@localhost test_2.6]# insmod test.ko
insmod: error inserting 'test.ko': -1 Invalid module format

프레임버퍼가 2.4버전에서 모듈형태로 컴파일된 것이 있는데 이를 2.6으로 바꿔보려고
2.6 한번 시도했다가 ToT... 역시 초보임을 열심히 실감하고 있습니다.

현재 커널버전
[root@localhost 2.6.18-1.2798.fc6-i686]# uname -r
2.6.18-1.2798.fc6xen

현재 소스버전
/usr/src/kernels/2.6.18-1.2798.fc6-i686/

이렇습니다.

처음에 /usr/src에 kernels 폴더가 없어서 이리저리 사이트 뒤져가며 만든것인데..
커널 버전과 소스버전이 틀려서 그런건가요..

명쾌한 해답 부탁드립니다...
읽어주셔서 감사합니다.

coremaker의 이미지

다릅니다..
기존 User Module을 컴파일 할 때는.. 해당 kernel의 Source가 필요했지만..
지금은 .. Object 가 있어야 컴파일이 됩니다..
(Source가 필요없다는 것이죠... )

Makefile 안에 내용이 다릅니다...

http://tldp.org/LDP/lkmpg/2.6/html/x181.html

를 한번 보시고.. 모르는게 있다면 구글링을 조금 해보시는 것이 좋으실 것 같습니다..

bushi의 이미지

2.4 나 2.6 이나 모듈 빌드하는 방법은 같습니다.

Makefile 을 커널rule 에 맞춰 잘 작성했다면,
rh/fc 에서는
make -C /usr/src/kernels/`uname -r`/build SUBDIRS=`pwd` modules
가 원칙입니다.
커널소스/헤더가 어디에 설치되냐에 따라 조금씩 차이가 있긴 합니다.
이렇게 하기 위한 필요조건은 "config 가 된 상태의 커널 헤더" 입니다.

fc3 인가까지는 커널소스.rpm 이 있었습니다. 커널.src.rpm 말고요.
그 이후 부터는 kernel-devel.rpm 이 있습니다.
모듈을 컴파일하기 위한 것들만 포함하고 *.c 등은 제외되어 있습니다.
당연히 config 까지 된 상태로 패키징 되었습니다.

간추리자면, fc6 에서
yum install kernel-devel
하시면 현재 커널에 맞는 것이 자동으로 설치가 되며,
그 위치는 /usr/src/kernels/`uname -r`/build 입니다.

구체적으로

HELLO_DIR=`pwd`
KERNEL_DIR=/usr/src/kernels/`uname -r`/kernel
 
hello-objs = hello_world.o
obj-m += hello.o
 
modules:
    @($(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(HELLO_DIR) modules)

정도로 Makefile 작성하시고, make modules 하시면 현재 디렉토리의 hello_world.c 가 컴파일 되어 hello.ko 가 만들어 질 겁니다. (오타무시....)
2.4 에서도 rule 이 약간 틀릴 뿐 동일합니다.

coremaker의 이미지

제가 Rule 관한 이야기를 마치.. 완전히 달라진 것처럼 이야기한 것으로 보인 것 같습니다..

오리옹의 이미지


답변 감사합니다.

안되는 영어로 Googling을 조낸 해서 2.6.18 커널소스 matching에 성공했습니다.

hshin74의 이미지

페도라 코어 6를 설치해서 쓰고 있는데, USB 외장하드를 읽을까 해서
FC3으로부터 업그레이드를 한 것입니다. 그런데 외장하드가 NTFS로
되어 있어서 그런지 읽지를 못하더군요.
따로 커널 컴파일을 해야 한다고 해서 살펴봤더니, 초보가 커널 소스를
받지 않고 그냥 쓰고 있었답니다. -.-;;
어떻게 소스를 구하나 찾다가.. 여기서 찾았습니다.

yum install kernel-devel

이렇게 하니까 생기네요.. *^^*
감사합니다.

Hyun의 이미지

ntfs 커널모듈 또한 패키징되어 있습니다...

livna 레포지토리 추가해주시고

yum install kmod-ntfs

하시면 되네요...

댓글 달기

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