13 Ekim 2017 Cuma

Kullanıcıdan alınan iki sayıyı toplayan program

 Merhabalar,bugün sizlerle kullanıcıdan alınan iki sayıyı kernel modda toplayan modül programlama yapıcaz .
 Öncelikle terminalde mkdir modules komutuyla dosya oluşturalım ve sırasıyla şu adımları takip edelim:

1) cd modules komutuyla dosya içine girelim.
2) gedit  sum.c  komutunu yazıp dosya açalım.
3) Daha sonra aşağıdaki c kodunu yazıyıruz:
#include <linux/init.h>             // Macros used to mark up functions e.g., __init __exit
#include <linux/module.h>           // Core header for loading LKMs into the kernel
#include <linux/kernel.h>           // Contains types, macros, functions for the kernel

static int number1=0;
static int number2=0;

module_param(number1,int,0);
module_param(number2,int,0);


static int  __ init sum(void){
printk(KERN_INFO "%d + %d = %d \n", number1,number2,(number1+number2));
return 0;
}


static void __exit topla_exit(void){
 
printk(KERN_INFO "TOPLA MODULU SİLİNDİ\n");
}
module_init(sum);

module_exit(topla_exit);
4)Şimdi makefile dosyası oluşturmamız gerekiyo programı derlemek için gedit Makefile komıutunu terminale girerek açıyoruz.
5)Aşağıdaki kodu yazuyoruz:

obj-m+=topla.o

all:
    make -C /home/ilyas/modules_/$(shell uname -r)/build/ M=$(PWD) modules
clean:
    make -C /home/ilyas/modules_/$(shell uname -r)/build/ M=$(PWD) clean
6)Şimdi make komutuyla derliyoruz tabi dosyanın içindeyken.
--Kod yukarıdaki gibi olduğunda ilk olarak
 resimdeki hatayı aldım bu hatayı düzeltmek için makefile dosyasını açtım her şeyi sildim ve tekrar yazmaya başladım all: yazdıktan sonra enter yapıp tab tuşuna bastım düzeldi dosyadaki make komutunun kırmızıya dönüşmesiyle düzeldiğini anlayabilirsiniz.


 bu hatayı ise şöyle düzelttim ilk başta kendi oluşturdum modules_ dosyasından tanıtmaya çalışıyordum ama kernel kendi module dosyasından tanıtmak gerekli
olduğunu gördüm ve kodu şöyle düzelttim:

 obj-m+=sum.o
all:
    make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean



     Eğer aşağıdaki resimdeki gibi bir sonuç aldıysanız   kodunuz hatasız derlenmiş demektir.





7)sudo insmod sum.ko number1=x number2=y (x ve y sizin istediğiniz değerler)
Eğer Operation not permitted hatası alırsanız sudo yazıp komutun başına tekrar deneyin!...

8)dmesg komutuyla en son mesajı görebilirsiniz.(Kernela yazılır.)
ben 5 ve 30 değerleri girmiştim görüldüğü gibi 35 bulmuş ve yazmış

Hiç yorum yok:

Yorum Gönder