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