#: قطار-OS جلسة تدريبية لإنشاء نظام تشغيل. بدءًا من الألف إلى الياء ، فقط باستخدام الموارد من AMD و Intel .
لا يزال في مرحلة ألفا
هذا المستودع غير مصقول بعد ولا يزال يتعين اعتباره في مرحلة ألفا. يجب أن يتم تجميع الكود ويعمل ، لكن الرسائل النصية هي مجرد المسودة الأولى التي لاحظتها إلى جانب ذلك أثناء الترميز والبحث.
ما الذي يختلف عن البرامج التعليمية الأخرى؟
هناك الكثير من البرامج التعليمية وجزء كبير من المواد التي أقدمها يتم تغطيتها أيضًا. فلماذا تهتم؟ أنا أحب بشكل خاص وألهمت هذه:
- فيل تودو: رابط
- intermezzos: تودو: رابط
ما هو مختلف في هذا الإصدار؟ عندما أتعلم أشياء جديدة ، غالبًا ما أشعر أنني لا أعرف/أتعلم كيف يمكنني فعل ما فعلته تمامًا بمفردي في المرة القادمة. لا أعرف ما إذا كانت هذه هي الطريقة التي أتعلم بها أو مجرد شيء نموذجي يتم حذفه بسهولة عند كتابة البرامج التعليمية. فيما يلي بعض النقاط التي أتساءل عنها بانتظام وأريد معالجتها (ربما سأفتقد عن أشياء أساسية أخرى للتعويض عنها)
- تقديم بعض التفاصيل الإضافية حول النقاط هي ببساطة الاتفاقيات التي تم الاتفاق عليها ، وما هو المعيار ، ما هو الهندسة المعمارية. ما زلت أتذكر عندما بدأت في تعلم البرمجة لأول مرة عندما كنت مراهقًا ، كنت مثل "uuhh ... كيف يعرف الكمبيوتر أن الوظيفة الرئيسية يجب أن تسمى أولاً" ، ولا أحد من أصدقائي أو المعلمين جديدين. كان مجرد "السحر". هذه الأشياء تزعجني ، أريد أن أودرستاند من أين تأتي الأمور ...
- أشر إلى المعيار والعمل من هناك. لن أقدم حلًا نهائيًا قمت بنسخه للتو. نأخذ المعيار ، ونبحث في الواقع. مثلما يتعين علينا ذلك إذا كنا نرغب في تشغيل الكود على دعنا نقول قشرة الذراع بدلاً من جهاز X86_64 الخاص بك. أو ، مؤطرًا بشكل مختلف ، ماذا لو كنا أول من يكتب تعليميًا ، كيف يمكننا تشغيل محمل التمهيد ، أو المقاطعات التي تم تكوينها أو وحدة المعالجة المركزية في وضع 64 بت في المقام الأول؟
- افعل الأشياء مرتين. سأذهب أولاً إلى Barebones ، وهذا يساعد على فهم ما يحدث ، وبعد ذلك ، نستخدم الأدوات لتجنب القيام بهذا العمل الأرضي في كل مرة.
- الخطوات المتوسطة و "نقاط التفتيش"
- إعطاء مخطط تفصيلي أولاً -> لرؤية الصورة الأكبر
- إعطاء أمثلة في رمز حقيقي -> على سبيل المثال أن سلة kernel الأولى هي في الواقع بالضبط كيف يتم بناء Linux
- تقديم البدائل/الخيارات لكل
dependency نبدأ في استخدامها. بالنسبة لي ، فهو بومر إذا أردت اتباع برنامج تعليمي والكثير من المكتبات الخارجية تقوم بالسحر الذي أردت أن أتعلمه بالفعل.
مخطط
مخطط تقريبي لما أريد أن أفعله. نأمل ، بترتيب زمني أكثر أو أقل. النقطة المهمة هي أن هناك الكثير من التي يمكن أن نفعلها بحيث يصعب في الواقع اختيار مسار.
أولاً ، أود أن أحصل على فهم أفضل لعملية التمهيد. ما يحدث قبل أن يقفز محمل التمهيد. يعد Rollload Rolloader الخاص بك (رابط إلى OSDEV) مهمة ضخمة في حد ذاته.
خطتي هي استكشاف المرحلة المبكرة في عملية التمهيد قليلاً. الهدف من ذلك هو فهم وتقدير ما يفعله محول التمهيد بالنسبة لنا. في النهاية ، أود أن أحصل على فهم تقريبي لأنماط المعالج المختلفة ، وما الذي يقدمونه وكيفية التبديل إلى الوضع المحمي 32 بت. الهدف الملموس هو أن تكون قادرًا على التبديل إلى الوضع المحمي وطباعة Hello World! إلى الشاشة. كل شيء تم تنفيذه في التجميع وبدون استخدام محمل التمهيد.
بعد ذلك ، أخطط للتبديل واستخدام Grub كحمل تمهيد. وتستمر من هناك.
TL ؛ د
- اكتب صورة قابلة للتمهيد الحد الأدنى.
- Bootloader الذي يطبع
Hello World في وضع حقيقي 16 بت. - قم بالتبديل يدويًا إلى الوضع المحمي 32-Bin وطباعة
Hello World . - قم بالتبديل يدويًا إلى الوضع الطويل 64-bin
- استخدم Grub كمحمل تمهيد وطباعة
Hello World . - التبديل إلى الوضع الطويل (مرة أخرى).
- القفز إلى
C ، طباعة Hello World . - كومة
- تنفيذ برنامج تشغيل الفيديو VGA.
- المقاطعات (الجزء 1) - أخبر وحدة المعالجة المركزية أين يمكن العثور على معالجات ، في ASM
- المقاطعات (الجزء 2) - رمز نقل من 10 إلى ج
- تنفيذ معالجات أفضل
- تصحيح الأخطاء
- التعامل مع المقاطعات/الاستثناءات
- تنفيذ ترحيل الذاكرة.
- kernel kernel
غير محدد:
- إعادة البناء؟
- المرافق (memset؟)
في وقت لاحق ...
- نظام الملفات
- العمليات
- الجدولة
- مكالمات النظام
- استكشف المكدس ، ودفع مكدس الفائض والاستثناءات
- تواصل مع GDB عبر UART (لتصحيح الأخطاء والمعاينة المدمجة)
- عبر بعض الأجزاء (أو كثيرة) لمعالج الذراع. (لدي لوحة STM و Infineon ملقاة حول غير مستخدمة)
مسببات؟
لا أحد. على محمل الجد ، لا تخاف. بيت القصيد من هذا البرنامج التعليمي هو تطوير جميع المعرفة المطلوبة من الألف إلى الياء. هناك حالة واحدة فقط أفترض ، وهذا هو أنه يمكنك البرمجة لائق. أعني من اللائق أنك سمعت على الأقل عن المكدس والكومة ويمكن أن تكون مثمرًا في بعض اللغة. أعتقد أن هذا يجب أن يكون كافيا. بعد كل شيء ، نحن لا نحاول تطوير نظام التشغيل السائد القادم Gen هنا ، نحن نتعرف على مستوى الهواية.
وأحد الأشياء التي يمكنني أن أؤكد لك: حتى لو لم تلمس هذا الرمز مرة أخرى ولن تكتب أبدًا نظام التشغيل. ستغير التجربة فهمك للأنظمة التي تعمل عليها بعمق . إن المعرفة المكتسبة من النمو في فروق مستوى النواة مثل البذور طوال حياتك المهنية وستثبت الرؤى المفيدة في أكثر اللحظات غير المتوقعة.
scratchpad (أفكار غير منظمة من هنا فصاعدًا)
الأفكار
- ماذا تفعل وحدة المعالجة المركزية إذا وضعت التعليمات بعد أول 512 بايت؟ هل تم إعدامهم؟ (وحدة المعالجة المركزية في وضع حقيقي 16 بت)
مخطط
- Bootload -> خياران لفة خاصة بك أو استخدموا ، مثل Grub.
- وضع 16bit
- إدخال الوضع المحمي 32 بت محمي
- إدخال الوضع الطويل 64 بت
- أدخل ج
- اكتب وحدة إدارة الذاكرة
دورة 0 - أدوات البيئة والتجميع
- يمكنك تخطي بعض الخطوات. لن نحتاج إلى أدوات أدوات التجميع المتقاطعة قبل أن نبدأ في كتابة رمز C.
- ابدأ في بناء مخطط الأدوات الخاص بك في مكان ما تحت المنزل $
- تأكد من أن نطاق متغيرات البيئة صحيح
- تشير أخطاء مثل "ليس لديك إذن لإنشاء دليل
/usr/lib/i686-elf إلى أنه لم يتم تعيين $PREFIX بشكل صحيح. - نحن لا نحصل على وحدة المعالجة المركزية "الحقيقية" Barebones ، لا يزال هناك السير قبلنا. يقوم بتهيئة وحدة المعالجة المركزية ويسلم لنا مع وحدة المعالجة المركزية في الوضع الحقيقي.
Cycle 0 - Bootloader
موارد
- توثيق NASM https://www.nasm.us/xdoc/2.14.02/html/nasmdoc3.html
- أدلة إنتل