Linux 에서 커널 디버깅이 활성화되었는지 확인하는 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 에서 커널 디버깅이 활성화되었는지 확인하는 방법을 배우게 됩니다. 여기에는 커널 구성 탐색, 디버그 정보 확인, 그리고 debugfs 검사가 포함됩니다.

먼저, zcat /proc/config.gz를 사용하여 커널 구성 파일을 검사하고, grep을 사용하여 CONFIG_LOCALVERSION과 같은 특정 옵션을 검색합니다. 다음으로, dmesg를 사용하여 디버그 정보를 확인합니다. 마지막으로, /sys/kernel/debug에 위치한 debugfs 파일 시스템을 검사합니다. 이러한 단계를 통해 Linux 시스템에서 커널 디버깅이 활성화되었는지 확인하는 방법에 대한 포괄적인 이해를 얻을 수 있습니다.

zcat /proc/config.gz로 커널 구성 확인

이 단계에서는 명령줄을 사용하여 Linux 커널 구성을 확인하는 방법을 살펴보겠습니다. 커널 구성은 커널에 내장될 기능과 커널의 동작 방식을 결정합니다.

커널 구성은 /proc/config.gz라는 파일에 저장됩니다. 이 파일은 커널 구성의 압축된 버전입니다. 이 파일의 내용을 보려면 zcat 명령을 사용합니다.

zcat은 실제로 압축을 풀지 않고 압축된 파일의 내용을 볼 수 있게 해주는 명령줄 유틸리티입니다. 전체 파일의 압축을 푸는 데 필요한 시간과 디스크 공간을 절약해주므로, 큰 압축 파일을 볼 때 특히 유용합니다.

커널 구성을 확인하려면 터미널을 열고 다음 명령을 입력하십시오.

zcat /proc/config.gz

이 명령은 커널 구성을 터미널에 출력합니다. 출력이 상당히 길기 때문에 빠르게 스크롤될 수 있습니다. 출력을 한 페이지씩 보려면 출력을 less 명령으로 파이프할 수 있습니다.

zcat /proc/config.gz | less

이제 화살표 키를 사용하여 구성을 스크롤할 수 있습니다. q를 눌러 less를 종료합니다.

커널 구성 파일은 일련의 줄로 구성되며, 각 줄은 특정 구성 옵션을 정의합니다. 이러한 옵션은 포함된 하드웨어 드라이버, 지원되는 네트워킹 프로토콜, 활성화된 보안 기능 등 커널의 다양한 측면을 제어합니다.

특정 구성 옵션을 검색해 보겠습니다. 예를 들어, CONFIG_LOCALVERSION 옵션이 설정되어 있는지 확인해 보겠습니다. 이 옵션은 커널에 대한 사용자 지정 버전 문자열을 지정합니다.

이 옵션을 검색하려면 grep 명령을 사용할 수 있습니다. grep은 텍스트 파일에서 특정 패턴을 검색할 수 있는 강력한 명령줄 유틸리티입니다.

터미널에 다음 명령을 입력하십시오.

zcat /proc/config.gz | grep CONFIG_LOCALVERSION

CONFIG_LOCALVERSION 옵션이 설정되어 있으면 다음과 유사한 줄이 표시됩니다.

CONFIG_LOCALVERSION="-labex"

CONFIG_LOCALVERSION의 정확한 값은 커널 구성에 따라 다를 수 있습니다. 옵션이 설정되지 않은 경우 grep은 아무것도 출력하지 않습니다.

다른 구성 옵션도 검색할 수 있습니다. 예를 들어, CONFIG_DEBUG_INFO 옵션이 활성화되어 있는지 확인할 수 있습니다. 이 옵션은 커널 문제 해결에 유용할 수 있는 디버깅 정보 생성을 활성화합니다.

zcat /proc/config.gz | grep CONFIG_DEBUG_INFO

일반적인 출력은 다음과 같습니다.

CONFIG_DEBUG_INFO=y

이는 커널 구성에서 디버그 정보가 활성화되었음을 나타냅니다.

