오늘은 리눅스 커널 내 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처럼 디버깅 메시지를 출력하게 된다.
'Linux&Programming' 카테고리의 다른 글
[Rust] 러스트 프로그래밍 공부 변수와 상수, 섀도잉 (0) | 2024.12.07 |
---|---|
[Rust] 러스트 프로그래밍 공부 - 카고(Cargo) (1) | 2024.12.02 |
[Rust] 01. 러스트 설치하기 (mac OS) (1) | 2024.12.02 |
Ubuntu TACACS+ 서버 구축 및 systemd 서비스 생성하기 (0) | 2024.09.25 |
리눅스 커널 메모리 할당과 GFP Flags (kmalloc, GFP_KERNEL, GFP_ATOMIC) (3) | 2024.09.20 |