2014-06-13 6 views
1

debian wheezy 7.5에서 첫 번째로드 가능한 커널 모듈을 만들려고합니다. 웹에서 다른 튜토리얼의 샘플 코드를 시험해 보았지만 필자가 생각하는 것처럼 작동하지 않는다. 여기 insmod lkm.ko는로드 가능한 커널 모듈에서 init_module 대신 cleanup_module을 호출합니다.

내 코드입니다 : 그래서 그것은 잘 컴파일하지만

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

void cleanup_module(void) 
{ 
    printk(KERN_INFO "exit LKM..."); 
} 

int init_module(void) 
{ 
    printk(KERN_INFO "loading LKM..."); 
    return 0; 
} 

나는 메이크 파일이

obj-m += lkm.o 
all: 
    sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

처럼 보이는 그것을 컴파일하고있어 나는 "$와 LKM을로드 할 때 sudo insmod lkm.ko " 그리고 로그 메시지를 살펴보면 "exit LKM ... ", 그래서 insmod가 init_module 대신 cleanup_module 시스템 호출을 호출하는 것처럼 보입니다. 같은 일이 발생하면 "$ sudo rmmod lkm"을 사용하면 "LKM로드 중 ..." 로그 메시지가 나타납니다. 그래서 정말로 이것이 왜, 그리고 내가 웹에서 찾은, 그 insmod init_module() 등을 통해 LKM을로드하는 것입니다 모르겠다 ...

나는 그것에 대한 몇 가지 도움이나 설명을 주시면 고맙겠 습니다만, 나는 정말로 잘못 된 것이 없다는 것을 알지 못하기 때문에.

+0

다시 시도하십시오. 그러나 printk 문자열의 끝 부분에 줄 바꿈 문자를 넣으십시오. –

+0

해결했습니다! 고마워요! 신참 실수였던 것 같아요. @ZanLynx 왜 내가 그걸 넣어야하는지 설명해 주시겠습니까? – henk

답변

1

넣어 줄 바꿈 일명 \n 당신의 printk 문자열의 끝에

감사합니다.

지연되는 인쇄가 원인입니다. 나는 당신이 insmod를 처음으로 달렸을 때, 당신은 어떤 출력도 전혀 보지 않았다고 생각합니다. 그런 다음 다른 것들을 한 다음 모듈을 언로드했습니다. 이 시점에서 버퍼는 이전 메시지를 플러시하여 언로드 중에 init 메시지를 출력하는 것처럼 보입니다.

실제로 실제로 일어난 것은 커널이 줄 바꿈을 보았을 때 완전한 줄을 출력하기 위해 줄을 저장한다는 것이 었습니다. 그 개행은 나중에 도착하지 않았다.