Rehber Linux Kernel programlama ile driver kodlama

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:
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.
 
Bence cok zor programlaniyor. Aklindakini koda cok iyi döken araclar lazim. Zira gordugunuz gibi ben normal okuma yazma bile bilmiyorum.
Hocam bende ilk başlarda çok zorlanıyordum ancak sonra kolay gelmeye başlıyor. Tabi bu "Hello, World, Tam sayı atama" v.s gibi işler basit. İlerleyen zamanlarda device register v.s olayları başlıyor zorlanıyorsun.
 
@Linux Torvalds ben de şu an C öğreniyorum sonra Assembly öğreneceğim ama gerçekten İngilizce olmadan olmuyor Türkçe kaynak zaten kernel konusunda 1 tane bile yok o yüzden ilk İngilizce.

Aynen öyle. Hatta kendi kendime acaba kendi sitemi açıp Türkçe kernel development sitesi açmayı düşündüm ancak sonra vazgeçtim. Ben de Technopat'ta yazdım. Galiba bu ilk Türkçe kaynak olabilir :).
 
Son düzenleyen: Moderatör:
1691235627801.png


696 Sayfa bildirim arasından gelen en kaliteli konu bildirimi oldu. Elinize sağlık.
 

Technopat Haberler

Geri
Yukarı