كيفية بناء وتثبيت أحدث إصدار من Linux kernel من المصدر

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

هناك عدد من المدونات التي تخبرك بالفعل عن كيفية القيام بذلك ، لكن بعضها قديم ، وبعضها يبدو معقدًا بشكل غير ضروري. هدفي هو تقديم نهج مباشر للقيام بذلك ، والذي نأمل أن يساعدك في توفير الكثير من الوقت.

قد يبدو تجميع Linux Kernel من المصدر مهمة شاقة ، حتى بالنسبة لشخص مرتاح جدًا لأجهزة الكمبيوتر بشكل عام. يمكن أيضًا أن يكون مزعجًا حقًا إذا لم تتبع التعليمات الصحيحة.

إذن ، هذا دليل لمساعدتك خلال عملية بناء النواة من المصدر ، وهو دليل يعمل! لن تقلق بشأن إفساد نظامك أو إضاعة وقتك.

لماذا نبني النواة من المصدر؟

إذا كنت تخطط للعمل على الأجزاء الداخلية لنواة Linux أو تغيير سلوكها ، فستحتاج إلى إعادة تجميع النواة على نظامك.

فيما يلي بعض الحالات المحددة التي ستحتاج فيها إلى معرفة كيفية التعامل مع شفرة مصدر kernel:

  1. تريد كتابة برنامج رائع حقًا "Hello world". (في كل مرة تقوم فيها بتنفيذ استدعاء النظام الخاص بك أو تعديل كود مصدر kernel ، ستحتاج إلى إعادة تجميع النواة لتنفيذ التغييرات)
  2. تريد تمكين الميزات التجريبية على kernel التي لم يتم تمكينها افتراضيًا (أو تعطيل الميزات الافتراضية التي لا تريدها)
  3. تريد تصحيح التعليمات البرمجية المصدر لـ kernel ، أو تمكين الدعم لقطعة جديدة من الأجهزة ، أو إجراء تعديلات على التكوينات الحالية
  4. أنت تقوم بدورة تدريبية حول أنظمة التشغيل المتقدمة وليس لديك خيار سوى القيام بذلك!

في كل من المواقف المذكورة أعلاه ، سيكون تعلم كيفية بناء النواة من المصدر مفيدًا.

ماذا ستحتاج

نظام تشغيل قائم على Linux (لقد جربت هذا على Ubuntu 14.04 LTS والتعليمات المكتوبة هنا هي نفسها).

ستحتاج إلى تثبيت بعض الحزم قبل أن تبدأ. استخدم الأوامر التالية لنفس الشيء.

sudo apt-get update
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc

ستحتاج أيضًا إلى ما لا يقل عن 12 جيجابايت من المساحة الخالية على القرص ، واتصال بالإنترنت لتنزيل الكود المصدري ، ووقت طويل (حوالي 45 إلى 90 دقيقة).

تنزيل واستخراج أحدث مصدر kernel

للتحقق من إصدار kernel الحالي لديك ، افتح Terminal واكتب:

uname -r

انتقل إلى kernel.org وقم بتنزيل أحدث إصدار ثابت. في وقت كتابة هذا التقرير ، كان أحدث إصدار ثابت من kernel هو 4.7.1 ، وسأشير إليه في هذه المقالة. (ملاحظة: حاول تجنب تنزيل المصدر من مواقع الويب الأخرى)

غيّر إلى الدليل حيث تم تنزيل الملف واستخرجه باستخدام:

tar xf linux-4.7.1.tar.xz

قم بالتغيير إلى دليل linux-4.7.1 المستخرج.

cd linux-4.7.1

يجب أن يحتوي على مجلدات تسمى arch و fs و crypto وما إلى ذلك.

التكوين والترجمة:

قبل تجميع النواة ، نحتاج إلى تكوين الوحدات النمطية التي سيتم تضمينها والوحدات التي يجب تركها.

هناك العديد من الطرق للقيام بذلك.