커널 구성을 검사하여 시스템이 어떻게 구성되었고 어떤 기능이 활성화되었는지에 대한 귀중한 통찰력을 얻을 수 있습니다. 이 정보는 문제 해결, 성능 최적화, 특정 요구 사항에 맞게 시스템을 사용자 정의하는 데 유용할 수 있습니다.

dmesg 에서 디버그 정보 확인

이 단계에서는 dmesg 명령을 사용하여 접근할 수 있는 커널의 메시지 버퍼에서 디버그 정보의 존재를 확인하는 방법을 배우겠습니다. dmesg는 커널의 메시지 버퍼를 표시하는 명령줄 유틸리티입니다. 이 버퍼에는 디버깅 정보, 하드웨어 초기화 메시지, 오류 메시지 등 커널에서 생성된 다양한 메시지가 포함되어 있습니다.

먼저, 디버그 정보가 무엇이며 왜 중요한지 이해해 보겠습니다. 디버그 정보는 개발자가 문제를 진단하고 해결하는 데 도움이 되는 프로그램 또는 커널에 포함된 추가 데이터입니다. 여기에는 함수 이름, 변수 이름, 줄 번호 등이 포함되어 있어 코드 실행을 추적하고 오류의 원인을 식별하는 데 더 쉽게 해줍니다.

커널의 메시지 버퍼를 보려면 터미널을 열고 다음 명령을 입력하십시오.

dmesg

이 명령은 커널의 메시지 버퍼 내용을 터미널에 출력합니다. 출력 내용이 상당히 길 수 있으므로 less와 같은 페이저로 파이프하는 것이 유용한 경우가 많습니다.

dmesg | less

이제 화살표 키를 사용하여 메시지를 스크롤할 수 있습니다. q를 눌러 less를 종료합니다.

디버그 정보의 존재를 확인하려면 dmesg 출력에서 특정 키워드 또는 패턴을 찾아보겠습니다. 예를 들어, 커널이 디버깅을 활성화하여 빌드된 경우 함수 이름이나 줄 번호가 포함된 메시지를 볼 수 있습니다.

dmesg 출력에서 키워드 debug를 검색해 보겠습니다. 터미널에 다음 명령을 입력하십시오.

dmesg | grep debug

이 명령은 dmesg 출력에서 debug라는 단어가 포함된 모든 줄을 표시합니다. 디버깅이 활성화된 경우 다음과 같은 메시지를 볼 수 있습니다.

