CodeBlanks Logo Icon CodeBlanks

Özet - Sürücü temelleri

Modül yapısı ve fops'u birleştirerek bir karakter sürücü iskeleti yazarsın.

Özet - Sürücü temelleri

Bu grupta çekirdek modülü yazmanın temellerini gördün: insmod/rmmod ile yükleme, module_init/module_exit yapı iskeleti, printk ile loglama, dev_t ile cihaz numarası ve file_operations ile kullanıcı arayüzü.

Bir sürücü yüklenirken init fonksiyonu çalışır, gerekli kaynakları alır ve cihaz numarasını kaydeder. Kullanıcı /dev altındaki dosyayı açınca .open çağrılır; okuma ve yazma .read ve .write üzerinden geçer. Şimdi beş kavramı birleştiren bir mini görev yazacaksın.

Uygulama Sürücü bilgilerini yazdır

void print_driver_info(const char *topic, const char *detail) fonksiyonunu tanımla; gövdesi printf("%s -> %s\n", topic, detail); olsun. main içinde beş konu için çağır: ("insmod", "load"), ("module_init", "start"), ("printk", "log"), ("dev_t", "major:minor"), ("fops", "open/read/write").

Başlangıç kodu

main.c
#include <stdio.h>

// print_driver_info fonksiyonunu tanımla
// beş konuyu yazdır: insmod, module_init, printk, dev_t, fops

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

void print_driver_info(const char *topic, const char *detail) {
    printf("%s -> %s\n", topic, detail);
}

int main(void) {
    print_driver_info("insmod", "load");
    print_driver_info("module_init", "start");
    print_driver_info("printk", "log");
    print_driver_info("dev_t", "major:minor");
    print_driver_info("fops", "open/read/write");
    return 0;
}

Beklenen çıktı

insmod -> load
module_init -> start
printk -> log
dev_t -> major:minor
fops -> open/read/write

Sürücü temelleri tamam

Tebrikler! Sürücü temellerini bitirdin. Çekirdek modülü yazmanın tüm iskeletini gördün: yükleme, init/exit, loglama, cihaz numarası ve dosya işlemleri. Artık basit bir karakter sürücüsü iskeleti kurabilirsin.

Bir sonraki grupta derleyici yapımına geçeceksin: lexer, parser, AST, kod üretimi ve sembol tablosu. Orada kodu analiz eden bir araç yapacaksın; sürücü yazmak için öğrendiğin C becerileri orada da geçerli. Hazır olduğunda devam et.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir modülün başlatma fonksiyonu ne zaman çağrılır?

  • Kaldırma sırasında
  • Yalnız derleme sırasında
  • Her read çağrısında
  • Yükleme sırasında Doğru cevap

Açıklama: module_init ile bildirilen fonksiyon yüklemede çalışır.

2 Beş sürücü kavramını eşle

Kavram Anlamı
insmod Modül yükler
module_init Başlatma
printk Log yazar
dev_t Cihaz numarası
fops Kullanıcı arayüzü

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