우분투 10.04 lts에서 모듈 컴파일 질문입니다

오랠리의 리눅스 디바이스 드라이버 책을 공부중인데
첫번째 예제인 hello.c파일

[code:35rw4hz3]
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

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

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

module_init(hello_init);
module_exit(hello_exit);

[/code:35rw4hz3]
위의 hello.c와

[code:35rw4hz3]
Makefile에는
obj-m:=hello.o
[/code:35rw4hz3]

라고 하고나서 make를 실행하면

Makefile hello.c
root@hejeon-desktop:/study/chapter01# make
make: *** 타겟 없음. 멈춤.

위와 같이 나오는데

제가 리눅스쪽의 디바이스 드라이버 입문을 시작하는 사람이라 모듈화라던가 커널 컴파일같은걸 잘 모릅니다.

모듈 프로그래밍을 시작하려면 기본적으로 설정해줘야 하는 사항들이 필요한건가요?

이 경우 그냥 make만 하면 안됩니다.

위의 예제와 같이 간단한 모듈은 다음과 같은 명령어를 이용하여 컴파일할 수 있습니다.

[code:1b9dfiex]
make -C /lib/modules/uname -r/build M=pwd modules
[/code:1b9dfiex]

모듈 컴파일에 대한 자세한 설명은 Linux Device Drivers 책 2 장에 잘 나와있습니다.

그리고 위의 코드 중 KERN_ALERT 앞에 있는 "는 제거하시기 바랍니다.

먼저 jeongsw님 답변 감사드립니다. 님의 말씀대로 오타인 " 를 제거하고
적어주신대로 커맨드를 넣었습니다. 'uname -r’은 변경했습니다.

그러니 아래와 같은 내용이 뜨는데 무언가 제가 실수한건가요?

[code:3nlugau9]
root@hejeon-desktop:/study/chapter01# make -C /lib/modules/2.6.32-21-generic/build M=‘pwd’ modules
make: Entering directory /usr/src/linux-headers-2&#46;6&#46;32-21-generic' make&#58; *** 타겟 modules’를 만들 규칙이 없음. 멈춤.
make: Leaving directory `/usr/src/linux-headers-2.6.32-21-generic’
root@hejeon-desktop:/study/chapter01#

[/code:3nlugau9]

먼저, M='pwd’가 아니라 M=pwd입니다.

그리고 /lib/modules/2.6.32-21-generic/build 디렉토리에 전체 커널 소스
트리가 있는지 확인해 보세요. 최소한 커널 헤더는 있어야 합니다. 없다면
커널 헤더 패키지를 설치하세요. linux-headers-로 시작하는 이름의
패키지입니다. 위의 예제와 같은 간단한 드라이버는 커널 헤더만으로도
충분하지만, 정석대로 하자면 커널 모듈을 빌드하기 위해서는 빌드 완료된
전체 커널 소스 트리가 필요합니다.

또한, root로 로그인하는 것은 별로 권해드리고 싶지 않군요.

먼저 다시한번 jeongsw님의 답변에 감사드립니다.
'가 아니라 `였군요

그래서 아래와같이 하였는데

[code:yujykhe6]
root@hejeon-desktop:/study/chapter01# make -C /lib/modules/uname -r/build M=pwd modules
make: Entering directory /usr/src/linux-headers-2&#46;6&#46;32-21-generic' make&#58; *** 타겟 modules’를 만들 규칙이 없음. 멈춤.
make: Leaving directory `/usr/src/linux-headers-2.6.32-21-generic’
root@hejeon-desktop:/study/chapter01#
[/code:yujykhe6]

위와 같이 또다시 modules를 만들 규칙이 없다고 나오네요 ㅠㅠ

그리고 말씀하신 디렉토리의 내용은 아래와 같습니다.

[code:yujykhe6]
root@hejeon-desktop:/lib/modules/2.6.32-21-generic/build# ls
Documentation arch drivers include kernel net security tools virt
Kbuild block firmware init lib samples sound ubuntu
Module.symvers crypto fs ipc mm scripts source usr
root@hejeon-desktop:/lib/modules/2.6.32-21-generic/build#
[/code:yujykhe6]

루트 권한은 아직은 그냥 스터디 용도라서 그냥 쓰고 있고요 나중에 개발 시작하면 개인계정으로 할듯 합니다.

드라이버쪽 작업은 처음이라 그런지 하나하나 쉽게 넘어가는게 없네요 ㅠㅠ

어찌된 영문인지 모르겠지만 커널 소스 디렉토리에 Makefile이 없네요.

해당 커널 헤더 패키지를 재설치해 보시기 바랍니다.

jeongsw님 언제나 감사합니다.

제 헤더 패키지에 문제가 있었군요

오늘중으로 한번더 시도해봐야겠습니다^^