الكيرنل **ما هو و كيفية عمل compile له ** KERNEL

الموضوع في 'أنظمة GNU Linux' بواسطة medchaker, بتاريخ ‏23 فيفري 2009.

  1. medchaker

    medchaker كبار الشخصيات

    إنضم إلينا في:
    ‏10 جوان 2007
    المشاركات:
    736
    الإعجابات المتلقاة:
    2.889
      23-02-2009 20:25
    :besmellah1:

    درسنا اليوم سوف يكون معقدا بعض الشئ لكن بإذن الله سوف أحاول أن أتتطرق لكل الأركان و بطريقة مبسطة

    [​IMG]

    النواة أو noyau أو Kernel هو قلب النظام , فهو الذي يتوسط بين البرامج و قطع الجهاز (Applications et Matériel) . فهو مثلا الذي يتحكم بذاكرة النظام , هو الذي يطبق الأوامر الآتية من المستخدم , و العديد من الوظائف الأخرى.

    الكيرنل يتكون من جزء (partie statique) و التي يمكن أن نظيف لها وحدات إضافية بكل سهولة. هذا الجزء يستعمل عند تشغيل النظام و يبقى محملا في الذاكرة إلى أن نطفئ الجهاز في حين أن الوحدات الإظافية (modules) فيقع تحميلها عند تشغيل النظام فقط و يمكن الرجوع إليها بدون مشاكل.

    [​IMG]

    سيسألني البعض لمذا نقوم بعمل compile للكيرنل ?

    يعود ذلك للعديد من الأسباب منها :

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

    هناك العديد من الأسباب الأخرى التي تدفعنا للقيام بهذه العملية.

    [​IMG]

    أي كيرنل يستحق أن نعمل compile له ?

    نبدأ أولا بمعرفة نسخة الكيرنل التي لدينا بكتابة

    كود (text):
    uname -sr
    سوف نتحصل على نتيجة من هذا النوع

    كود (text):
    Linux 2.6.16
    [​IMG]

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

    هاهو الموقع الرسمي الذي يحتوي على جميع نسخ الكيرنل kernel.org


    أوامر compile الكيرنل على مختلف الأنظمة

    [​IMG]
    كود (text):
    # urpmi kernel-headers kernel-source
    [​IMG]
    كود (text):
    # yum install kernel-source
    [​IMG]
    كود (text):
    # apt-get install kernel-headers-$(uname -r) kernel-source-$(uname -r)
    [​IMG]
    كود (text):
    # apt-get install linux-headers-N°_de_noyau linux-source-$(uname -r)
    [​IMG]
    كود (text):
    # installpkg /où_est/kernel-source-2.6.x.tgz /où_est/kernel-headers-2.6.x.tgz
    [​IMG]
    كود (text):
    # emerge gentoo-sources
    [​IMG]

    بادأ ببدأ يجب علينا معرفة عتادنا و القطع الموجودة بجهازنا لأن لها أهمية كبيرة عند القيام بعملية الكومبيل.

    مثلا الأمر lspci المتأتي من pciutils و الذي يمكننا من معرفة القطع المتصلة عبر المنفذ PCI
    و الأمر lsusb المتأتي من usbutils و الذي يمكننا من معرفة القطع المتصلة عبر المنفذ USB

    هناك أيضا برنامج Hwinfo الذي يمكننا من معرفة العديد من المعلومات حول الجهاز.

    قبل المرور للمرحلة المعقدة يجب أن يكون لديك l'environnement de développement
    gcc أو make

    و أن يكون لديك أيضا fichiers de développement des bibliothèques التي سوف نستعملها للإعدادات

    curses أو tcl/tk أو Gtk أو Qt

    و أيضا التمتع بصلاحيا المستخدم الخارق ROOT

    [​IMG]

    بعد تحميل الكيرنل أو تنصيب الباكيدج الخاصة بنسخة لينوكس التي تعمل عليها نمر إلى الcompile

    بالنسبة لتحضير المصدر هناك طريقتان :

    - إما أن نفك ضغط الملف الذي حملناه من الموقع
    kernel.org داخل المجلد

    كود (text):
    ~/devel/kernel/

    -
    أو إعطاء تصريح للباكيدج الخاص بالنسخة لكي نستطيع القراءة و الكتابة فيما بعد.

    هناك العديد من الواجهات الرسومية للقيام بهذه العملية و كل واجهة تعتمد على ملف تطوير خاص بمكتباتها (fichiers de développement correspondant à la bibliothèque qu'elle utilise
    ) و اللتي سبق ذكرها سابقا (ncurses, Qt, Gtk+).

    الواجهة الرسومية لncurses

    أكتب

    كود (text):
    make menuconfig
    [​IMG]

    الواجهة الرسومية لQt

    أكتب

    كود (text):
    make xconfig
    [​IMG]

    الواجهة الرسومية لGtk+

    أكتب

    كود (text):
    make gconfig
    [​IMG]

    [​IMG]

    الخيارات الموجودة :

    الخيارات اللتي أمامنا توافق كل منها لوظيفة معينة يمكن تشغيلها أو إطفئها حسب ما نحتاج له. سوف أشرح هنا الخيارات الرئيسية و
    وظائفها

    Code maturity level options

    هذا الخيار يمكنا من إخفاء و إظهار آخر الوظائف اللتي هي في طور التطوير و اللتي تعتبر غير مستقرة .

    General setup

    هي مجموعة من الخيارات العامة لنظامك

    Loadable module support

    هي خاصة بإدارة الوحدات (
    gestion des modules)

    Block layer


    هي
    entrées/sorties للكرت الأم لا يجب لمسها

    Processor type and features

    خيار خاص بنوع المعالج
    x86, Sparc, hyper-thread, dual-core, SMP ...

    Power management options (ACPI, APM

    خيار خاص بالتحكم في إستعمال الطاقة و
    ACPI/APM

    Bus options (PCI, PCMCIA, EISA, MCA, ISA)

    خيار خاص بتعديل أماكن قطع الجهاز من نوع
    PCI, PCMCIA, ISA

    Executable file formats

    إدارة الملفات executable : الخيار
    ELF يجب أن يكون دائما Y

    Networking

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

    Device Drivers

    خيار خاص بتعريفات القطع (هنا يمر أغلب الوقت)

    File systems

    خيار خاص بنظام الملفات المعتمد من خلال النواة

    Kernel hacking

    خيار خاص ب
    تصحيح أخطاء النواة

    Security options

    خيار خاص بنظام الحماية للنواة

    Cryptographic options

    خيار خاص بخوارزميات الترميز (Algorithmes cryptographiques
    ) اللتي يمكن إظافتها للنواة

    [​IMG]

    نمر الآن إلى المرحلة الحساسة و هي تعديل الخيارات و الوظائف :



    لكل خيار يمكن أن نجيب ب :

    Y = YES
    N = NO
    M = أن نترك الخيار تلقائيا يعني أنه حين تحتاجه النواة تستخدمه و إلا يبقى غير مفعل

    لبدأ عملية الcompile يكفي أن نكتب هذا الأمر

    كود (text):
    make
    هذه العملية ستتطلب بعض الوقت بالإعتماد على سرعة المعالج الذي تستعملونه

    مثلا إذا كنت تملك معالج من Dual-Core أكتب

    كود (text):
    make -j 2
    أو إذا كان من نوع Core - 2 - DUO يعني أربعة معالجات أكتب

    كود (text):
    make -j 4
    ليتم تقسيم العمل على كل المعالجات بالتساوي

    بعد هذه العملية اللتي تتطلب من 40 دقيقة إلى ساعتين و نصف حسب سرعة المعالج , سوف نقوم بإعادة تنصيب النواة من جديد

    يكفي كتابة

    كود (text):
    su -c 'make modules_install && make install'
    هذا الأمر يجب أن ينفذ من خلال صلاحيات RooT . يكفي الآن تعديل خيارات Boot Loader ليتمكن النظام من البدأ في المرة القادمة

    الملف.config

    كل الإعدادات التي تقومون بها مسجلة في هذا المجلد لذا أنصحكم بعمل نسخة إحتياطية منه ووضعها في مجلد على حدى أو في مجلد النواة الجديدية لكي لا تظطر لإعادة الكتابة من جديد.

    أرجو أن أكون قد تعرضت لكل النقاط كما أنصح بالبحث جيدا عن الوثائق المتعلقة بنسخة النواة اللتي تعتمدونها و نسخة اللينوكس المنصبة عندكم قبل القيام بأي خطوة


    :ahlan:
     
    9 شخص معجب بهذا.

  2. medchaker

    medchaker كبار الشخصيات

    إنضم إلينا في:
    ‏10 جوان 2007
    المشاركات:
    736
    الإعجابات المتلقاة:
    2.889
      26-02-2009 22:13
    كيفية تخفيف النواة بإستخدام الوحدات الأساسية (les modules)

    هذه العملية تتطلب معرفة جيدة بالقطع المركبة بجهازكم ككروت الشبكة , القرص الصلب ... و الهدف منها هو تعديل الدريفرات الأساسية لوحدات أساسية لتخفيف عمل الكيرنل (ليس كل الدريفرات يمكن أن تكون وحدات أساسية)

    يجب أن تكون عملية الcompile للكيرنل و الوحدات الأساسية مثالية و ذلك يعتمد على الذاكرة التي تملكونها : لنشاهد هذا الجدول

    [​IMG]

    سوف نتمكن من تجميع وحدات متوازية متعددة في وقت واحد , لذلك سوف نذهب للمجلد

    كود (text):
    /usr/src/linux
    و نعدل الملف Makefile

    بتغير السطر MAKE=make إلى MAKE=make -j N

    و N هو الرقم المناسب لالذاكرة التي عندكم

    كود (text):
    إذا كانت الذاكرة أكبر من [B][COLOR=Red]118MO[/COLOR][/B] سنقوم بهذه العملية

    [COLOR=Red][B]N= (mémoire/8) +1[/B][/COLOR]
     

    كل دريفر موجود تحت
    كود (text):
    /(racine)
    لا يجب أن يمر إلى الوحدات الأساسية أيضا إذا كان القرص الصلب من نوع IDE أو SCSI هذان الآخرين لا يجب أن يصبحا وحدات أساسية.

    وكذلك نظام الملفات ext2fs أو ext3fs

     
    9 شخص معجب بهذا.
  3. 007up

    007up عضو مميز

    إنضم إلينا في:
    ‏21 ديسمبر 2007
    المشاركات:
    854
    الإعجابات المتلقاة:
    1.142
      26-02-2009 23:44
    خويا محمد لو تسمح عندي إستفسار

    لم أفهم ماهي الـ mémoire التي تتحدث عنها في الجدول و كيف يمكنني معرفتها

    شكرا على الموضوع

    :kiss:
     
    1 person likes this.
  4. medchaker

    medchaker كبار الشخصيات

    إنضم إلينا في:
    ‏10 جوان 2007
    المشاركات:
    736
    الإعجابات المتلقاة:
    2.889
      27-02-2009 14:02
    c'est la mémoire physique de votre ordinateur

    c'est à dire que si tu a 1 GB de RAM = 1024 MO

    N= (mémoire/8) +1
    N= (1024/8)+1
    N= 129

     
    4 شخص معجب بهذا.
جاري تحميل الصفحة...

مشاركة هذه الصفحة

جاري تحميل الصفحة...