YZM 3102 İşletim Sistemleri Uygulama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği
BÖLÜM - 2 Bu laboratuvarda, Basit Kabuk Programlama basit Loadable Kernel Module (LKM) Yazma gerçekleştirilecektir. 2
Basit Kabuk Programlama 3
Loadable Kernel Module (LKM) Kernel modülü, kernele sonradan eklenip çıkartılabilen C ile geliştirilen program parçacıklarıdır. 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ği sistemi yeniden başlatmadan modüller sayesinde arttırılabilir. 4
Loadable Kernel Module (LKM) (devam ) Kernele yapılacak her hangi bir müdahalede (örneğin yeni donanım tanıtma), 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. 5
LKM Yaratma Öncelikle terminal ekranı açılmalıdır. o Applications -> Accessories -> Terminal lsmod komutu çalıştırılarak, yüklenmiş tüm LKM ler görüntülenebilir. 6
LKM Yaratma #include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> MODULE_AUTHOR("HFTTF Yazılım"); MODULE_DESCRIPTION("Basit bir modüle "); /* This function is called when the module is loaded. */ int simple_init(void) { printk(kern_info "Module yüklendi \n"); return 0; } /* This function is called when the module is removed. */ void simple_exit(void) { printk(kern_info "Module kaldırıldı \n"); } /* Macros for registering module entry and exit points. */ module_init(simple_init); module_exit(simple_exit) 7
LKM Yaratma (devam ) Dosyayı simple.c olarak masaüstündeki lab klasörüne kaydedelim. Makefile kullanarak, bu dosyayı derleyelim. o Makefile dosyası ile simple.c dosyası lab klasöründe olsun. o Terminalden labs klasörüne konumlanın ve make komutunu çalıştırın. Derleme sonucunda (başarılı ise) birçok dosya oluşmaktadır. Bunlardan simple.ko dosyası derlenmiş kernel modüldür. 8
LKM Yükleme Derleme işlemi tamamlandıktan sonra yükleme işlemi gerçekleştirilmelidir. Yazdığınız modülü yüklemek için aşağıdaki komutu çalıştıralım o sudo insmod simple.ko Görüntülemek için lsmod komutu ile modülümüzün yüklenip yüklenmediğini kontrol edelim. dmesg komutu ile yazdırdığımız mesajı görüntüleyelim (kernel log buffer mesajları). 9
LKM Kaldırma Yüklenen LKM yi kaldırmak için rmmod komutu kullanılır. o sudo rmmod simple 10
LKM Uygulama Günün tarihini kernel space de alan ve kernel log buffer a yazan bir LKM yazınız. #include <linux/time.h> struct timeval now; struct tm tm_val; do_gettimeofday(&now); time_to_tm(now.tv_sec, 0, &tm_val); printk(kern_info "%d/%ld %02d:%02d:%02d Days since 1 Jan: %d\n", tm_val.tm_mon + 1,1900 + tm_val.tm_year, tm_val.tm_hour, tm_val.tm_min,tm_val.tm_sec, tm_val.tm_yday); 11
İYİ ÇALIŞMALAR 12
Yararlanılan Kaynaklar Ders Kitabı: Operating System Concepts, Ninth Edition, Abraham Silberschatz, Peter Bear Galvin, Greg Gagne Yardımcı Okumalar: İşletim Sistemleri, Ali Saatçi Şirin Karadeniz, Ders Notları İbrahim Türkoğlu, Ders Notları 13