Linux Kernel Modül Geliştirme
KULLANICIDAN ALINAN İKİ İNTEGER SAYININ MODULER PROGRAMLAMA KULLANILARAK TOPLANMASI
Öncelikle modüler programlama ile ilgili araştırma yaparak
modüler programlamanın ne olduğunu ve neden kullanmam gerektiği hakkında bilgi
edindim. Yaptığım araştırmalar sonucu hazırladığım sizler için de faydalı
olacağını düşündüğüm özet aşağıda verilmiştir;
Modül Nedir ?
Kernel modülü, kernele sonradan eklenip çıkartılabilen
kodlardır. C ile geşliştirilen Kernel Modülleri aslında sıradan bir programdan
çok da farklı değildir.
Neden Modül Kullanmalıyız ?
Linux’da donanımlar kernel sürücüleri tarafından
kullanılırlar. Bu modüller genellikle lib/modules dizisi altında bulunurlar ve
açılış anında yüklenirler. Sistem içerisinde hazır modüller olduğu gibi
kendimiz de modül ekleyebiliriz. Kernelin fonksiyonelliğini sistemi yeniden
başlatmadan modüller sayesinde arttırılabilir. Bir donanım sürücüsünü düşünecek
olursak, sürücü ile kernel, sistem ve donanım arasındaki bağlantıyı
sağlayacaktır. Fakat bu işlem için kernele eklenti yapmamız gerekecektir.
Kernele yapılacak her hangi bir müdahalede, kernelin tekrar derlenmesi ve
sistemin yeniden başlatılması gerekir. Sunucu sistemleri gibi sürekli açık
kalması gereken bilgisayarlar için yeniden başlatma işlemi istenmeyen bir
durumdur. Bu tip durumları önlemek için modüller kullanılmaktadır.
=>Başlarken C kodları yazmak için kernel içinde editöre .c uzantılı kısma yazmam ve başka bir
editöre Makefile oluşturmam gerekiyor.
Deneme amacı ile vim
editörünü “apt-get install vim” kullanarak indirdim ve “hello World”
yazdırabileceğim c kodunu editörde ayrılan kısma yazdım. Aynı şekilde Makefile
oluşturmak için vim ile bir editör açtım. Makefile dosyası içerisinde projeyi
derlerken işimizi kolaylaştıracak olan tanımlamalar bulunur. Makefile dosyasını yazdıktan sonra “make”
yazarak derlemeye çalıştım ve aşağıdaki hatayı aldım:
“Missing Separator” hatasını düzeltebilmek için uzun
bir araştırma yaptım ve Makefile
dosyamda space yerine tab tuşu kullanamam gerektiğini öğrendim ancak daha sonra
“No Target” ile devam eden hata aldım ve uzun süre çözemedim. Sorunun
kullandığım editörden kaynaklandığını düşündğüm ve gedit kullanmayı denedim.
1. Linux-4.13.3 kernel içinde “open in terminal” dedikten
sonra su ile root oldum .
2. mkdir NewModules adlı dosya oluşturdum
3. NewModules içinde “gedit Sum.c” komutunu yazarak açılan
editöre c kodlarımı yazdım ve kaydettim. Sum.c ‘inin içeriği;
4. yine aynı dosya içerisinde “gedit Makefile” yazarak
Makefile dosyasını tab kullanmaya dikkat ederek yazdım. Makefile içeriği;
5. “make” yazarak derlemeye çalıştım ve hata aldım aynı
işlemleri başka dosyalar açarak tekrarladım her seferinde aldığım hata;
Hatanın kullandığım editörden bağımsız olduğunu anladım ve
başka bir terminalde kernelimde herhangi bir yerde “make” veya “defconfig”
“make menuconfig” yazdığımda “no targets” ve “no.. file” şeklinde hata aldım.
Yaptığım işlem ve araştırma yaparak uyguladıklarım kernelde uzantılarda bir
değişiklik yapmış veya yanlışlıkla gerekli dosyalarını lib/ altında silmiş
olduğumu düşündüğüm için önceden indirdiğim “linux-4.13.3.tar.xz” dosyasını
kullanarak ;
#make deconfig
#make
#make_modules
#make modules_install
#make install
#reboot
Adımlarını en baştan yaparak kurdum ve eskisini sildim.
ð Yeni kernel üzerinde NewModules dosyasını
yukarıda anlattığım gibi yazdım , “Sum.c” ve Makefile yeniden oluşturdum.
ð
Bundan sonra “make” yazarak derlenmesini
bekledim.
Derlendikten sonra oluşan dosyalar ;
6. “insmod Sum.ko numberOne=10 numberTwo=12” satırını
yazdıyoruz.
İnsmod modulu kernele eklemek için kullanılır.
7.dmesg diyerek görmek istediğimiz toplamı elde ediyoruz.
8. rmmod –f Sum ile modülü kapatabilir silebiliriz
Hiç yorum yok:
Yorum Gönder