0

Linux 커널 모듈 프로그래밍을 배우고 있습니다. 나는 Beaglebone black을 사용하고 있습니다. 나는 간단한 'Hello World'어플리케이션과 makefile을 만들었다. 나는 그것이 내 메이크 파일을 점검했다. 하지만 'make'명령을 내리면 다음 오류가 발생합니다.Linux 커널 모듈 프로그래밍에 대한 컴파일 오류

[email protected]:/home/sonu# make 
make: Warning: File `Makefile' has modification time 2.2e+02 s in the future 
make -C /lib/modules/3.8.13-bone70/build M=/home/sonu modules 
make: *** /lib/modules/3.8.13-bone70/build: No such file or directory. Stop. 
make: *** [all] Error 2 

일부 웹 사이트를 언급했지만. 그러나 모든 사람들이 패키지 설치를 요구하고 있습니다. 나는 초보자입니다. 이더넷을 사용하여 Beaglebone에서 인터넷 연결을 구성하고 시작하는 방법을 모르겠습니다. 내가 꼼짝 못하게 도와주세요. 미리 감사드립니다.

코드는 다음과 같습니다

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

static int __init hello(void) 
{ 
    printk(KERN_INFO "Hello World!"); 
    return 0; 
} 

static void __exit hello_cleanup(void) 
{ 
    printk(KERN_INFO "Bye"); 
} 

module_init(hello); 
module_exit(hello_cleanup); 

메이크이다 : 당신이 설치하지 않은 커널 버전에 대한 모듈을 구축을 위해 노력하고 있다는 표시

obj-m+=Hello.o 

all: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 
     $(CC) Hello.c -o test 
clean: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 
     rm test 
+1

당신은 도움을 요청하지만, Makefile 자체를 제공하지 않는다. (올바른 것임에 대한 가정은 * 아마 * 잘못된 것이다.) 또한 코드도 없다. (아마도 Makefile에 오류가 있기 때문에 그렇게 나쁘지는 않을 것이다.) – tambre

+0

@tambre 여러 번 메이크 파일을 교차 확인했습니다. 나는 거기에 결함이 없다고 확신합니다. 귀하의 편의를 위해 코드를 첨부했습니다. 그것을 통해 이동하십시오. –

+3

개선되었습니다. 결함이 없다고 생각하는 경우에도 항상 첨부하는 것이 좋습니다. 상황을 이해하는 데 유용 할 수 있습니다. 이제'/ lib/modules/3.8.13-bone70/build' 디렉토리가 존재합니까? – tambre

답변

3

에 대한 헤더.

make KSRC=/usr/src/linux-headers-4.9.2 all 
: 당신은 당신의 커널 헤더의 실제 위치로 대체 할 수 있습니다,

obj-m+=Hello.o 

KSRC := /lib/modules/$(shell uname -r)/build 

all: 
     make -C $(KSRC) M=$(PWD) modules 
     $(CC) Hello.c -o test 
clean: 
     make -C $(KSRC) M=$(PWD) clean 
     rm test 

을 이제 대신 규칙에서 직접 uname를 호출

는, 당신이 무시할 수있는 변수에 그것을 넣어 도움이

당신은 포괄 규칙과 더 Makefile을 단순화 할 수 있습니다 :

obj-m+=Hello.o 

KSRC := /lib/modules/$(shell uname -r)/build 

all: modules 
     $(CC) Hello.c -o test 

%: 
     make -C $(KSRC) M=$(PWD) [email protected] 

clean:: 
     make -C $(KSRC) M=$(PWD) clean 
     $(RM) test 
+0

불행히도/usr/src 안에 'linux-headers-xxx'폴더가 보이지 않습니다. 이제이 문제를 해결하려면 '리눅스 헤더'를 설치해야합니다.그러나 나는 인터넷 연결없이 그것을 할 수 없다. 해결 방법이 있습니까? –

+0

빌드하려는 버전에 대해 헤더가있는 위치를 알아야합니다. 지금 우리가 그들을 찾을 수있는 일은별로 없습니다. –

+0

헤더를 찾는 명령은 무엇입니까? 나는 붙어있다. 더 이상 갈 수 없어. –