오늘은 리눅스 커널 내 pr_debug를 활용해 디버깅 메시지를 출력하는 예제에 대해 써보려고 한다.
1. pr_debug 기본 사용법
기본 사용법은 아래와 같고, 출력 메시지는 일반적으로 dmesg나 /var/log/messages를 통해 확인할 수 있다. 근데 CONFIG_DYNAMIC_DEBUG 또는 CONFIG_DEBUG가 활성화되지 않으면 아무 출력도 발생하지 않는다. (pr_debug 동작은 커널 설정(.config)에 의존한다.
#include <linux/kernel.h>
pr_debug("This is a debug message: variable=%d\n", my_variable);
(1) CONFIG_DYNAMIC_DEBUG
해당 컨피그가 활성화되면 디버깅 메시지가 동적으로 활성화/비활성화 가능하다. 디버깅 메시지를 런타임에 활성화하려면 아래와 같은 명령어를 사용하면 된다. 아래는 driver.c 라는 토드에서 +p 옵션을 통해 디버깅 출력을 활성화하고, /sys/kernel/debug/dynamic_debug/control 파일을 통해 커널의 동적 디버깅 설정을 관리하는 명령어이다.
echo 'file driver.c +p' > /sys/kernel/debug/dynamic_debug/control
(2) CONFIG_DEBUG
아래의 설정이 활성화되어있으면 pr_debug 메시지가 정상적으로 동작한다. 이 경우 동적 제어 없이 항상 디버깅 메시지가 출력 가능하다. (.config 파일에서 설정해주면 된다.)
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_KERNEL=y
2. pr_debug 사용 예제
본인이 사용하고 있는 kernel/linux-x.x 디렉토리 내 ~.c 코드를 열어 아래와 같이 pr_debug 출력하는 코드를 작성한다.
<커널 코드>
pr_debug("Debugging Message Test\n");
<커널 코드>
그리고 Makefile에 아래와 같이 CFLAGS 설정을 넣어준다.
CFLAGS_파일명.o := -DDEBUG
이후 컴파일 후 로딩하면 pr_debug는 printk처럼 디버깅 메시지를 출력하게 된다.
'Opensource > Linux' 카테고리의 다른 글
Linux에서 KVM으로 생성한 노드 접근하는 방법 (0) | 2025.02.10 |
---|---|
[Linux] 내가 보려고 쓰는 tcpdump 명령어 옵션 (1) | 2025.01.13 |
Ubuntu TACACS+ 서버 구축 및 systemd 서비스 생성하기 (1) | 2024.09.25 |
리눅스 커널 메모리 할당과 GFP Flags (kmalloc, GFP_KERNEL, GFP_ATOMIC) (3) | 2024.09.20 |
소켓(Socket) 통신 개념과 c언어 예제 (5) | 2024.08.28 |