printk
- C kursu
- Uzman
- Ders 9/47
- 5 dk
printk ile çekirdek loglamayı öğrenirsin.
printk nedir?
printk, çekirdek içinde kullanılan yazdırma fonksiyonudur. printf gibi çalışır ama çıktıyı çekirdek log arabelleğine yazar, ekrana değil.
Her ileti bir öncelik öneki alır: KERN_EMERG, KERN_ALERT, KERN_CRIT, KERN_ERR, KERN_WARNING, KERN_NOTICE, KERN_INFO, KERN_DEBUG. Önek, iletinin hangi konsol seviyesinde gösterileceğini belirler. dmesg komutuyla bu iletileri okursun. Sürücü yazarı printk(KERN_INFO "...\n") biçimini kullanır.
Log seviyeleri ve kullanım
printk'in sekiz seviyesi numaralandırılmıştır: KERN_EMERG 0, KERN_DEBUG 7. Düşük numara yüksek öncelik demektir. Sürücü yazarı duruma uygun seviyeyi seçer.
Bilgi için KERN_INFO, hata için KERN_ERR, hata ayıklama için KERN_DEBUG kullanılır. KERN_DEBUG iletleri üretim çekirdeğinde varsayılan olarak gizlenir. Çok gürültülü log arabelleği doldurur ve önemli iletileri iter. Bu yüzden sürücü yazarı her iletiye gerekli en düşük önceliği verir. pr_info ve pr_err kısa sarmallardır.
Uygulama Log seviyelerini yazdır
void print_loglevel(const char *name, int level) fonksiyonunu tanımla; gövdesi printf("%d:%s\n", level, name); olsun. main içinde dört seviye için çağır: ("KERN_EMERG", 0), ("KERN_ALERT", 1), ("KERN_ERR", 3), ("KERN_INFO", 6).
Başlangıç kodu
#include <stdio.h>
// print_loglevel fonksiyonunu tanımla
// KERN_EMERG, KERN_ALERT, KERN_ERR, KERN_INFO için çağır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
void print_loglevel(const char *name, int level) {
printf("%d:%s\n", level, name);
}
int main(void) {
print_loglevel("KERN_EMERG", 0);
print_loglevel("KERN_ALERT", 1);
print_loglevel("KERN_ERR", 3);
print_loglevel("KERN_INFO", 6);
return 0;
}Beklenen çıktı
0:KERN_EMERG 1:KERN_ALERT 3:KERN_ERR 6:KERN_INFO
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 printk seviye önekini tamamla
printk(KERN_____ "sürücü yüklendi
");
printk(KERN_ALERT "sürücü yüklendi
");
Açıklama: KERN_ALERT hemen müdahale gerektiren iletileri etiketler.
2 Log seviyelerini değerle eşle
| Kavram | Anlamı |
|---|---|
KERN_EMERG |
0 |
KERN_ALERT |
1 |
KERN_ERR |
3 |
KERN_INFO |
6 |
3 En yüksek öncelikli log seviyesi hangisidir?
- KERN_EMERG Doğru cevap
- KERN_INFO
- KERN_DEBUG
- KERN_WARNING
Açıklama: KERN_EMERG sistem çöküşü anlamına gelir, en yüksek önceliktir.