[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-76-generic root=UUID=... ro debug
[    1.234567] ACPI: Added _OSI(Module Device)

이러한 메시지가 있다는 것은 커널에서 어느 정도의 디버깅이 활성화되었음을 나타냅니다.

디버그 정보를 확인하는 또 다른 방법은 특정 커널 모듈 또는 드라이버와 관련된 메시지를 찾는 것입니다. 예를 들어, 특정 네트워크 드라이버를 디버깅하는 데 관심이 있다면 해당 드라이버와 관련된 메시지를 검색할 수 있습니다.

eth0 네트워크 인터페이스와 관련된 디버그 메시지를 확인하려는 경우를 가정해 보겠습니다. 다음 명령을 사용할 수 있습니다.

dmesg | grep eth0

이 명령은 dmesg 출력에서 문자열 eth0이 포함된 모든 줄을 표시합니다. 네트워크 드라이버가 디버그 메시지를 생성하는 경우 다음과 같은 출력을 볼 수 있습니다.

[    2.345678] eth0: link up, speed 100 Mbps, full duplex
[    3.456789] eth0: received packet with invalid checksum

이러한 메시지는 네트워크 드라이버의 동작에 대한 귀중한 정보를 제공하고 문제를 해결하는 데 도움이 될 수 있습니다.

dmesg 출력을 검사하고 특정 키워드 또는 패턴을 검색하여 디버그 정보의 존재를 확인하고 커널 및 해당 모듈의 내부 작동 방식에 대한 통찰력을 얻을 수 있습니다.

/sys/kernel/debug 에서 debugfs 검사

이 단계에서는 Linux 커널을 디버깅하고 모니터링하기 위한 강력한 도구인 debugfs 파일 시스템을 살펴보겠습니다. Debugfs 는 내부 커널 데이터 구조에 접근하고 특정 커널 동작을 제어하는 방법을 제공합니다.

Debugfs 는 일반적으로 /sys/kernel/debug에 마운트됩니다. 터미널에서 이 디렉토리로 이동해 보겠습니다.

cd /sys/kernel/debug

이제 ls 명령을 사용하여 이 디렉토리의 내용을 나열합니다.

ls

다양한 파일과 디렉토리가 표시됩니다. 이는 서로 다른 커널 서브시스템과 기능을 나타냅니다. 이 디렉토리의 정확한 내용은 커널 버전 및 구성에 따라 다를 수 있습니다.

debugfs 의 많은 파일은 읽기 전용이며 커널의 내부 상태에 대한 정보를 제공합니다. 일부 파일은 쓰기 가능하며 커널 매개변수를 수정하거나 특정 작업을 트리거할 수 있습니다.

중요: debugfs 의 파일에 쓸 때는 매우 주의하십시오. 이러한 파일을 잘못 수정하면 시스템 불안정 또는 심지어 충돌이 발생할 수 있습니다. 정확히 무엇을 하고 있는지 알고 있는 경우에만 debugfs 의 파일을 수정하는 것이 일반적으로 권장됩니다.

debugfs 내의 특정 디렉토리를 살펴보겠습니다. 조사할 일반적인 디렉토리 중 하나는 tracing입니다. 이 디렉토리에는 커널 코드의 실행을 모니터링하고 성능 병목 현상을 식별할 수 있는 커널의 추적 인프라와 관련된 파일이 포함되어 있습니다.

tracing 디렉토리로 이동합니다.

cd tracing

tracing 디렉토리의 내용을 나열합니다.

ls

trace, events, options 등과 같은 파일이 표시됩니다. trace 파일에는 실제 추적 데이터가 포함되어 있습니다. cat 명령을 사용하여 이 파일의 내용을 볼 수 있습니다.

cat trace

출력은 다양한 커널 함수의 실행을 보여주는 일련의 추적 이벤트가 됩니다. 이 데이터는 커널의 동작 방식을 이해하고 성능 문제를 식별하는 데 유용할 수 있습니다.

events 디렉토리에는 사용 가능한 추적 이벤트에 대한 정보가 포함되어 있습니다. 이 디렉토리를 탐색하여 추적에 사용할 수 있는 이벤트를 확인할 수 있습니다.

ls events

각각 다른 이벤트 범주를 나타내는 디렉토리 목록이 표시됩니다. 예를 들어, sched 디렉토리에는 커널의 스케줄러와 관련된 이벤트가 포함되어 있습니다.

이 디렉토리를 탐색하여 사용 가능한 특정 이벤트를 확인할 수 있습니다. 예를 들어, sched 디렉토리의 이벤트를 보려면 다음을 수행합니다.

ls events/sched

sched_switch, sched_wakeup 등과 같은 파일이 표시됩니다. 이는 추적할 수 있는 특정 스케줄링 이벤트를 나타냅니다.

debugfs 파일 시스템을 탐색하여 Linux 커널의 내부 작동 방식에 대한 귀중한 통찰력을 얻고 이 정보를 사용하여 시스템을 디버깅하고 모니터링할 수 있습니다. debugfs 의 파일을 수정할 때는 부주의한 변경으로 인해 시스템 불안정이 발생할 수 있으므로 주의하십시오.

마지막으로, 홈 디렉토리로 돌아갑니다.

cd ~/project

요약

이 랩에서는 명령줄을 사용하여 Linux 커널 구성을 확인하는 방법을 살펴보았습니다. 커널 구성은 압축된 파일 /proc/config.gz에 저장되며, zcat 명령을 사용하여 볼 수 있다는 것을 배웠습니다. zcat의 출력을 less로 파이프하면 구성을 더 쉽게 탐색할 수 있습니다.

또한, 커널 구성 파일 내에서 특정 구성 옵션 (예: CONFIG_LOCALVERSION) 을 검색하기 위해 grep 명령을 사용하여 특정 기능 또는 설정이 커널에서 활성화되었는지 확인했습니다.