Ana Sayfa

Linux Çekirdeğinde Donanım ve Yazılım Arayüzü Nasıl Çalışır?

1 dk okuma

Linux çekirdeğinde donanım ve yazılım arasındaki etkileşim, temel olarak bellek üzerinden gerçekleşir. Bu karmaşık sürecin en üstünde kullanıcı alanı uygulamaları, ortasında çekirdek sürücüleri ve en altta ise donanım cihazları bulunur. Kullanıcı alanı uygulamaları, donanımla doğrudan etkileşime girmek yerine, çekirdek tarafından /dev sanal dosya sistemi altında dosya olarak sunulan donanım arayüzlerini kullanır. Bu sayede open, read, write, mmap gibi standart sistem çağrıları ve cihaza özel işlevler için ioctl gibi çağrılarla donanıma erişim sağlanır. Kullanıcı alanı bir /dev dosyasıyla etkileşime girdiğinde, bu durum doğrudan çekirdek sürücüsündeki geri çağırma işleyicilerini (callback handlers) tetikler.

Çekirdek sürücüleri ise donanımla çoğunlukla Bellek Eşlemeli G/Ç (MMIO) aracılığıyla iletişim kurar. Bu yöntemde, donanım belirli fiziksel bellek adreslerinde 'görünür' hale gelir ve sürücüler, donanımın tanımladığı bir 'API' kullanarak bu adreslere yükleme (load) ve depolama (store) talimatlarıyla erişir. Örneğin, bir sensörden veri okumak için ilgili fiziksel adresten okuma yapılırken, bir cihaza veri yazmak için belirli bir adrese yazma işlemi gerçekleştirilir. Bu okuma/yazma işlemlerinin yapıldığı donanım bileşenlerine teknik olarak 'kayıtlar' (memory mapped registers) denir. Bu düşük seviyeli etkileşim, PIC veya Arduino (AVR) gibi mikrodenetleyicilerde yapılan çıplak donanım programlamasına oldukça benzerdir.

MMIO dışında, çekirdeğin donanımla etkileşim kurduğu bir diğer ana yöntem kesmelerdir (interrupts). Kesme tabanlı G/Ç işlemleri, sürücülerin belirli kesme isteği (IRQ) numaraları için işleyiciler kaydetmesine olanak tanır ve bu işleyiciler, çekirdeğin genel kesme işleme altyapısı tarafından çağrılır. Makalede ARM platformları için bir UART (seri port) donanım sürücüsü örneği verilmiş olup, readb gibi fonksiyonların, cihazın temel adresinden ve belirli bir kaydın ofsetinden türetilen bir bellek adresinden nasıl veri okuduğu gösterilmiştir. Bu mekanizmalar, donanım ve yazılım arasındaki köprüyü oluşturarak işletim sisteminin donanımı verimli bir şekilde yönetmesini sağlar.

İçgörü

Linux çekirdeğinin donanımla nasıl etkileşime girdiğini ve bu etkileşimin bellek tabanlı mekanizmalarla nasıl sağlandığını anlamak, sistem programlamanın temelini oluşturur.

Kaynak