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.
İş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.
myDevice.c koduna ulasmak icin http://pastebin.com/tP9uxhf6

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 dev_read fonksiyonu çalışacak.
dev_open ve aygit_close fonksiyonları aygıt ile işlem yapıldığında çalışacaklar. Bizim asıl işimizi üstlenecek fonksiyonlarımız ise dev_write ve dev_read 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.
Burada mknod ozel dosyalar yaratmak icin kullaniliyor. c ise character device olusturacagimiz icin kullaniyoruz. Major ve minor numaralari ise ayirt edici olarak kullaniliyor.
chmod ile dosya permissionlarini belirliyoruz.
Burada yazdigimiz myDevice.c modulunu derliyoruz. Kernel based oldugu icin bu sekil derleyebiliyoruz.
derledikten sonra myDevice.ko ve diger lib dosyalari olusuyor.
insmod ile olusturdugumuz modulu load ediyoruz.
Modul sorunsuz sekilde yuklendikten sonra echo ile yazdigimiz character device'i test ediyoruz.
roottan hemen yaninda ters yazilmis yazi geliyor.
test.c koduna ulasmak icin : http://pastebin.com/Ce5GKWtB
sirada user based character device'imiza yazi yazip okuyan bir c programi yazmak.
yazdigimiz programi derliyoruz.
-r komutuyla calistirdigimizda yazimizi reverse olarak yaziyor.
normal olarak calistirdigimizda bir degisiklik olmadan outputu veriyor.
Kaynaklar: http://www.tldp.org/LDP/lkmpg/2.4/html/c577.htm
https://appusajeev.wordpress.com/2011/06/18/writing-a-linux-character-device-driver/






Hiç yorum yok:
Yorum Gönder