NOT: Bu slidedan sonra üç konu daha işleyeceğiz. İlerleyen zamanlarda eklenmiş olacaktır. http://akademi.braxp.com adresinden kontrol edebilirsiniz.
"Linux Aygıt Sürücüsü Geliştirme" (Linux Device Driver Development) eğitimini almak için "akademi@braxp.com" e-posta adresi üzerinden bize erişebilirsiniz. Talebinize göre eğitimi atölye tarzı da sunuyoruz; yani birlikte aygıt sürücüsü de geliştiriyoruz.
Linux ve bilgisayarlar hakkındaki her türlü yardım, eğitim ve destek taleplerinizi "bilgi@braxp.com" adresine e-posta atarak bize iletebilirsiniz.
Bizlere +905362615860 numaralı hattan erişebilirsiniz.
=====
Interrupt (kesme) nedir ve interrupt türleri, top ve bottom halves, /proc/interrupts ve /proc/stat açıklaması, otomatik veya manuel olarak IRQ numarası elde etme, interrupt handler (yakalayıcı) yazma ve flagler, interrupt handler gerçeklerken dikkat edilmesi gerekenler, interruptları kapatma ve açma, tasklet ve workqueue karşılaştırması, interrupt-driven I/O kullanımı
2. ONCEKI DERS NE YAPTIK
• Donanımla ile haberleşme yöntemlerini inceledik
• I/O Port ve I/O Hafızası ile RAM ve cihaz registerları arasındaki farkı
gösterdik
• Memory Barrier (Hafıza Bariyeri) kullanımını gördük
• Portlara erişim ve portları kullanabilmek için alan talep etmeyi öğrendik
• Port değerlerine user space ve kernel spaceden eriştik
• I/O hafıza eşleme ve eşlenen hafızadaki verilere erişmeyi öğrendik
• ISA ve PCI arayüzlerini özetledik
5. IRQ NUMARASI ELDE ETME
• int can_request_irq(unsigned int irq, unsigned long flags);
• Otomatik algılama
• Status byte, PCI, …
• Kernel destekli yoklama
• Manuel algılama
• Yoklama için kullanılan fonksiyonlar (<linux/interrupt.h>
• unsigned long probe_irq_on(void);
• int probe_irq_off(unsigned long);
6. HANDLER GERÇEKLEME
• Interrupt Context
• User space’ten veri alınamaz ve user space’e veri gönderilemez
• Bloklanan fonksiyonlar çalıştırılamaz
• wait_event çağrılamaz
• Bellek sadece GFP_ATOMIC flagi ile ayrılır
• Semaphore kullanımı
• schedule çağrılamaz
• “Interrupt pending” bit sıfırlama
• CPU zamanında kısa işler yapılmalı
• Eğer uzun işler yapılacaksa ya “tasklet”ler kullanılmalı ya da işlem uygun bir zamanda işlenilmek
üzere “workqueue”a eklenmelidir
9. TASKLET VS WORKQUEUE
Tasklet Workqueue
Software Interrupt Context Process Context
Sadece bir kere çalışır Birden çok kez çağrılabilir
CPU affinity CPU affinity zorunluluğu yok
Interrupt oluşabilir, bloklamamalıdır Interrupt oluşabilir, bloklayabilir
10. INTERRUPT DESTEKLİ I/O
• Okuma ve yazma interruptlarında gelen datayı bir tampon bellekte (buffer)
tutup kullanma fikri
11. ÖNÜMÜZDEKİ DERS
• Kernel Veri Türleri ve C standart türlerinin kullanımı
• Arayüze özel türlerin kullanımı
• Taşınabilirlik sorunları
• Kernelda bulunan ve sıklıkla kullanılan veri yapıları
• Aygıt modeli
• Bus, Device, Class yapıları
• Platform aygıt ve sürücüsü kavramları
• Kobject, Ksets ve alt sistemler
• Aygıtlarda firmware kullanımı