إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

كتابة Kernel Module

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • كتابة Kernel Module


    هنا طريقة كتابة موديل (module) للنواة.
    لن اتطرق في الشرح (شرحه طويل وفيه كثير من الامور التي قد تكون معقدة لمبتديء او لشخص لا يعرف كيف يبرمج او لا يعرف ان شيء عن الهاردوير)
    لذا هنا فقط الطريقة، لتكون نقطة بداية لمن يريد ان ينطلق في هذا المجال:


    كود PHP:

    #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"); 
    احفظ هذا الكود باسم mymodule.c

    الان افتح ملف اخر يحتوي على التالي:

    كود PHP:
    obj-+= mymodule.o

    all

        
    make -/lib/modules/$(shell uname -r)/build M=$(PWDmodules

    clean
    :
        
    make -/lib/modules/$(shell uname -r)/build M=$(PWDclean 
    واحفظه باسم Makefile

    (ضع الملفين معا في مجلد مستقل)

    الان افتي سطر الاوامر واكتب:

    كود PHP:
    make clean
    make 
    تم انشاء الان الموديل، بقي الان تحميلها في النواة:

    كود PHP:
    insmod mymodule.ko 
    للتاكد انه تم تحميله في النواة:

    كود PHP:
    lsmod grep mymodule 
    لنرى الرسائل التي سينتجها الموديل

    كود PHP:
    dmesg 
    للحصول على معلومات حول الموديل/

    كود PHP:
    modinfo mymodule.ko 
    في النهاية لازالة الموديل من النواة

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

    كود PHP:
    mkdir -/lib/modules/`uname -r`/kernel/mymodules
    cp mymodule
    .ko /lib/modules/`uname -r`/kernel/mymodules/
    depmod -
    الان يمكنك استخدام

    كود PHP:

    modprobe mymodule 
    موقع وثائق لينوكس العربية
    موقع مختص بتوثيق لينكس

    ((شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير))






  • #2
    بسم الله الرحمن الرحيم

    خالص الشكر والتقدير وكل عام وأنت طيب وسالم والأمة الإسلامية بخير وسلام .


    just a User innately
    اللهم اهدنا إلى الطيب من القول ؛ واهدنا إلى صراط الحميد

    تعليق


    • #3
      وانت طيب
      موقع وثائق لينوكس العربية
      موقع مختص بتوثيق لينكس

      ((شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير))





      تعليق


      • #4
        بارك الله فيك اخوي
        شرح واضح جدا

        تعليق


        • #5
          اهلا اخ عادل

          موضوع محترم ومقدمة حلوة للي يبو يكملو في المجال...


          بس عندي ملاحظة في الموديل الي عملته..
          انت نسيت ان تعرف للموديل ان init_module هي نقطة بداية الموديل و cleanup_module هي نقطة نهاية الموديل

          زي كدا

          كود PHP:
          module_init(init_module);
          module_exit(cleanup_module); 
          ودا موديل مشابه عملته انا

          ان شاء الله يوضح الفكرة

          كود PHP:

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

          MODULE_AUTHOR("djekmani4ever");
          MODULE_DESCRIPTION("My first Module");
          MODULE_SUPPORTED_DEVICE("ALL");
          MODULE_LICENSE("Linuxac license & GPL");


          static 
          int __init mon_module_init(void)
          {
              
          printk(KERN_DEBUG "Hello World !\n");
              return 
          0;
          }

          static 
          void __exit mon_module_cleanup(void)
          {
              
          printk(KERN_DEBUG "Goodbye World!\n");
          }

          module_init(mon_module_init);
          module_exit(mon_module_cleanup); 

          احلا سلام يا باشا

          تعليق


          • #6
            [QUOTE=مسلم عادل;47614][RIGHT]
            هنا طريقة كتابة موديل (module) للنواة.
            لن اتطرق في الشرح (شرحه طويل وفيه كثير من الامور التي قد تكون معقدة لمبتديء او لشخص لا يعرف كيف يبرمج او لا يعرف ان شيء عن الهاردوير)
            لذا هنا فقط الطريقة، لتكون نقطة بداية لمن يريد ان ينطلق في هذا المجال:


            كود PHP:

            #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"); 
            احفظ هذا الكود باسم mymodule.c

            الان افتح ملف اخر يحتوي على التالي:

            كود PHP:
            obj-+= mymodule.o

            all

                
            make -/lib/modules/$(shell uname -r)/build M=$(PWDmodules

            clean
            :
                
            make -/lib/modules/$(shell uname -r)/build M=$(PWDclean 
            واحفظه باسم Makefile

            (ضع الملفين معا في مجلد مستقل)

            حتى في هده المرحلة انا معاك فيها

            الان افتي سطر الاوامر واكتب:

            كود PHP:
            make clean
            make 
            لكن هنا عندما كتبت هدا اﻷمر يكتب لي
            make: *** Pas de règle pour fabriquer la cible « clean ». Arrêt.

            أرجوا التوضيح أخي وبارك الله فيك

            تعليق


            • #7
              thank u man

              تعليق


              • #8
                مشكور اخي مسلم على الشرح

                حاولت التطبيق لكن يظهر لي خطا كما في الصورة في المرفق
                الملفات المرفقة

                تعليق


                • #9
                  السلام عليكم شكرا جزيلا علي المساعده القيمه وجعلها الله في ميزان حسناتك

                  تعليق

                  يعمل...
                  X