![printk 메시지를 필터링할 수 없습니다.](https://linux55.com/image/58621/printk%20%EB%A9%94%EC%8B%9C%EC%A7%80%EB%A5%BC%20%ED%95%84%ED%84%B0%EB%A7%81%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 드라이버를 작성 중이며 일반적으로 자체 로그 수준 구성표를 구현합니다. 그러나 이번에는 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 메시지를 필터링해야 합니다. 커널이 이 작업을 수행하도록 하는 것이 아니라 사용자 공간 프로그램에 맡기는 것이 디자인 결정인 것 같습니다.