Selam dostlar. Evde boş boş Linux Kernel module programlama işleri ile uğraşırken buraya da ufak rehber yazayım dedim. Bunu seri halinde de yapabilirim ancak şimdilik ilk giriş olacağından dolayı Linux kernel'ine ilk başta "hello, world!" yazdıracağız ve ardından ise tam sayı atamasını göstereceğim. Bu yazacağımız 2 program giriş seviyesinde, mantığını kavratmak içindir. İlerleyen zamanlarda USB'ye driver yazmasını vs göstermeyi planlıyorum. Neyse başlayalım.
Basit programlar yazacağımızdan dolayı şimdilik Raspberry Pi gibi herhangi bir aygıta vs ihtiyaç duymayacağız.
1) Gerekli programları kuralım:
2) Herhangi bir klasör üzerinde
Şimdi programı yazdık ve sıra makefile dosyasında. Bunun için yine açtığımız klasör içine
Şimdi makefile ile programı kernel'e göre derletmemiz gerekecek.
Şimdi bu programımız hazır halde. Sıra bunu derleme sırasında. Olduğumuz klasör içinde terminale "make" yazıyoruz.
Programımız derlendi. Sıra bunu kernelde gösterme vakti.
Derlendikten sonra birden fazla dosya oluşacak bunlardan. KO olanı bizim için önemli.
Ve artık tamamdır. Sıra görüntüleme vakti. Birden fazla şekilde görüntüleyebilirsiniz. Ben sizin için hepsini yazacağım.
Icode]sudo dmesg | grep -i kernel[/ICODE]kernel adıyla oluşturulmuş program üzerindede yazdığımız programı görüntüleyebilirisiniz.
Daha fazla şekilde de görüntüleyebilirsiniz ancak bu kadar yeterli diye düşünüyorum. Bu kernel programlama ile istediğiniz gibi driver kodlayabilirsiniz. İsteğe bağlı olarak da USB üzerinde de tam olarak driver kodlamayı gösterebilirim. Umarım yardımcı olmuşumdur. Eksiklerim varsa affola elimden geldiğince özen göstermeye çalıştım.
Tam sayı atama programını daha kapsamlı bir rehberde atmayı düşündüm.
Basit programlar yazacağımızdan dolayı şimdilik Raspberry Pi gibi herhangi bir aygıta vs ihtiyaç duymayacağız.
1) Gerekli programları kuralım:
Sudo apt-get install gcc
Sudo apt-get install kate
. Gcc programı derlemeye, kate ise IDE'dir.2) Herhangi bir klasör üzerinde
kate hello.c
yazıyoruz.
C:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE("GPL"); //Lisansı ekliyoruz.
MODULE_AUTHOR("Linux Torvalds"); //Yazarın adını yazıyoruz.
MODULE_DESCRIPTION("Linux Kernel Hello, World!"); //Açıklamayı yazıyoruz.
static int __init hello_init(void) //Kernelin giriş kısmını yazıyoruz.
{
printk(KERN_INFO "Hello, World! \n"); //Burada Hello world kodunu yazdırıyoruz.
return 0;
}
static void __exit hello_exit(void) // Programın Çıkış kısmını yazıyoruz. Her yazdığımız programda bu kısmın bulunması zorunludur.
{
printk(KERN_INFO "Goodbye, world\n");
}
module_init(hello_init); //giriş kısım.
module_exit(hello_exit); //çıkıs kısım.
Şimdi programı yazdık ve sıra makefile dosyasında. Bunun için yine açtığımız klasör içine
kate Makefile
yazıyoruz.Şimdi makefile ile programı kernel'e göre derletmemiz gerekecek.
Kod:
obj-m += hello.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.
Şimdi bu programımız hazır halde. Sıra bunu derleme sırasında. Olduğumuz klasör içinde terminale "make" yazıyoruz.
Programımız derlendi. Sıra bunu kernelde gösterme vakti.
Derlendikten sonra birden fazla dosya oluşacak bunlardan. KO olanı bizim için önemli.
sudo insmod hello.ko
yazıyoruz. Bunu yazdıktan sonra artık yazdığımız programı kernelde görebiliriz. Ancak bitmedi.sudo rmmod hello
bu kodu yazarak artık "hello" programını ismi ile kernele yazdırdık.Ve artık tamamdır. Sıra görüntüleme vakti. Birden fazla şekilde görüntüleyebilirsiniz. Ben sizin için hepsini yazacağım.
sudo dmesg
bu kod ile kernelde tüm yazılan çıktıları görüntüleyebilirisiniz.sudo dmesg | grep -2 hello
bu şekilde yalnızca kendi yazdığımız programı görebileceksiniz. Not: -2 kısmına çıkacak çıktı sayısı kadar yazabilirsiniz. (-5, -7, -i vs)sudo dmesg | tail -2
bu kod ile kernele son yazılan çıktıları görüceksiniz. Not: Sadece kullanıcı tarafından.Icode]sudo dmesg | grep -i kernel[/ICODE]kernel adıyla oluşturulmuş program üzerindede yazdığımız programı görüntüleyebilirisiniz.
Daha fazla şekilde de görüntüleyebilirsiniz ancak bu kadar yeterli diye düşünüyorum. Bu kernel programlama ile istediğiniz gibi driver kodlayabilirsiniz. İsteğe bağlı olarak da USB üzerinde de tam olarak driver kodlamayı gösterebilirim. Umarım yardımcı olmuşumdur. Eksiklerim varsa affola elimden geldiğince özen göstermeye çalıştım.
Tam sayı atama programını daha kapsamlı bir rehberde atmayı düşündüm.