Interrupt Handler Flaglari

3.üncü parametre olarak geçilen flag ise tamamiyle 0 veya başka bir bayrak olabilir. Bu flaglarda aynı şekilde <linux\interrupt.h>

içinde tanımlanmıştır. Bu bayraklar arasından en önemlileri şunlardır.

IRQF_DISABLED: Bu flag 3. parametre olarak set edildiğinde, ilgili interrupt oluştuğunda kernel, bu interrupt handler execute edildiğinde bu hariç diğer bütün interruptları pasif ederek bu kesmenin başka bir kesme tarafından kesilmesini önleyecektir. Bu sayede performans ve kararlılık gereken önemli kesme fonksiyonlarında güvenilirlik kazanılır. Linux kerneli ilgili interrupt handler execute ettirildikten sonra iş bittiğinde tekrardan diğer interruptları aktif hale getirmektedir. Çoğunlukla bu bayrak kullanılmaz.

IRQF_SAMPLE_RANDOM: Entropi havuzu /dev/random ve /dev/urandom aygıtları için rastgele bir birikim toplar. Eski çekirdeklerde bu kullanılarak, donanımların ve ona ait olan kesmelerin kernelin öngörülemeyeceği bir zamanda ortaya çıkabileceğini söyler. Kernel versiyon 3.6'dan itibaren, Linux kerneli kesme rastgeliliğini otomatik olarak yönetir ve bu bayrak artık mevcut değildir.

Bu flag kararsız zamanlarda ağdan gelebilecek olan saldırıları sönümlemek ve sistemin interruptlardan kafasını kaldırabilmesi için savunma amacı ile kullanılır.

IRQF_SAMPLE_TIMER: Bu bayrak ilgili interrupt handler fonksiyonunun sistem zamanlama timeri için kesmeleri execute ettiğini belirtir.

IRQF_SHARED: Bu flag ilgili interrupt eventinin birden fazla handler tarafından kullanılacağını bildirmek üzere set edilir. Bu sayedebir interrupt oluştuğunda birden fazla interrupt handler execute edilebilir.Eğer böyle bir durum gerekiyor isebu bayrak mutlaka set edilmelidir yoksa ilgili interrupta ait interrupt handlerinde sadece 1 tane interrupt handler execute ettirlir. Bu da genellikle en son tanıtılan interrupt handler fonksiyonu olur.

4.üncü parametre ise ASCII olarak kesmeye atanan bir isimdir. Bu isim sayesinde /proc/irq ve /proc/interrupts çıktılarında ilgili interruptunve numaranın ne amaçla kullanıldığı kolayca diğer kullanıcılara sunulur ve bu gerçekten çok aydınlatıcı bir bilgidir. Bu sayedeilgili interrupta aitbilgiler kolayca analiz edilebilir. Örnek olarak kaç kez GPIO veya Serial iletişime ait RX kesmesioluştuğu rahat bi şekilde görülebilmektedir.Yani kısaca bu parametrenin interrupt handlereaitbir kesme tanımlayıcısı olduğunu söyleyebiliriz.

5.olarak geçilen parametre dev* ise paylaşımlı interruptları tanımlamak ve bir interruptun birden fazla interrupt handler tarafından kullanılabilmesi için tanımlanmış bir pointerdir. dev sayesinde bu interrupt handlerlerinin kullanılmasını ve kernele bildirilmesini sağlayan benzersiz tanımlamalar oluşturulur.Bu parametre olmadan interrupt eventi oluştuğunda çekirdek hangi interrupt handleri çağıracağını bilemez. Bu yüzden eğer birden fazla interrupt handleri aynı interrupt üzerine atamak istemiyorsanız bu pointeri null geçebilirsiniz. Fakat kesme hattı kullanılıyor isebu parametre kesinlikle boş olamaz ve kesinlikle bir atama yapılması gerekmektedir. Bu işaretçi kesme işleyicine aktarılır. Başarı durumunda irq_request fonksiyonu 0 döndürür. Eğerki sıfırdan farklı bir değer döndürüyor ise muhtemel aynı kanalı kullanan farklı bir interrupt handler ile çakışıyorsunuzdur. Bu hata ise e-BUSY denen bir flagtir aslında.

results matching ""

    No results matching ""