printk()

커널 함수에서 사용되는 출력 함수이다.
printf와의 차이는 메시지 기록관리를 위한 로그레벨을 지정할 수 있다는 것이다.

 
 로그레벨 명령어 의미
"<0>"  KERN_EMERG 시스템이 동작하지 않는다.
 "<1>"  KERN_ALERT 항상 출력
"<2>"  KERN_CRIT 치명적인 정보
 "<3>" KERN_ERR  오류 정보
 "<4>"  KERN_WARNING 경고 정보 
 "<5>"  KERN_NOTICE 정상적인 정보 
 "<6>"  KERN_INFO 시스템 정보 
 "<7>"  KERN_DEBUG  디버깅 정보

위처럼 로그레벨을 지정하는 이유는 kernel source 내에서 원하는 정보만 출력할 수 있게 함이다.

사용법은 다음과 같다

 printk(KERN_ERR"This is KERN_ERR option\n");

다음 명령을 실행해보면 현재의 로그레벨을 확인 할 수 있다.

 $cat /proc/sys/kernel/prink
      7     4     1     7

[7] : 현재 로그레벨
       이 레벨보다 높은 메시지(숫자가 작은 수)만 출력을 해준다.
[4] : 기본 로그레벨
       printk()함수를 입력하면서 별도로 로그레벨을 입력하지 않을 경우
[1] : 최소 로그레벨
       부여할 수 있는 최소 로그레벨이다.
       이 값이 1이라면 우리가 printk 함수를 입력하면서 0을 부여할 수 없다.
[7] : 부팅시 로그레벨
        부팅시 출력될 레벨을 지정해주는 것이다.

출력되지 않았을 경우 다음과 같은 명령어로 로그버퍼에 기록된 내용을 볼 수 있다. (출력되지 않은 메시지도 볼 수 있음)
dmesg
# cat /proc/kmsg