وثائق لينوكس العربية

كتابة كيرنل موديول

كتب بواسطة مسلم عادل بتاريخ 2008/09/08

كتابة موديول للنواة (kernel modules) ليس بالأمر الصعب ولكنه أيضا ليس بالأمر السهل وخاصة عندما يكون عبارة عن تعريف لعتاد ما

هذا مثال بسيط لكيرنل موديول، لن اتطرق في تفاصيل عمله.
قم بفتح أي محرر نصوص تفضله، واحفظه بإسم: mymodule.c وانسخ التالي إليه:

#include <linux/module.h>
#include<linux/kernel.h>

int init_module(void)
{
printk(KERN_INFO “Hi! Thank you for loading me into your linux kernel!\n”);
return 0;
}

void cleanup_module(void)
{
printk(KERN_INFO “Fine as you wish. I just hope I was usefull for your linux kernel\n”);
}

MODULE_LICENSE(“GPL”);
MODULE_AUTHOR(“Muslim Adel”);
MODULE_DESCRIPTION(“Just a test, don’t think it will do BIG things”);

الان أنشيء ملف آخر باسم Makefile

obj-m += mymodule.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

أنشيء مجلد جديد وضع الملف mymodule.c و Makefile داخله. افتح سطر الاوامر داخل المجلد واكتب:

arabian@laptop:~$ make clean
arabian@laptop:~$ make

الان جرب تحميل الوحدة الجديدة الى النواة كالاتي:

root@laptop:~# insmod mymodule.ko

للتأكد ان الوحدة تم تحميلها في النواة:

root@laptop:~# lsmod | grep mymodule

لترى الرسائل التي تنتجها الوحدة اكتب:

root@laptop:~# dmesg

للحصول على معلومات عن الموديول:

root@laptop:~# modinfo mymodule.ko

ولإزالة الموديول من النواة:

root@laptop:~# rmmod mymodule

ملاحظة: لاحظ اني استخدمت الامر insmod بدل modprobe
فعلت هذا لان هذا الموديول غير موجود في الدليل الصحيح الذي يجب ان يكون فيه، لذا حتى لو حاولت استخدام الامر modprobe فانه سيفشل.

لاستخدام الامر modprobe اعمل الاتي:

root@laptop:~# mkdir -p /lib/modules/`uname -r`/kernel/custom_modules
root@laptop:~# cp mymodule.ko /lib/modules/`uname -r`/kernel/custom_modules/
root@laptop:~# cp mymodule.ko /lib/modules/`uname -r`/kernel/custom_modules/
root@laptop:~# depmod -a
root@laptop:~# modprobe mymodule
, , , , , ,

أكتب تعليق

هل تبحث عن شيء؟

إستخدم النموذج التالي للبحث:

مواقع أنصح بها!

أنصح بزيارة المواقع التالية:

الأرشيف

ستجد هنا أرشيف المقالات السابقة: