CodeBlanks Logo Icon CodeBlanks

printk

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

main.c
#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

main.c
#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

Soru
printk(KERN_____ "sürücü yüklendi
");
Cevap
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.

Uzman bölümündeki tüm dersler