hello.ko 모듈을 올렸을때
Hello Wolrd가 나오지 않았을 수 있다.
그 이유를 알아보자
우선 이를 알기 위해서 printk() 함수에 대해서 알아야 할 것이다.
우리가 이때까지 응용프로그램에서 짜던 printf와는 다른 printk 이다.
※ printk()
위의 숫자를 앞에서 부터 알아보도록 하자!!
ㅡ.현재 로그레벨
이 내용을 읽었으면 왜 Hello World가 보이지 않았는지 이해가 될 것이다.
그 이유는 현재 로그레벨보다 큰 숫자가 기본 로그레벨로 지정되어 있기 때문이다.
그래서 로그레벨을 주지않은 printk() 함수들은 출력되지 않았던 것이다.
출력되지 않았을 경우에 다음과 같은 명령어로 로그버퍼에 기록된 내용을 볼 수 있다.(출력되지 않은 녀석도 다 볼수 있다.)
Hello Wolrd가 나오지 않았을 수 있다.
그 이유를 알아보자
우선 이를 알기 위해서 printk() 함수에 대해서 알아야 할 것이다.
우리가 이때까지 응용프로그램에서 짜던 printf와는 다른 printk 이다.
※ printk()
커널 함수에서 사용되는 출력 함수이다.
printk와의 차이는 메시지 기록 관리를 위한 로그 레벨을 지정할 수 있다는 것이다.
printk와의 차이는 메시지 기록 관리를 위한 로그 레벨을 지정할 수 있다는 것이다.
로그 레벨 | 의미 |
"<0>" == KERN_EMERG | 시스템이 동작하지 않는다. |
"<1>" == KERN_ALERL | 항상 출력된다. |
"<2>" == KERN_CRIT | 치명적인 정보 |
"<3>" == KERN_ERR | 오류 정보 |
"<4>" == KERN_WARNING | 경고 정보 |
"<5>" == KERN_NOTICE | 정상적인 정보 |
"<6>" == KERN_INFO | 시스템 정보 |
"<7>" == KERN_DEBUG | 디버깅 정보 |
이렇게 로그 레벨을 지정하는 이유는 kernel source내에서 우리가 원하는 정보만 캐치해서 볼 수 있게 하기 위한 것이다.
그냥 평상시에는 디버깅 정보, 시스템 정보, 정상적인 정보는 볼 필요가 없을 것이다.
우리가 보고싶은것은 요류, 경고에 관련된 4 이하의 내용을 보고 부팅시 이상이 있는지만 보면 될 것이다.
바로 이렇게 로그 레벨을 둠으로써 필요한 출력만 확인 가능하게 하는 것이다.
그냥 평상시에는 디버깅 정보, 시스템 정보, 정상적인 정보는 볼 필요가 없을 것이다.
우리가 보고싶은것은 요류, 경고에 관련된 4 이하의 내용을 보고 부팅시 이상이 있는지만 보면 될 것이다.
바로 이렇게 로그 레벨을 둠으로써 필요한 출력만 확인 가능하게 하는 것이다.
그럼 어떻게 보고싶은 레벨을 설정 할 수 있을까?
$ cat /proc/sys/kernel/printk 명령을 쳐보자.
그러면 다음과 같이 4개의 숫자가 나올 것이다.
$ cat /proc/sys/kernel/printk 명령을 쳐보자.
그러면 다음과 같이 4개의 숫자가 나올 것이다.
3 4 1 7
위의 숫자를 앞에서 부터 알아보도록 하자!!
ㅡ.현재 로그레벨
이 레벨보다 높은 메시지만(숫자가 작은...) 출력을 해준다.
ㅡ.기본 로그레벨
printk() 함수를 입력하면서 별도로 로그레벨을 입력하지 않을 경우(hello.c 예제에서도 입력 안했다.)
default로 입력되는 로그 레벨이다.
default로 입력되는 로그 레벨이다.
ㅡ.최소 로그레벨
부여할수 있는 최소 로그 레벨이다.
이 값이 1이라면 우리가 printk 함수를 입력하면서 0을 부여할 수 없다.
이 값이 1이라면 우리가 printk 함수를 입력하면서 0을 부여할 수 없다.
ㅡ.부팅시 로그레벨
말그대로 부팅시 출력될 레벨을 지정해주는 것이다.
7로 되어 있으면 모두다 보겠다는 것이다.
7로 되어 있으면 모두다 보겠다는 것이다.
이 내용을 읽었으면 왜 Hello World가 보이지 않았는지 이해가 될 것이다.
그 이유는 현재 로그레벨보다 큰 숫자가 기본 로그레벨로 지정되어 있기 때문이다.
그래서 로그레벨을 주지않은 printk() 함수들은 출력되지 않았던 것이다.
출력되지 않았을 경우에 다음과 같은 명령어로 로그버퍼에 기록된 내용을 볼 수 있다.(출력되지 않은 녀석도 다 볼수 있다.)
dmesg
# cat /proc/kmsg
# cat /proc/kmsg
'Embedded > Device Driver' 카테고리의 다른 글
Kernel Timer 사용하기 (0) | 2011.04.30 |
---|---|
Device Driver] Kernel Facilities (0) | 2011.04.30 |
Device Driver] Hello World 모듈 컴파일 (0) | 2011.04.25 |
Device Driver] 모듈 프로그래밍 (0) | 2011.04.25 |
Device Driver] 디바이스 드라이버 만드는 법 (0) | 2011.04.25 |