printf()와 유사하지만 커널의 메시지를 출력하고 관리할 수 있는 특성이 있다.
로그 레벨 지정
로그 레벨은 printk()함수에 전달되는 문자열의 선두 문자에 "<1>"과 같이 숫자로 등급을 표현한다. linux/kernel.h 에 정의된 선언문을 이용하는 것이 바람직하다.
상수 선언문 |
의미 |
#define KERN_EMERG |
<0>시스템이 동작하지 않는다. |
#define KERN_ALERT |
<1>항상 출력된다. |
#define KERN_CRIT |
<2>치명적인 정보 |
#define KERN_ERR |
<3>오류 정보 |
#define KERN_WARNING |
<4>경고 정보 |
#define KERN_NOTICE |
<5>정상적인 정보 |
#define KERN_INFO |
<6>시스템 정보 |
#define KERN_DEBUG |
<7>디버깅 정보 |
레벨에 대한 표시를 하지 않으면 KERN_WARNING과 같은 레벨이다. 다음의 처리 결과는 모두 같다.
printk(KERN_WARNING"system okn");
printk("<4>""system okn");
printk("<4> system okn");
printk("system okn");
원형 큐 구조 관리
커널 메시지는 커널 내부에 있는 원형 큐 형식의 로그 버퍼에 저장된다.
이 로그 버퍼의 크기는 CONFIG_LOG_BUF_SHIFT 값으로 지정된다.
(정의된 헤더 include/config/log/buf/shift.h)
로그 버퍼는 일반적으로 콘솔에 출력된다.
커널 메시지 관리 데몬
klogd : 커널에서 발생하는 메시지를 기록하고 관리한다.
syslogd : 커널에서 발생하는 메시지와 응용 프로그램에서 요청한 시스템 정보를 기록하고 관리한다.
printk()사용 시 주의점
printk()를 과도하게 사용하지 않는다. -> 실행시간이 길다.
개행 문자가 있어야 출력을 시작한다. -> 'n' 을 포함 하도록 한다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
12 | 임베디드 개발자를 위한 Hex,Bin,Dec 변환기 유틸 | makersweb | 2023.02.27 | 1221 |
11 | Yocto 프로젝트 3.4 릴리스(honister) 이상 버전으로 마이그레이션 시 참고 사항 | makersweb | 2023.03.21 | 1190 |
10 | libopencm3 활용, Cortex-M 펌웨어 개발 | makersweb | 2019.07.14 | 1101 |
9 | Android 기기를 사용하여 Raspberry Pi SD 카드 작성 방법 | makersweb | 2020.08.01 | 1095 |
8 | 임베디드 비대칭 멀티 프로세싱(asymmetric multiprocessing) 시스템 | makersweb | 2019.12.31 | 960 |
7 | mainline 커널 및 etnaviv 를 사용하는 Wandboard(Freescale i.MX6Q)에서 eglfs를 사용 | makersweb | 2019.10.17 | 951 |
6 | Raspberry Pi 와 ATtiny85 간 I²C 통신 | makersweb | 2023.03.18 | 742 |
5 | 로직분석기와 함께 PulseView 를 사용해서 CAN 신호 캡쳐 | makersweb | 2023.03.16 | 729 |
4 | Raspberry Pi에서 I²C 그리고 Bit-bang (비트뱅) | makersweb | 2023.08.27 | 681 |
3 | ATtiny85 개발보드(HW-260) | makersweb | 2023.01.02 | 566 |
2 | Rockchip VOP | makersweb | 2024.04.22 | 235 |
1 | GNU C 레퍼런스 메뉴얼 - 부록 D | makersweb | 2014.02.28 | 5 |