Ö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