Linux Makefile 오류 관련입니다

tntlgh의 이미지

6시간째 헤매고 있습니다. 구글링으로 외국문서까지 다 뒤져봐도 이런 오류가 없는거같은데 왜 저만...

Vmware로 우분투 14.04사용중
Linux 3.18.44 커널컴파일 해서 모듈프로그래밍 하려고 hello.c 만들고 makefile 만들고 make 명령어 입력하니까

make[2]: *** No rule to make target '/missing-syscalls', needed by '__build'. Stop.
make[1]: *** [_module_] Error 2
make[1]: Leaving directory '/usr/src/linux-3.18.44'
make: *** [default] Error 2

이 에러에서 빠져나오질 못하고 있습니다. missing-syscalls에 대해선 어느정도 찾아봤는데 대체 __build 가 뭘 하라는건지 감을 못잡겠습니다... 아무리 구글링해도 안나오구요 ㅠㅠ
TAB 문제도 해결했는데 대체 왜이러는건지 답변 부탁드립니다 고수분들 ㅠㅠ!!!!!!!!
컴공 복수전공하느라 죽을거같은 영문과생이 올립니다 ㅠㅠ
코드 올려드립니다

Hello.c

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
 
int __init init_hello(void)
{
printk(KERN_ALERT "[Module Message] Hello, Module.\n");
return 0;
}
 
void __exit exit_hello(void)
{
printk(KERN_ALERT "[Module Message] Do you really want to break up with me?\n")
;
}
 
module_init(init_hello);
module_exit(exit_hello);
 
MODULE_LICENSE("GPL");

Makefile

KERNELDIR = /lib/modules/$(shell uname -r)/build
 
obj-m = hello.o
 
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
 
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
        rm -rf *.ko
        rm -rf *.mod.*
        rm -rf .*.cmd
        rm -rf *.o

dgkim의 이미지

커널 개발자는 아니지만, 호기심으로 걍 붙여넣기 해서 실행하니까 되는데요.

제 환경이 조금은 다릅니다. Ubuntu 16.04.1, Kernel 4.4.0

문서에 나오는 것과 거의 유사한 예제라 특별할 것은 없어 보이네요.

http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN121

참고하실 내용으로,
커널 개발을 위해서는 아래 형태의 패키지가 설치되어 있어야 하고
linux-headers-4.4.0-40-generic (버전 번호는 다를 수 있습니다.)
제가 사용하는 버전으로 테스트 가능하시면 해보시고,
아래와 같이 온전한 전체 내용이 나오면, 좀 더 좋습니다.

dgkim@hulk:~/kldp$ cat hello.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
 
int __init init_hello(void)
{
printk(KERN_ALERT "[Module Message] Hello, Module.\n");
return 0;
}
 
void __exit exit_hello(void)
{
printk(KERN_ALERT "[Module Message] Do you really want to break up with me?\n")
;
}
 
module_init(init_hello);
module_exit(exit_hello);
 
MODULE_LICENSE("GPL");
dgkim@hulk:~/kldp$ cat Makefile
KERNELDIR = /lib/modules/$(shell uname -r)/build
 
obj-m = hello.o
 
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
 
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
        rm -rf *.ko
        rm -rf *.mod.*
        rm -rf .*.cmd
        rm -rf *.o
dgkim@hulk:~/kldp$ ls
Makefile  hello.c
dgkim@hulk:~/kldp$ make
make -C /lib/modules/4.4.0-40-generic/build SUBDIRS=/home/dgkim/kldp modules
make[1]: 디렉터리 '/usr/src/linux-headers-4.4.0-40-generic' 들어감
  CC [M]  /home/dgkim/kldp/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/dgkim/kldp/hello.mod.o
  LD [M]  /home/dgkim/kldp/hello.ko
make[1]: 디렉터리 '/usr/src/linux-headers-4.4.0-40-generic' 나감
dgkim@hulk:~/kldp$ ls -al
합계 100
drwxrwxr-x  3 dgkim dgkim  4096 11월  9 22:08 .
drwxr-xr-x 86 dgkim dgkim  4096 11월  9 22:08 ..
-rw-rw-r--  1 dgkim dgkim   179 11월  9 22:08 .hello.ko.cmd
-rw-rw-r--  1 dgkim dgkim 26934 11월  9 22:08 .hello.mod.o.cmd
-rw-rw-r--  1 dgkim dgkim 26831 11월  9 22:08 .hello.o.cmd
drwxrwxr-x  2 dgkim dgkim  4096 11월  9 22:08 .tmp_versions
-rw-rw-r--  1 dgkim dgkim   251 11월  9 22:08 Makefile
-rw-rw-r--  1 dgkim dgkim     0 11월  9 22:08 Module.symvers
-rw-rw-r--  1 dgkim dgkim   370 11월  9 22:07 hello.c
-rw-rw-r--  1 dgkim dgkim  3880 11월  9 22:08 hello.ko
-rw-rw-r--  1 dgkim dgkim   712 11월  9 22:08 hello.mod.c
-rw-rw-r--  1 dgkim dgkim  2816 11월  9 22:08 hello.mod.o
-rw-rw-r--  1 dgkim dgkim  1944 11월  9 22:08 hello.o
-rw-rw-r--  1 dgkim dgkim    33 11월  9 22:08 modules.order
dgkim@hulk:~/kldp$

chocokeki의 이미지

안녕하세요
저도 초보자인데요 컴파일 환경부터 체크해보심은 어떠하신지요

uname -r 해서 나온 거랑
ls /lib/modules/`uname -r`/build -l 이 올바른 커널 버전 소스에 연결 되어있는지 확인해보셔요

chocokeki의 이미지

그리고 혹시나 해서 말씀드립니다만 컴파일 끝나면 나오는 ko파일의 vermagic이 uname -r과 같아야 드라이버 probe가 가능합니다
뒤에 + 이렇게 글자 하나 차이로 probe유무가 갈려요 ㅎㅎㅎ

댓글 달기

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