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














