2015-01-21 2 views
0

커널 메시지를 업데이트하는 데 문제가 있습니다. KERN ALERT 메시지가 업데이트되지 않는 것 같아서 커널이 손상되었을 수 있습니다.시스템 콜 튜토리얼 - Hello World

나는 "dmesg를"명령이라고이 표시 한 것입니다 :

Jan 20 18:18:59 cu-cs-vm kernel: [29194.126766] hello world 

을하지만 helloworld.c 업데이트 한 후 :

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

asmlinkage long sys_helloworld(void) 
{ 
printk(KERN_ALERT "Why isn't this working now???"); 
return 0; 
} 

을 그것은 여전히 ​​인쇄 : 1월 20일 18시 35분 : 25 CU-CS-VM 커널 :

,691,363 : [30178.146268] 안녕하세요 세계

이 그것을 테스트하는 내 스크립트입니다210

#include <unistd.h> 
#include <stdio.h> 

int main(){ 
    int id; 
    id = syscall(318); 
    printf("should print out zero: %d\n", id); 
    return 0; 
} 

printf는 0을 인쇄하고 -1이 아니므로 커널 메시지가 "hello world"에서 "왜 지금 작동하지 않습니까?"라는 메시지가 나타나지 않는 이유는 무엇입니까? 나는 다시 컴파일했다. 누구든지 아이디어가 있다면, 나와 공유 할 수 있다면 고맙겠습니다. 감사!

+0

modprobe를 사용하여 모듈을 다시로드 했습니까? –

+0

modprobe에 익숙하지는 않지만 문제는 어떤 모듈이 문제인지 알 수 없다는 것입니다. 다시로드 할 항목이 확실하지 않습니다. – user2998285

+1

'rmmod'를 사용하여 이전에로드 된 모듈을 언로드했는지 확인한 다음'insmod'를 사용하여 최근에 컴파일 된 모듈을 삽입하십시오 –

답변

0

코드가 문제가되지 않도록 작업 했으므로 커널 설치 또는 버전 관리에 문제가 있습니다. insmod 버전이 최신이 아닌 경우 덮어 쓰지 않습니다. 새 설치 (insmod)를 설치하거나 버전을 부치기 전에 이전 설치 (rmmod)를 완전히 제거하십시오. 심지어 사람 페이지

http://linux.die.net/man/8/insmod

http://linux.die.net/man/8/rmmod

대신 modprobe을 사용하는 것이 좋습니다. 어쩌면 당신은 그것을 아주 쉽게 시도해야합니다. modprobe와 물론

http://linux.die.net/man/8/modprobe

당신은 단순히 버전 검사를 많이 무시하는 그에게 --force를 제공 할 수 있습니다. 그러나 필요한 것은 -v 옵션이므로 모듈이 거부 된 이유에 대한 오류를 볼 수 있습니다.

커널이 이미로드되거나 캐시 된 경우 시스템을 재부팅해야 할 수도 있습니다.