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ı gostereceğim. Bu yazacağımız 2 program giriş seviyesinde, mantığını kavratmak icindir. İlerleyen zamanlarda USB'ye driver yazmasını vs gostermeyi planlıyorum. Neyse başlayalım.
Basit programlar yazacağımızdan dolayı şimdilik Raspberry Pi gibi herhangi bir aygıta vs ihtiyac 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 klasor uzerinde kate hello.c yazıyoruz.
C:Panoya kopyala
#include #include #include MODULE_LICENSE("GPL"); //Lisansı ekliyoruz. MODULE_AUTHOR("Linux Torvalds"); //Yazarın adını yazıyoruz. MODULE_DESCRIPTION("Linux Kernel Hello, World!"); //Acıklamayı yazıyoruz. static int __init hello_init(void) //Kernelin giriş kısmını yazıyoruz. static void __exit hello_exit(void) // Programın Cıkış kısmını yazıyoruz. Her yazdığımız programda bu kısmın bulunması zorunludur. module_init(hello_init); //giriş kısım. module_exit(hello_exit); //cıkıs kısım.
Şimdi programı yazdık ve sıra makefile dosyasında. Bunun icin yine actığımız klasor icine kate Makefile yazıyoruz.
Şimdi makefile ile programı kernel'e gore derletmemiz gerekecek.
Kod:Panoya kopyala
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 klasor icinde terminale "make" yazıyoruz.
Programımız derlendi. Sıra bunu kernelde gosterme vakti.
Derlendikten sonra birden fazla dosya oluşacak bunlardan. KO olanı bizim icin onemli.
sudo insmod hello.ko yazıyoruz. Bunu yazdıktan sonra artık yazdığımız programı kernelde gorebiliriz. 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 goruntuleme vakti. Birden fazla şekilde goruntuleyebilirsiniz. Ben sizin icin hepsini yazacağım.
sudo dmesg bu kod ile kernelde tum yazılan cıktıları goruntuleyebilirisiniz.
sudo dmesg | grep -2 hello bu şekilde yalnızca kendi yazdığımız programı gorebileceksiniz. Not: -2 kısmına cıkacak cıktı sayısı kadar yazabilirsiniz. (-5, -7, -i vs)
sudo dmesg | tail -2 bu kod ile kernele son yazılan cıktıları goruceksiniz. Not: Sadece kullanıcı tarafından.
Icode]sudo dmesg | grep -i kernel/ICODEkernel adıyla oluşturulmuş program uzerindede yazdığımız programı goruntuleyebilirisiniz.
Daha fazla şekilde de goruntuleyebilirsiniz ancak bu kadar yeterli diye duşunuyorum. Bu kernel programlama ile istediğiniz gibi driver kodlayabilirsiniz. İsteğe bağlı olarak da USB uzerinde de tam olarak driver kodlamayı gosterebilirim. Umarım yardımcı olmuşumdur. Eksiklerim varsa affola elimden geldiğince ozen gostermeye calıştım.
Tam sayı atama programını daha kapsamlı bir rehberde atmayı duşundum.