طريقة سهلة ومباشرة للقيام بذلك هي نسخ ملف تهيئة kernel الموجود لديك أولاً ثم استخدام "menuconfig" لإجراء تغييرات (إذا لزم الأمر). هذه هي أسرع طريقة للقيام بذلك وربما الأكثر أمانًا.

cp /boot/config-$(uname -r) .config 
make menuconfig

هذا هو الجزء الذي قد ينتهي بك الأمر فيه إلى إزالة دعم برنامج تشغيل الجهاز أو القيام بشيء من هذا القبيل سيؤدي في النهاية إلى كسر النواة. إذا لم تكن متأكدًا من إجراء التغييرات ، فما عليك سوى الحفظ والخروج.

ملاحظة: أحد بدائل menuconfig هو واجهة سطر أوامر تفاعلية يمكن الوصول إليها باستخدام "make config". يساعدك هذا في تكوين كل شيء من البداية. لا تستخدم هذا. سيتم سؤالك أكثر من ألف سؤال بنعم / لا حول تمكين أو تعطيل الوحدات ، والتي أعدك بأنها ليست متعة على الإطلاق. لقد جربت هذا مرة واحدة وتمكنت بطريقة ما من العبث بتكوينات برنامج تشغيل العرض.

gconfig و xconfig هي أدوات تكوين بديلة قائمة على واجهة المستخدم الرسومية يمكنك استخدامها. لم أجرب هذه بنفسي. لهذا، سوف تحتاج إلى استخدام جعل gconfig (أو جعل xconfig ) بدلا من جعل menuconfig .

الآن ، نحن جاهزون!

لتجميع النواة ووحداتها النمطية ، نستخدم الأمر make .

يتبع ذلك استخدام make modules_install لتثبيت وحدات kernel.

أخيرًا ، نستخدم إجراء تثبيت لنسخ ملف kernel و .config إلى المجلد / boot ولإنشاء ملف system.map (وهو جدول رموز يستخدمه kernel).

عادة ما تستغرق هذه الخطوات الثلاث مجتمعة الكثير من الوقت. استخدم الأمر التالي لأداء المهام المذكورة أعلاه:

sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4

ملاحظة: لقد استخدمت الخيار -j لتحديد عدد النوى المراد استخدامها. هذا يميل إلى تسريع العملية إلى حد كبير. يمكنك استخدام nproc للتحقق من عدد وحدات المعالجة المتاحة. في حالتي ، كان هناك 4 نوى.

من الناحية المثالية ، لا يجب أن تحتاج إلى امتيازات sudo ، لكنني كنت أواجه مشكلات عندما لم أقم بتشغيله بامتيازات sudo.

الخطوات النهائية

بمجرد تجميع النواة ووحداتها النمطية وتثبيتها ، نريد استخدام النواة الجديدة في المرة التالية التي نقوم فيها بالتمهيد.

لكي يحدث هذا ، نحتاج إلى استخدام الأمر التالي:

update-initramfs -c -k 4.7.1 

بعد ذلك ، استخدم الأمر التالي ، الذي يبحث تلقائيًا عن النواة الموجودة في مجلد التمهيد / ويضيفها إلى ملف تكوين اليرقة.

update-grub 

الآن ، أعد تشغيل النظام وسترى أن النواة الجديدة تمت إضافتها إلى إدخالات أداة تحميل التمهيد.

باتباع التعليمات ، بافتراض وجود مساحة كافية متاحة على القرص وعمل تكوين kernel الحالي بشكل جيد ، لن تواجه أي مشاكل. لاحظ أنه يمكنك دائمًا استخدام إصدار kernel القديم في حالة حدوث أي مشكلة ومحاولة الأمر برمته مرة أخرى!

الأمر uname -r يجب الآنتظهر لك إصدار kernel الحالي قيد الاستخدام.

ملاحظة مهمة

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

بمعنى ، تذكر فقط ما يلي:

cp /boot/config-$(uname -r) .config
make menuconfig
sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4

يجب أن أنسب الفضل إلى الموارد التالية الجديرة بالاهتمام - فقد كانت مفيدة للغاية في هذه المهمة: Ramkitech.com و askubuntu.com و kernel.org و cyberciti.biz