الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية بناء ملف Kernel وتحميله

بدأه MohamedIBrahim في 5 يونيو 2011 · 4 رد · 1,573 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

استكمالا للسلسلة

كيف يمكننى عمل ملف Kernel أستطيع تحميله ؟

تستطيع كتابته بطرق عديدة تستطيع اخبار GCC أن يقوم باخراج ملف ثنائى بدون relocations او ملفات Headers أو اى معلومات اخرى سأفترض انا ان هذا ما سوف تفعله

مثال


LD my_kernel.o -o kernel.bin -oformat binary -Ttext 0x100000
GCC -c my_kernel.c

نأتى الان الى شرح التعليمات السابقة

-c

تخبر GCC أنه عليه ترجمة الملف الى ملف Object ولا يقوم بعملية الربط (Link)

أما

-oformat binary

فتخبر الGCC بأن يقوم بعملية Link للمخرج الى ملف بدون Headers أو relocations بحيث يكون يكون Plain فيكون الملف مجرد صورة ثنائية مباشرة

-Ttext 0x100000

هنا نقوم لاخبار الLinker انك تريد عنوان نصك (Code segment) أن يكون معلما بالذاكرة 1MB

تحميل صورة الملف الثنائى للكيرنل الخاص بك الى الOffest المناسب

هل هناك طريقة اسهل لتحميل النواة الخاصة بى ؟

نعم هناك طريقة اسهل لتحميل النواة الخاصة بك وهذا باستخدام boot loader جاهز

وافضل الboot loaders هو GRUB وهو سو يقوم بالمهمة الصعبة لتحميل النواة الحاصة بك

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

انظمة الاقلاع / قوائم الاقلاع:

Bootloaders وقوائم الاقلاع هما برنامجان مختلفان

الفرق بين الاثنين هو بسيط قائمة التمهيد يسمح لك لتحديد نظام التشغيل الذي تريد التمهيد ولكن لا يتم تحميل أي جزء من نظام التشغيل التي في الذاكرة.

Boot loader يسمح لك لتحديد نظام التشغيل الذي تريد التحميل منه وتحميل أجزاء منه في الذاكرة

فمثلا System Commander هى من boot menu لكن GRUB هو Boot Loader

باستخدام Boot Loader فوق boot menu

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

فال boot loader قوم بتحميل النواة الخاصة بك بغض النظر عن نظام الملفات

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

نهاية الفصل الثانى

المصادر

OS-FAQS

OS Dev Forums

تم تعديل هذه المشاركة بواسطة Xacker في 5 يونيو 2011 في 16:21 — السبب: Krenel => Kernel

GoodBye

#2
اقتباس

باخراج ملف ثنائى بدون relocations

شكرا اخي... ماذا يعني مصطلح relocations هنا... في بنية الملفات التنفيذية يوجد جدول بهذا الأسم، ماهو وما وظيفته؟

#3
Adban كتب:

شكرا اخي... ماذا يعني مصطلح relocations هنا... في بنية الملفات التنفيذية يوجد جدول بهذا الأسم، ماهو وما وظيفته؟

للرفع!

#4
اقتباس
شكرا اخي... ماذا يعني مصطلح relocations هنا... في بنية الملفات التنفيذية يوجد جدول بهذا الأسم، ماهو وما وظيفته؟

الملف التنفيذى يحتوى على ما يسمي preferred address و هو الموقع الذى سيتم تحميل الملف التنفيذي به و لكن احيانا يقوم الـ loader بوضع الملف التنفيذى بعنوان أخر حينها يأتي دور جدول .reloc و الذى يحتوى على قيم لتصحيح بعض المواقع داخل كود الملف التنفيذي و ذلك حتى يعمل دون مشاكل.

الملف التنفيذي بدون جدول reloc يعنى ان الملف سيتم تحميله داخل عنوان ثايت و إذا حدث و ان تغير ذلك العنوان ستفشل عملية تنفيذه.

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

#5
محمد علاء الدين كتب:

الملف التنفيذى يحتوى على ما يسمي preferred address و هو الموقع الذى سيتم تحميل الملف التنفيذي به و لكن احيانا يقوم الـ loader بوضع الملف التنفيذى بعنوان أخر حينها يأتي دور جدول .reloc و الذى يحتوى على قيم لتصحيح بعض المواقع داخل كود الملف التنفيذي و ذلك حتى يعمل دون مشاكل.

الملف التنفيذي بدون جدول reloc يعنى ان الملف سيتم تحميله داخل عنوان ثايت و إذا حدث و ان تغير ذلك العنوان ستفشل عملية تنفيذه.

و الله ولي التوفيق

أحسن الله إليك.

1

مواضيع مشابهة