리눅스 커널 디버깅 pr_debug 사용하기

반응형

오늘은 리눅스 커널 내 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처럼 디버깅 메시지를 출력하게 된다.

 

 

https://stackoverflow.com/questions/28936199/why-is-pr-debug-of-the-linux-kernel-not-giving-any-output

https://www.kernel.org/doc/local/pr_debug.txt

반응형