Linux

Basit Bir Karakter Aygıtı Uygulaması

Merhaba arkadaşlar. Bu yazıda sizlere Linux’ta basit bir karakter aygıtının nasıl yazılacağını anlatmaya çalışacağım.

Karakter aygıtları(character device) karakter akımlarını kabul eder yada dağıtırlar.Adreslenemezler ve bu aygıtlarda arama işlemi gerçekleştirilemez.Yazıcılar, ağ aygıtları, mouse bu aygıtlara örnek verilebilir.
İşletim sisteminin dosya sistemi bu aygıtların hepsi ile soyut aygıtlar olarak ilgilenir. Aygıtların arka planında aygıta özel olan olaylar ile ilgilenmezler.(Kaynak)

Şimdi bizim yazacağımız karakter aygıtı girilen bir stringi ters çevirip aygıt dosyasına yazacak. C kodumuz ve açıklaması şu şekilde:

aygitimiz.c Kodu

Kodumuz içinde yazılan aygıtı kernel’a yüklemek için init_module ve cleanup_module fonksiyonları bulunmakta. Bu iki fonksiyon konsoldan verilecek komutlar vasıtası ile çalışacak.

struct file_operations fops ifadesi ile tanımladığımız yapının içine aygitimizin kullancağı fonksiyonları tanıttık. Örneğin aygıtın okunması işlemi sırasında aygit_oku fonksiyonu çalışacak.

aygit_ac ve aygit_kapa fonksiyonları aygıt ile işlem yapıldığında çalışacaklar. Bizim asıl işimizi üstlenecek fonksiyonlarımız ise aygit_yaz ve aygit_oku fonksiyonları.

Konsoldan aygıt dosyasına yazılmak üzere bir string verildiğinde bu string aygit_yaz fonksiyonun buff parametresine düşüyor. String’in uzunluğuda len parametresi içinde tutuluyor. Biz de bu parametredeki değeri 100 boyutlu olarak tanımladığımız mesaj dizisine tersten atıyoruz.

aygit_oku fonksiyonu da çekirdek ile kullanıcı katmanı arası iletişimi sağlayan metotlardan biri olan put_user metodu ile aygıt dosyası içindeki veriyi konsola basıyor.

Makefile Kodu

Her ne kadar yazdığımız kod bir C kodu da olsa çekirdek seviyesinde işlem yaptığımız için bu kodu derlemek bir dosya ve bir komut aracılığı ile olur. Konsoldan make komutunu verdiğimizde bu dosya aracılığı ile C kodumuz derlenecek.

Aygıt Dosyasını Oluşturma

İşlemlerimizi yürüteceğimiz C kodumuz için fonksiyonlarla çalışacak aygıt dosyasını oluşturmamız gerekiyor. Bunun için konsoldan şu komutları veriyoruz:

Bu komutları vermeden işlem yapmaya çalışırsak dosya yine oluşur ancak C kodumuz içindeki kuralları yerine getirmez.

Ekran Çıktıları

Aygıt dosyasını oluşturuyorum.

Screenshot from 2014-11-25 18:24:06

 

 make komutunu veriyorum ve kernel object(ko) dosyasını oluşturuyorum.

Screenshot from 2014-11-25 18:16:09

ko dosyasını çekirdeğe yükleyip aygıt dosyasının içine kod5.org yazılması için komut verip cat ile dosya içeriğine bakıyorum ve karakter aygıtının düzgün bir şekilde çalıştığını görüyorum.

Screenshot from 2014-11-25 18:28:46

 

Bu yazıda da bu kadar arkadaşlar. Başka bir yazıda görüşmek üzere hoşçakalın.

  • ahmet

    hm nice