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

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

في استدعاء ايعازات لينكس من خلال موديلات النواة

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

  • [مشكلة] في استدعاء ايعازات لينكس من خلال موديلات النواة

    السلام عليكم ورحمة الله وبركاته
    اخوتي الكرام انا اريد استدعاء ايعازات لينكس (او اي برنامج تنفيذي مثلا اخذت الايعاز ls) من خلال مودل النواة kernel module فبداية جربت باستخدام لغة c البرنامج الاتي

    كود:
    #include <unistd.h>
    
    int main(int argc, char **argv)
    {
    //  execve("/bin/ls", argv, NULL);
        execl("/bin/ls","ls", "-l",0);
      return 0;
    }
    وقد تفذ بصورة صحيحة كلاتي
    كود:
     cc demo.c -o demo
    ./demo
    والان اريد تنفيذ نفس العمل باستخدام الـ Kernel Module
    فجربت كتابة الموديل اللاتي

    كود:
    /*  
     *  hello-1.c - The simplest kernel module.
     */
    #include <linux/module.h>    /* Needed by all modules */
    #include <linux/kernel.h>    /* Needed for KERN_INFO */
    #include <linux/unistd.h>
    
    //#include <unistd.h>
    
    int init_module(void)
    {
        printk(KERN_INFO "Hello world 1.\n");
            execl("/bin/ls","ls", "-l",0);
    
        return 0;
    }
    
    void cleanup_module(void)
    {
        printk(KERN_INFO "Goodbye world 1.\n");
    }
    وال make file الخاص به هو

    كود:
    obj-m += hello-1.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
    المشكلة انه عندما اريد ان اترجم الموديل عن طريق الايعاز make يضهر الخطا الاتي


    كود:
    [email protected]:~/Kerne_Module$ make
    make -C /lib/modules/2.6.28.7-rtai-3.7/build M=/home/siddeeq/Kerne_Module modules
    make[1]: Entering directory `/usr/src/linux-2.6.28.7'
      CC [M]  /home/siddeeq/Kerne_Module/hello-1.o
    /home/siddeeq/Kerne_Module/hello-1.c: In function ‘init_module’:
    /home/siddeeq/Kerne_Module/hello-1.c:15: error: implicit declaration of function ‘execl’
    make[2]: *** [/home/siddeeq/Kerne_Module/hello-1.o] Error 1
    make[1]: *** [_module_/home/siddeeq/Kerne_Module] Error 2
    make[1]: Leaving directory `/usr/src/linux-2.6.28.7'
    make: *** [all] Error 2
    رجاء المساعدة في حل المشكلة او اذا كان هنالك اي طريقة لاستدعاء اوامر لينكس او البرامج التنفيذية من داخل موديلات النواة ولكم جزيل الشكر
    والسلام عليكم ورحمة الله وبركاته

    قل: لا اله الا الله
    منتديات طريق الايمان للدعوة الى الله
    منتديات حفاظ الوحيين
    مجتمع لينوكس العربي

  • #2
    السلام عليكم

    في الكود الثاني جرب:

    كود:
    #include <unistd.h>
    بدلا من:
    كود:
    #include <linux/unistd.h>
    بالتوفيق

    تعليق


    • #3
      و عليكم السلام و رحمة الله و بركاته

      أخي برمجة النواة تختلف عن برمجة تطبيقات فضاء المستخدم و أكثر الأخطاء التي تحصل عند المبتدئين هي استعمال دوال مكتبة C أي (libc) في برامج النواة.
      الدالة execl هي دالة من دوال مكتبة C المتوفرة لتطبيقات فضاء المستخدم فقط و هي غير موجودة في النواة.

      صحيح بعض دوال فضاء المستخدم مثل printf و malloc لها ما يقابلها في النواة مثل printk و kmalloc أو vmalloc على الترتيب (مع بعض الفروق طبعا).

      عموما لا يمكن تنفيذ تطبيق من فضاء المستخدم مباشرة من النواة كما تريد أن تفعله في هذا المثال.
      (أقول عموما و إلا فهناك حالات خاصة جدا تسمح بتفيذ سكريبت معين عند حصول حدث معين و مثاله تنفيذ سكريبت hotplug عند ربط مفتاح USB و ما شابه هذا).

      أخيرا أنصحك بهذا الموقع المفيد
      http://kernelnewbies.org/

      و بكتاب برمجة النواة
      Linux Device Drivers 3rd Edition, 2005, by Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman, O'Reilly Reference, online: pdf ,html


      ملاحظة : من أين أتيت بتعريب "ايعازات" ؟ هل لها مبرر ؟
      مدونتي
      تغرب عن الأوطان في طلب العلا * وسافر ففي الأسفار خمس فوائد
      تَفَرُّجُ هم ، واكتسـاب معيشــة * وعلم وآداب ، وصحبة ماجـد
      لكن بعدها

      لقرب الدار في الإقتار خيرٌ * من العيش الموسّع في اغتراب

      تعليق


      • #4
        جزيل الشكر اخي الكريم امين فقد جربت طريقتك مسبقا ولم انجح.

        وجزيل الشكر اخي د. م. جلال شفرور طبعا في ذاكرتي انه لا يمكن البرمجة بمكتبات سي داخل النواة غير اني لست متاكد من صحة المعلومة والذي حيرني اكثر ان الدالة printk تنفذت بصورة صحيحة ولكن جوابك ما شاء الله كفى ووفى واوضح الامور بالنسبة لي واشكرك على المواقع المفيدة سوف اتابعها باذن الله ولكن لي سؤال لك هل هنالك طريقه معينه لحل مشكلتي قد تخطر في بالك؟

        اما بالنسبة لايعازات فاننا في بحث التخرج طلب منا ان نكتب البحث بالعربي ومصادرنا معظمها بالانكليزي فصارت الترجمة متعبة اكثر من البحث، اعتقد انه كان من المفترض ان اكتب اوامر بدلا من ايعازات؟ صحيح؟

        وجزاكم الله خير الجزاء والسلام عليكم ورحمة الله وبركاته
        قل: لا اله الا الله
        منتديات طريق الايمان للدعوة الى الله
        منتديات حفاظ الوحيين
        مجتمع لينوكس العربي

        تعليق


        • #5
          أخي ما تريد عمله غير منطقي عموما
          لا يصلح تنفيذ برامج المستخدم من النواة بهذا الشكل الذي تريده
          إذا كنت لا بد فاعل فعليك توليد حدث من النواة (uevent) يتم رفعه و ينتهي بتنفيذ سكريبت باستعمال udev أو hotplug و لكن كما ذكرت هذه لها استخدامات خاصة مع العتاد
          ثم هذه قد تكون صعبة على مبتدأ و تحتاج درس لا يمكن عمله عبر منتدى

          فضلا عن تنفيذ برامج فضاء المستخدم ، عموما لا ينبغي قراءة ملفات على وسيط ما إنطلاقا من النواة لأن هذا سيجعل مصدر النواة مرتبط بمسار ملف قد يتغير و قد لا يكون القرص مربوط ، ثم هناك مشاكل الفرق بين العنوانين في النواة و العنوانين في فضاء المستخدم و غيره ، طبعا هناك دوما طرق ملتوية لفعل كل شيئ و لكن يجب تجنب هذه الأفكار
          و هذا المقال من أحد خبراء النواة يشرح المسألة جيدا
          Driving Me Nuts - Things You Never Should Do in the Kernel

          ما الذي تريد عمله بالضبط ؟ أو ما المطلوب منك ؟ لعلك فهمت شيئا مختلفا عن المطلوب ؟
          مدونتي
          تغرب عن الأوطان في طلب العلا * وسافر ففي الأسفار خمس فوائد
          تَفَرُّجُ هم ، واكتسـاب معيشــة * وعلم وآداب ، وصحبة ماجـد
          لكن بعدها

          لقرب الدار في الإقتار خيرٌ * من العيش الموسّع في اغتراب

          تعليق


          • #6
            اشكرك جزيل الشكر د. م. جلال شفرور على تعبك معي اريد ان اوضح لك هدفي وهو اني في موديلات النواة لا استطيع ان استخدم مكتبات التعامل مع الملتميديا وانا اريد انشاء برنامج يتعامل مع الملتميديا ولكن كموديل للنواة فقررت ان اعمل البرامج بمستوى الـ user space واستدعيه عن طريق موديل خاص بالنواة.
            جزيل الشكر لك ساتابع الرابط ولي عودة باذن الله والسلام عليكم.
            قل: لا اله الا الله
            منتديات طريق الايمان للدعوة الى الله
            منتديات حفاظ الوحيين
            مجتمع لينوكس العربي

            تعليق


            • #7
              المشاركة الأصلية بواسطة SiddeeqHssn مشاهدة المشاركة
              اشكرك جزيل الشكر د. م. جلال شفرور على تعبك معي اريد ان اوضح لك هدفي وهو اني في موديلات النواة لا استطيع ان استخدم مكتبات التعامل مع الملتميديا وانا اريد انشاء برنامج يتعامل مع الملتميديا ولكن كموديل للنواة فقررت ان اعمل البرامج بمستوى الـ user space واستدعيه عن طريق موديل خاص بالنواة.
              جزيل الشكر لك ساتابع الرابط ولي عودة باذن الله والسلام عليكم.
              لا زالت الفكرة غير واضحة ، لماذا تستدعي برنامج وسائط متعددة من النواة أو وحدة في النواة ؟
              ماذا يعمل هذا البرنامج بالضبط ؟
              متى يجب تشغيله ؟ أليس المستخدم من يقوم بهذا عادة ؟
              إذا كنت ترغب في تشغيل هذا البرنامج تلقائيا فعندك احتمالين :
              إذا أردته أن يكون متوفرا بمجرد إقلاع النظام أو بدأ التشغيل فما عليك إلا إضافته إلى سكريبتات الإقلاع في /etc/init.d و غيرها ، أو تضعه في قائمة برامج بدأ التشغيل في gnome أو kde
              أما إذا كنت تريده أن يقلع فقط عند حدوث تغيير في عتاد الحاسوب أو عندما يلتقط الحاسوب - عن طريق العتاد- تغيرا ما في محيطه فالحل يكمن في استعمال نظام udev،
              http://www.kernel.org/pub/linux/util...plug/udev.html
              مدونتي
              تغرب عن الأوطان في طلب العلا * وسافر ففي الأسفار خمس فوائد
              تَفَرُّجُ هم ، واكتسـاب معيشــة * وعلم وآداب ، وصحبة ماجـد
              لكن بعدها

              لقرب الدار في الإقتار خيرٌ * من العيش الموسّع في اغتراب

              تعليق

              يعمل...
              X