"netdev_dbg" 로그에 액세스하는 방법은 무엇입니까?

"netdev_dbg" 로그에 액세스하는 방법은 무엇입니까?

qc7000 드라이버(qca_spi.c)를 사용하여 장치를 디버깅하려고 합니다.

유용한 netdev_dbg 메시지가 잔뜩 들어있습니다.

이러한 메시지가 저장된 로그에 어떻게 액세스할 수 있나요?

답변1

짧은 답변:이러한 인쇄는 항상 /proc/kmsg에 표시되어야 실행할 수 있습니다.

$ cat /proc/kmsg

와서 확인해 보세요. 각 항목은 옆에 있는 로그 수준도 지정하므로 "<7>"로 시작하는 항목을 찾으세요.

추가 정보:netdev_dbg()는 include/linux/netdevice.h에 정의된 매크로로, 궁극적으로 netdev_printk(KERN_DEBUG, ...)를 호출합니다. 이로 인해 KERN_DEBUG 로그 수준의 printk() 호출이 발생합니다. 각 시스템에는 dmesg에 인쇄할 레벨과 무시할 레벨을 정의하는 자체 printk 구성이 있습니다[1]. 그럼에도 불구하고 모든 printk 호출은 로그 수준에 관계없이 /proc/kmsg로 인쇄됩니다.

다음 명령을 실행하여 dmesg 설정을 확인할 수 있습니다.

$cat /proc/sys/kernel/printk

이 파일의 출력에는 현재, 기본값, 최소 및 시작 시간 기본 수준의 4가지 값이 있습니다. 당신은 "현재"에 관심이 있습니다. 제 경우에는 재부팅 후 디버그 레벨이 3(KERN_ERR)이었습니다. 이는 레벨 >= 3인 모든 printk 호출이 무시됨을 의미합니다.

$cat /proc/sys/kernel/printk
3       4       1       7

이를 다양한 방법으로 변경할 수 있습니다. 저는 dmesg -n을 사용하고 디버그 수준 printk 호출을 인쇄해야 하는 "8"로 설정했습니다.

$sudo dmesg -n 8
$cat /proc/sys/kernel/printk
8       4       1       7

이렇게 하면 dmesg에서 디버그 인쇄를 볼 수 있습니다.

노트:

  • KERN_DEBUG는 "7"이므로 현재 로그 레벨을 "8"로 설정해야 표시됩니다.
  • dmesg 설정을 무시할 수 있는 다른 설정이 있으므로 어떤 경우에도 /proc/kmsg가 디버그 메시지를 보는 데 가장 적합한 선택이어야 합니다.
  • "cat /proc/kmsg"를 호출할 때마다 로그가 플러시되므로 두 번째 호출에서는 새 메시지가 도착하지 않은 경우 로그가 비어 있을 수 있습니다.

[1] printk 및 인쇄 수준에 대한 추가 정보:https://elinux.org/Debugging_by_printing#Log_Levels

관련 정보