15 Kasım 2015 Pazar

Linux Modül Uygulaması


Linux İle İki Ayrı Modül Uygulaması


       Modül oluşturmak için öncelikle yapmamız gereken modulün .c uzantılı dosyayı ardından makeflie adında bir dosya oluşturmak olacaktır.Bu dosyaları ekran üzerinde normal bir dosya oluştururmuş gibi oluşturup içerisine yeni belge ekleyerek yapmamız mümküdür.

      Oluşturduğumuz dosyalardan .c uzantılı iki dosya olacak (iki ayrı modül için), ben birisinin adına proc_1 diğerine ise proc_2 dedim isimleri kendi istediğiniz gibi değişitirebilirsiniz.

Proc1.c

#include<linux/module.h>//Needed by all the modules 
#include<linux/kernel.h>//needed for KERN_INFO 
#include<linux/init.h>//NEEDED FOR MACROS 

int topla(int p,int p2){
return p + p2; 
} 

EXPORT_SYMBOL(topla);

static int __init basla(void){
printk("Modul yukleniyor\n");
printk("Toplam:%d\n",topla(1,2)); 
return(0); 
} 

static void __exit bitir(void){
printk("Modul temizlendi\n"); 
}

module_init(basla); 
module_exit(bitir); 


Proc_2.c

#include<linux/module.h>//Needed by all the modules 
#include<linux/kernel.h>//needed for KERN_INFO 
#include<linux/init.h>//NEEDED FOR MACROS 

int topla(int p,int p2);

static int __init basla(void){
printk("Modul yukleniyor\n");
printk("Toplam:%d\n",topla(1,2)); 
return(0); 
} 

static void __exit bitir(void){
printk("Modul temizlendi\n"); 
}

module_init(basla); 
module_exit(bitir); 


   Bu iki .c uzantılı dosyamızı oluşturduktan sonra sıra geldi makefile dosyamızı oluşturmaya

Makefile

obj-m += proc_1.o
obj-m += proc_2.o


KDIR  := /lib/modules/$(shell uname -r)/build

all:
$(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
$(RM) Module.markers modules.order



   Oluşturduğumuz bu 3 dosyayı aynı klasör içerisine attıktan sonra işlemlerimize devam ediyoruz.






    Şimdi ise oluşturduğumuz dosyalara terminal üzerinden erişim modüllerimizi yüklememiz gerekiyor.

   Terminal üzerinden dosyalara erişim için cd komutuyla dosya dizinine gideceğiz.

cd /home/ubuntu/Desktop/Proc


Dizine ulaştık şimdi ise make komutu ile modüllerimizi derliyoruz.



Modüllerimizi derledik, şimdi ise modüllerimizi kontrol edelim herhangi bir sorunla karşılaşmamak adına. 
Kontrol komutu ise kabaca: modinfo moduladi.ko şeklindedir.
Benim yaptığım modüllerde ise kod modinfo proc_1.ko ve modinfo proc_2.ko şeklinde oluşturulmaktadır.


Modüllerimizi yükleyelim.
Bu işlem için root yetkisine sahip olmamız gerekmektedir. Bu sebepten kodumuzun başına sudo yazacağız.

sudo insmod proc_1.ko
sudo insmod proc_2.ko

sudo komutunu verdikten sonra bizden şifre girmemizi isteyecektir. Bilgisayar şifremizi girdiğimiz zaman ise root yetkilerine sahip olacağız. 2.modülü yüklerken tekrar kodun başına sudo yazıyoruz fakat bu işlemden sonra şifre istemeyecektir. Çünkü artık root yetkilerine sahibiz.

En son işlem olarak modüllerimizi kontrol edebiliriz.

lsmod | grep modul

Bu komutu bizim yaptığımız örneğe uyarlayacak olursak.

lsmod | grep proc_1 
lsmod | greo proc_2

komutları oluşacaktır.



İşlemlerimiz bitti ve iki ayrı modül uygulaması yapmış bulunmaktayız.
Son yaptığımız işlemde lsmod | greg komutu ile modüllerimizi kontrol ettik ve birbirleri arasında fonksiyon veya veri kullanımı olduğunu anlamış olduk.



Kaynaklar

http://www.cagdastopcu.com/kernel-modul-programlama-giris.html

https://bekirkarul.com/posts/kernel-modulu-programlama.html

http://salihayesilyurt.blogspot.com.tr/2013/12/sistem-programlama-proc-uygulamas.html

http://obenseven.com.tr/linux/dersnotlari/149-kernelmodulleri

Hiç yorum yok:

Yorum Gönder