printk 메시지를 필터링할 수 없습니다.

printk 메시지를 필터링할 수 없습니다.

저는 드라이버를 작성 중이며 일반적으로 자체 로그 수준 구성표를 구현합니다. 그러나 이번에는 Linux에 내장된 printk 체계를 활용해 보고 싶었습니다.

표시된 printk 로그 수준 설정을 조정할 수 있음을 발견했습니다.

[sri@localhost ~]$ sudo cat /proc/sys/kernel/printk
4   4   1   7

실행하여 설정할 수 있습니다.

dmesg -n 3

또는

[sri@localhost ~]$ sudo bash -c 'echo 3 > /proc/sys/kernel/printk'
[sri@localhost ~]$ sudo cat /proc/sys/kernel/printk
3   4   1   7

내 드라이버 코드에서

printk(KERN_EMERG   "KERN_EMERG");
printk(KERN_ALERT   "KERN_ALERT");
printk(KERN_CRIT    "KERN_CRIT");
printk(KERN_ERR     "KERN_ERR");
printk(KERN_WARNING "KERN_WARNING");
printk(KERN_NOTICE  "KERN_NOTICE");
printk(KERN_INFO    "KERN_INFO");
printk(KERN_DEBUG   "KERN_DEBUG");

이로 인해

[sri@localhost scull]$ sudo dmesg | grep KERN
[ 3072.247079] KERN_EMERG
[ 3072.247084] KERN_ALERT
[ 3072.247087] KERN_CRIT
[ 3072.247089] KERN_ERR
[ 3072.247092] KERN_WARNING
[ 3072.247093] KERN_NOTICE
[ 3072.247096] KERN_INFO
[ 3072.247097] KERN_DEBUG

따라서 로그 수준이 3(일명 KERN_ERR) 임에도 불구하고 WARNING, NOTICE, INFO및 는 DEBUG여전히 로그( dmesg/var/log/messages)에 표시됩니다.

/proc/sys/kernel/printk이것이 영향을 미치는지 또는 영향을 미치지 않는지 궁금해지기 시작했습니다 .dmesg/var/log/messages

내가 이해하지 못하거나 잘못하고 있는 것은 무엇인가? 이것이 예상된 동작인 경우 드라이버의 자세한 정도를 조정하는 다른 기본 제공 방법이 있습니까?

저는 Fedora Core 20을 실행하고 있습니다:

[sri@localhost scull]$ uname -a
Linux localhost.localdomain 3.16.6-203.fc20.x86_64 #1 SMP Sat Oct 25 12:44:32 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

답변1

/proc/sys/kernel/printk시스템 콘솔에 인쇄되는 내용을 제어하므로 dmesg를 사용하여 표시되는 인쇄는 예상되는 동작입니다. 예를 들어 dmesg 출력을 필터링할 수 있습니다 dmesg --level=warn(참조 dmesg --help).

동적 로깅 수준을 사용하면 printk 메시지를 필터링해야 합니다. 커널이 이 작업을 수행하도록 하는 것이 아니라 사용자 공간 프로그램에 맡기는 것이 디자인 결정인 것 같습니다.

관련 정보