5 Aralık 2017 Salı

Kernel Spacede Klavyenin Ledlerini Yakma


1. ADIM:



İlk önce gerekli kütüphanelerimizi ve değişkenlerimizi include ediyoruz ve led statelerini define ediyoruz.



2. ADIM:



Sonra init moduülümüzü yazıyoruz. Burada ilk önce devicesımız için gerekli olan yeri ayırıyoruz sonra ayırdığımız yerde character deviceımızı başlatıyoruz ve sonrada device ı ekliyoruz. Daha sonra tty_driver değişkenimize kullandığımız konsolu bulup ekliyoruz.



3. ADIM:




Şimdi ise cleanup modülde sıra. Burada da oluşturğumuz character devicemızı siliyoruz. Sonra ise init modülü ve exit modülü tanımlıyoruz.



4. ADIM:



Şimdi ise deviceımızın open release read ve write fonksiyonlarını kendi fonksiyonlarımıza göre override ediyoruz ve device a tanıtıyoruz.




5. ADIM:



Artık asıl fonksiyonlarımızı yazmaya başlayabiliriz. İlk önce isValid adında bir fonksiyon yazıyoruz bu fonksiyon ile parametre olarak gönderdiğimiz sayının geçerli bir led yakma işlemi olup olmadığını kontrol ediyoruz eğer geçerli bir state ise o statei döndürür, değil ise -1 döndürür.

İkinci olarak device a gönderilen parametreyi parse etmemiz için direk isle fonksiyonuna yolluyoruz. Burada eğer geçerli bir led yakma işlemi olup olmadığını önceden yazdığımız isValid() fonksiyonundan yararlanarak kontrol ediyoruz. Eğer geçerli bir led statei yakalayabilirsek birazdan yazacağımız setled fonksiyonuna o ledi veya ledleri yakıp söndürmesi için parametre olarak gönderiyoruz. Eğer yakalayamadıysak hata döndürüyoruz.




6. ADIM:




Son olarak herşeyimiz hazır ve artık ledlerle oynayabiliriz. İlk önce gelen parametrenin hangi state olduğunu kontrol ediyoruz. Onu bulduktan sonra init modülümüzde oluşturduğumuz tty değişkenimizin ioctl fonksiyonuna KDSETLED flagi ile stateimizi yolluyoruz. Ve böylelikle modülümüzü yazmış bulunmaktayız. Artık derlemeye geçebiliriz.



7. ADIM:





Makefileı da oluşturduktan sonra terminalden make komutunu yazarak kodumuzu derliyoruz ve sonrada sudo insmod led.ko yazarak modülümüzü insert ediyoruz.



8.ADIM:

 


Ve son olarak modülümüz kontol ediyoruz. Bunun için echo 0 dan 7 ye kadar bir sayı > /dev/DevelopNull yazıyoruz ve Num Lock tuşunun ledinin yandığını göreceksiniz. Ve son olarakta terminalden dmesg | tail -10 yazarak son 10 logu görüyoruz ve buradada gerekli logları gördüğümüze göre modülümüz sorunsuz çalışıyor.

Girilen parametrelerin anlamı şu şekildedir:

0: Hepsini Kapat
1: Scroll Lock Aç
2: Num Lock Aç
4: Caps Lock Aç

eğer iki veya daha fazla ledi yakmak için örneğin Caps Lock ile Num Lock ledlerini yakmak için
4 + 2 = 6 parametresini devicesımıza yollamamız yeterlidir.

Hiç yorum yok:

Yorum Gönder