Android Kernel Message

printk()

  • 메시지 기록 관리를 위한 로그 레벨의 지정이 가능하다.
    • kernel뿐만 아니라 응용프로그램의 init process도 printk()를 사용한다.
    • logcat은 init가 구동하기 때문에 init는 printk()를 사용.
  • 원형 큐 구조의 관리, 출력 디바이스의 다중 지정이 가능하다.
  • 콘솔에서 확인하거나 dmesg 명령을 사용해서 로그파일 확인 가능
    • cat /proc/kmsg
    • 끌때는 ps로 do_syslog를 찾아 그 번호로 kill 번호 실행

로그 레벨 지정

  • 로그 레벨은 printk() 함수에 전달되는 문자열의 선두 문자에 "<1>"과 같이 숫자로 등급을 표현
  • linux/kernel.h에 정의된 선언문 사용을 권장
  • 레벨에 대한 표시를 하지 않으면 KERN_WARNING과 같은 레벨
  • 아래의 사용 예는 모두 같은 결과가 나온다.
    • printk(KERN_WARNING “log test\n”);
    • printk(“<4>” “log test\n”);
    • printk(“<4>” log test\n);
    • printk(“log test\n”);
상수 선언문 의미
KERN_EMERG “<0>” 시스템이 동작하지 않는다.
KERN_ALERT “<1>” 항상 출력된다.
KERN_CRIT “<2>” 치명적인 정보
KERN_ERR “<3>” 오류 정보
KERN_WARNING “<4>” 경고 정보, default 값
KERN_NOTICE “<5>” 정상적인 정보
KERN_INFO “<6>” 시스템 정보
KERN_DEBUG “<7>” 디버깅 정보
공유하기