نحن نبني نظام التشغيل الخاص بنا على أساس Linux. كيفية إنشاء النظام الخاص بك لأي نشاط

15.08.2019

أولا، تعلم البرمجة.مطلوب معرفة المجمع. يوصى أيضًا بشدة بفهم لغات البرمجة الإضافية ذات المستوى الأدنى، مثل C.

حدد الجهاز الذي تريد تحميل نظام التشغيل عليه.يمكن أن يكون هذا قرصًا مضغوطًا أو قرص DVD أو جهاز ذاكرة فلاش أو محرك أقراص ثابتة أو كمبيوتر آخر.

قرر الشكل الذي تريد أن يبدو عليه نظام التشغيل الخاص بك.هل ينبغي أن يكون نظام تشغيل كاملًا مزودًا بواجهة مستخدم رسومية (GUI) أو ربما شيء أكثر بساطة؟ عليك أن تعرف الاتجاه الذي يجب أن تسلكه قبل بدء العملية.

تحقق من النظام الأساسي للمعالج الذي سيدعمه نظام التشغيل الخاص بك.يعد AI-32 وx86_64 الإصدارين الأكثر شيوعًا لأجهزة الكمبيوتر الشخصية، لذا يمكن اعتبارهما الخيار الأفضل.

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

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

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

  • لإنشاء نظام تشغيل باستخدام كود C أو C++، ستستخدم بالطبع مترجمًا واحدًا أو آخر. هذا يعني أنه يجب عليك قراءة الدليل/التعليمات/الوثائق الخاصة بمترجم C/C++ المحدد الذي يأتي مرفقًا مع البرنامج أو متاحًا على موقع الويب الخاص بالموزع. سيتعين عليك تعلم الكثير من الأشياء المعقدة حول المترجم، وستحتاج أيضًا إلى تعلم تصميمه وواجهة برمجة التطبيقات (ABI) لتحسين لغة C++. يُتوقع منك فهم تنسيقات مهام التنفيذ المختلفة (ELF، وPE، وCOFF، والثنائي العادي، وما إلى ذلك) وستلاحظ أن تنسيق Windows PE الأصلي (.exe) محمي بموجب حقوق الطبع والنشر.
  • حدد واجهة برمجة التطبيقات (API).إحدى واجهات برمجة التطبيقات الجيدة هي POSIX، لأنها موثقة جيدًا. تتمتع جميع أنظمة Unix بدعم جزئي على الأقل لـ POSIX، لذلك سيكون من السهل تجميع برامج Unix في نظام التشغيل الخاص بك.

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

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

    لا تمسح القرص الصلب الخاص بك بالكامل.تذكر أن تنسيق القرص سيؤدي إلى مسح جميع بياناتك بشكل دائم! استخدم GRUB أو مدير آخر لتكرار تشغيل جهاز الكمبيوتر الخاص بك من نظام تشغيل آخر حتى يصبح الإصدار الخاص بك جاهزًا للعمل بشكل كامل.

    تبدأ صغيرة.انتبه إلى الأشياء الصغيرة أولاً، مثل عرض النص والانقطاعات، قبل الانتقال إلى العناصر المعقدة مثل إدارة الذاكرة وتعدد المهام.

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

    اختبر نظام التشغيل الجديد الخاص بك على جهاز افتراضي.بدلاً من إعادة تشغيل جهاز الكمبيوتر الخاص بك في كل مرة تقوم فيها بإجراء تغييرات أو نقل الملفات من جهاز الكمبيوتر الخاص بك إلى جهاز الاختبار، يمكنك استخدام تطبيق لتشغيل نظام التشغيل في جهاز ظاهري بينما يستمر نظام التشغيل الحالي الخاص بك في التشغيل. تتضمن تطبيقات VM برنامج VMWare (الذي يحتوي أيضًا على خادم متاح مجانًا)، وبديل مفتوح المصدر، وBochs، وMicrosoft Virtual PC (غير متوافق مع Linux)، وXVM VirtualBox.

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

  • يجب أن يكون نظام التشغيل أيضًا سهل الاستخدام، لذا تأكد من إضافة ميزات مفيدة تصبح جزءًا لا يتجزأ من تصميمك.

    • بمجرد اكتمال التطوير، فكر فيما إذا كنت تريد جعل الكود متاحًا للعامة أو جعله خاصًا.
    • تأكد من جعل ميزات الأمان على رأس أولوياتك إذا كنت تريد أن يكون نظامك قابلاً للتطبيق.
    • لا تبدأ مشروعًا لتطوير نظام التشغيل بهدف تعلم البرمجة. إذا كنت لا تعرف لغة C أو C++ أو Pascal أو أي من اللغات والميزات الأخرى ذات الصلة، بما في ذلك أنواع المؤشرات وعمليات البت ذات المستوى المنخفض وتبديل البت والمجمع المضمن وما إلى ذلك، فأنت لست جاهزًا بعد لإنشاء نظام التشغيل.
    • تصفح بوابات مثل OSDev وOSDever لمساعدتك على تحسين نظام التشغيل الخاص بك. يرجى العلم بشكل خاص أنه بالنسبة لمعظم المشكلات، يفضل مجتمع OSDev.org أن تقوم بمراجعة محتوى الموقع بنفسك بدلاً من الانضمام إلى المنتدى. إذا قررت مع ذلك الانضمام إلى صفوف أعضاء المنتدى، فيجب أن تكون هناك شروط مسبقة معينة لذلك. يجب أن تكون لديك معرفة شاملة بلغة التجميع C أو C++ وx86. يجب عليك أيضًا فهم المفاهيم العامة والمعقدة في البرمجة مثل القوائم المرتبطة وقوائم الانتظار وما إلى ذلك. ينص مجتمع OSDev صراحةً في قواعده على أنه لن يقوم أحد بمجالسة المبرمجين الجدد. إذا كنت تحاول تطوير نظام تشغيل، فغني عن القول أنك إله البرمجة. يُطلب منك أيضًا قراءة دليل المعالج الخاص ببنية المعالج التي تحددها؛ على سبيل المثال x86 (Intel)، ARM، MIPS، PPC، إلخ. يمكن العثور بسهولة على مثل هذا الكتاب المرجعي حول بنية المعالج من خلال البحث على Google ("أدلة Intel"، "أدلة ARM"، وما إلى ذلك). لا تنضم إلى منتدى OSDev.org لطرح أسئلة واضحة. سيؤدي هذا ببساطة إلى ردود مثل "اقرأ دليل الاستخدام". أولاً، يجب أن تحاول قراءة ويكيبيديا، والأدلة الخاصة بالأدوات المختلفة التي ستستخدمها.
    • تحقق من وجود نقاط ميتة محتملة وأخطاء أخرى. يمكن أن تؤثر الفجوات والطرق المسدودة والمشكلات الأخرى على تصميم نظام التشغيل الخاص بك.
    • إذا كنت تريد طريقة أبسط، ففكر في توزيعات Linux مثل Fedora Revisor أو Custom Nimble X أو Puppy Remaster أو PCLinuxOS mklivecd أو SUSE Studio وSUSE KIWI. ومع ذلك، فإن نظام التشغيل الذي يتم إنشاؤه ينتمي إلى الشركة التي قدمت هذه الخدمة لأول مرة (على الرغم من أن لديك الحق في توزيعها وتغييرها وتشغيلها بحرية كما تريد بموجب GPL).
    • الحل الجيد هو إنشاء قسم جديد تمامًا لنظام التشغيل الجاري تطويره.

    تحذيرات

    • قد يؤدي نسخ نظام التشغيل على القرص الصلب بلا مبالاة إلى إتلافه بالكامل. احرص
    • لن يكون لديك نظام مكتمل بالكامل خلال أسبوعين. ابدأ بنظام تشغيل قابل للتمهيد ثم انتقل إلى أشياء أكثر إثارة للاهتمام.
    • إذا فعلت شيئًا متهورًا مثل كتابة بايتات عشوائية إلى منافذ الإدخال/الإخراج العشوائية، فسوف تدمر نظام التشغيل الخاص بك ويمكن (نظريًا) أن تحرق أجهزتك.
    • لا تتوقع أن يكون من السهل إنشاء نظام تشغيل عالي الجودة. هناك العديد من الترابطات المعقدة. على سبيل المثال، لكي يكون نظام التشغيل قادرًا على التعامل مع معالجات متعددة، يجب أن يكون لدى مدير الذاكرة الخاص بك آليات "قفل" لمنع المعالجات الإضافية من الوصول إلى نفس المورد في نفس الوقت. تشتمل "الكتل" المستخدمة على برنامج جدولة لضمان وصول معالج واحد فقط إلى مورد مهم في أي وقت، بينما تكون جميع المعالجات الأخرى خاملة. ومع ذلك، يعتمد تشغيل المجدول على وجود مدير الذاكرة. وهذا مثال على التبعية في حالة توقف تام. لا توجد طريقة قياسية لحل مشاكل مثل هذه؛ من المتوقع أن يتمتع كل منشئ نظام تشغيل بالمهارة الكافية للتوصل إلى الحل الخاص به.

    مصادر

    ما سوف تحتاجه

    • حاسوب
    • المعالج الذي ستبني عليه
    • ذاكرة وصول عشوائي (RAM) كافية للجهاز الظاهري
    • نظام التشغيل الأساسي (يستخدم لتطوير كود مصدر التجميع (وما إلى ذلك) والتجميع والتعبئة في المراحل الأولى من العمل؛ وفي النهاية سيصبح نظام التشغيل الخاص بك أساسيًا)
    • محرر كود لون بناء الجملة (يستخدم في غياب بيئة التطوير المتكاملة)
    • مترجم
    • محرك الأقراص المضغوطة/أقراص DVD

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

    النظام هو أسلوب أو إجراء أو روتين يتم إنشاؤه لأداء نشاط متكرر باستخدام استراتيجية. تسمح لك الأنظمة بإدارة عملك وحياتك بشكل أكثر كفاءة.

    فيما يلي بعض مجالات الحياة التي يمكنك إنشاء نظامك الخاص لها:

    • التنظيم.
    • التنظيم.
    • تنظيم المهام للتدوين.
    • تنظيم تنظيف المنزل.
    • تنظيم روتين الصباح والمساء.
    • تنظيم معالجة البريد الإلكتروني.
    • تنظيم مهام العمل.

    ستسمح لك الخطوات الخمس التالية بإنشاء نظامك الخاص لأي نشاط تقريبًا.

    يأخذ المخزون

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

    انتقل إلى قائمة المهام المحددة للعنصر المحدد واسأل نفسك ما يلي:

    • كيف تفعل ذلك الآن؟
    • هل تشعر وكأنك تفعل ذلك بأكبر قدر ممكن من الكفاءة؟
    • أين تضيع الكثير من الوقت؟
    • أين تخسر المال؟
    • ما هي التصرفات التي أزعجتك أكثر؟
    • ما الذي لا يتم إنجازه حاليًا بأسرع ما يمكن؟
    • ما الذي يحتاج إلى التحسين؟

    بناءً على مخزونك، اختر نشاطًا واحدًا لتنظيمه.

    قم بتحليل ما تفعله حاليًا

    قم بتنفيذ الإجراءات التي تريد تنظيمها باستخدام الإجراء العادي (أي التصرف كالمعتاد). قم بتوثيق العملية من خلال تسجيل كل ما يلي:

    • ما هي الخطوات التي تتخذها؟
    • ما هي الأدوات التي تستخدمها؟
    • أين هي الاختناقات (حيث يضيع الوقت، ويحدث التأخير باستمرار، أو يحدث خطأ ما)؟
    • ما الذي يخيب ظنك؟
    • كم من الوقت يستغرق إكمال هذا النشاط؟
    • كم يكلف؟
    • ما هي النتائج التي تحصل عليها؟

    بعد ذلك قم بمراجعة الوثيقة المستلمة ودراستها.

    التخطيط لعملية جديدة

    النظام، كما ذكرنا سابقًا، هو عملية تقوم بإنشائها لتبسيط المهام وزيادة الكفاءة. ألقِ نظرة على المستند والنشاط الذي تريد تحسينه واطرح على نفسك الأسئلة التالية:

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

    الآن قم بتدوين نظامك الجديد، مع إدراج كل خطوة بالتفصيل.

    تنفيذ الخطة

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

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

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

    قم بإجراء التعديلات والتغييرات اللازمة. قم بتحديث نظامك حتى تحصل على النتائج التي تريدها.

    تحسين النظام بشكل مستمر

    يجدر مراقبة نظامك باستمرار، لأنه في عالم يتغير بسرعة، يمكن أن يصبح قديمًا بنفس السرعة. اسأل نفسك دائمًا ما إذا كانت هناك حاجة إلى تحسينات.

    • هل يعمل النظام كما ينبغي؟
    • هل يمكنك تقليل تكلفة النظام؟
    • هل يمكنك جعل النظام أكثر كفاءة؟
    • هل يمكنك تبسيط النظام للحصول على نتائج أفضل؟

    يتطلب إنشاء النظام دائمًا استثمارًا للوقت. ولكن من خلال إنفاق أكثر مما تنفقه في البداية، سينتهي بك الأمر إلى توفيره بشكل كبير. والتقليل من تأثير الضغوط التشغيلية.

    نتمنى لك حظا سعيدا!

    إذا وصلنا إلى هذه النقطة...

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

    أيضًا، يجب أن يوفر نظام التشغيل، في حالة وجود ذاكرة طويلة المدى، إمكانية الوصول إليها: أي توفير جميع الوظائف للعمل مع نظام الملفات. إنه الحد الأدنى.

    في كل مكان تقريبًا، يجب كتابة رمز التمهيد الأول بلغة التجميع - هناك مجموعة من القواعد حول المكان الذي يجب أن يكون فيه، وكيف يجب أن يبدو، وما يجب أن يفعله، وما الحجم الذي يجب ألا يتجاوزه.

    بالنسبة لجهاز الكمبيوتر، تحتاج إلى كتابة أداة تحميل التشغيل على ASMA، والتي سيتم استدعاؤها بواسطة BIOS والتي يجب، دون تجاوز أربعة وبضع مئات من البايتات، القيام بشيء ما وتشغيل نظام التشغيل الرئيسي - نقل التحكم إلى الكود الرئيسي، والذي يمكن كتابة المستقبل القريب بلغة C.

    بالنسبة إلى ARM، تحتاج إلى إنشاء جدول مقاطعة على ACMA (إعادة التعيين، والأخطاء المختلفة، ومقاطعة IRQ، ومقاطعات FIQ، وما إلى ذلك) ونقل التحكم إلى الكود الرئيسي. على الرغم من أن هذا الرمز متاح في العديد من بيئات التطوير لأي وحدة تحكم تقريبًا.

    وهذا هو، لهذا تحتاج:

    1. تعرف على لغة التجميع الخاصة بالمنصة المستهدفة.
    2. تعرف على بنية المعالج وجميع أنواع أوامر الخدمة والسجلات لتكوينه للعمل في الوضع المطلوب. في جهاز الكمبيوتر، يعد هذا انتقالًا إلى الوضع المحمي، على سبيل المثال، أو إلى وضع 64 بت. في ARM، يعد هذا بمثابة ضبط توقيت النواة والأجهزة الطرفية.
    3. تعرف بالضبط كيف سيبدأ نظام التشغيل، وأين وكيف تحتاج إلى دفع التعليمات البرمجية الخاصة بك.
    4. معرفة لغة C - من الصعب كتابة تعليمات برمجية كبيرة بلغة Asma بدون خبرة، كما أن صيانتها ستكون أكثر صعوبة. لذلك، تحتاج إلى كتابة النواة في C.
    5. تعرف على مبادئ تشغيل نظام التشغيل. حسنًا، هناك الكثير من الكتب باللغة الروسية حول هذا الموضوع، على الرغم من أنني لا أعرف ما إذا كانت جميعها جيدة.
    6. تحلى بالكثير والكثير من الصبر والمثابرة. ستكون هناك أخطاء وسيتعين العثور عليها وتصحيحها. ستحتاج أيضًا إلى القراءة كثيرًا.
    7. لديك الكثير والكثير من الوقت.

    إضافي. لنفترض أنك كتبت شيئًا ما. نحن بحاجة لاختبار هذا الشيء. إما أنك تحتاج إلى جهاز فعلي ستُجرى عليه التجارب (لوحة تصحيح الأخطاء، أو كمبيوتر ثانٍ)، أو محاكيًا له. عادةً ما يكون الخيار الثاني أسهل وأسرع في الاستخدام. لأجهزة الكمبيوتر، على سبيل المثال، برنامج VMWare.

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

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

    الأصل: "قم بلف لعبتك الخاصة بنظام التشغيل UNIX-clone OS"
    المؤلف: جيمس مولوي
    تاريخ النشر: 2008
    ترجمة: ن. رومادانوف
    تاريخ الترجمة: يناير 2012

    تم تصميم هذه المجموعة من البرامج التعليمية لتوضيح كيفية برمجة نظام تشغيل بسيط يشبه UNIX لبنية x86 بالتفصيل. في هذه الدروس، لغة البرمجة المختارة هي C، مع استكمالها بلغة التجميع عند الحاجة. الغرض من البرامج التعليمية هو إخبارك عن تصميم وتنفيذ الحلول المستخدمة في إنشاء نظام التشغيل OS الذي نقوم بإنشائه، والذي يكون متجانسًا في بنيته (يتم تحميل برامج التشغيل في وضع وحدة kernel، وليس في وضع المستخدم كما يحدث مع البرامج)، لأن مثل هذا الحل أكثر بساطة.

    هذه المجموعة من الأدلة عملية للغاية بطبيعتها. يقدم كل قسم معلومات نظرية، ولكن معظم الدليل يتعلق بتنفيذ الأفكار والآليات المجردة التي تمت مناقشتها في الممارسة العملية. من المهم أن نلاحظ أن جوهر يتم تنفيذه باعتباره جوهر التدريب. أعلم أن الخوارزميات المستخدمة ليست الأكثر كفاءة في استخدام المساحة ولا هي الأمثل. تم اختيارهم بشكل عام بسبب بساطتهم وسهولة فهمهم. والغرض من ذلك هو إعطائك العقلية الصحيحة والأساس الذي تعمل من خلاله. هذا النواة قابل للتوسيع ويمكنك بسهولة توصيل أفضل الخوارزميات. إذا كانت لديك أية مشكلات تتعلق بالنظرية، فهناك العديد من المواقع التي يمكن أن تساعدك في اكتشافها. معظم الأسئلة التي تمت مناقشتها في منتدى OSDev تتعلق بالتنفيذ ("وظيفة get الخاصة بي لا تعمل! مساعدة!") وبالنسبة للكثيرين، فإن السؤال حول النظرية يشبه نسمة هواء نقية. يمكن العثور على الروابط في نهاية هذا مقدمة.

    التحضير الأولي

    لتجميع وتشغيل رمز المثال، أفترض أنك تحتاج فقط إلى دول مجلس التعاون الخليجي، ld، NASM وGNU Make. NASM هو مجمع x86 مفتوح المصدر وهو اختيار العديد من مطوري نظام التشغيل x86.

    ومع ذلك، ليس هناك فائدة من تجميع الأمثلة وتشغيلها إذا لم تفهمها. عليك أن تفهم ما يتم ترميزه، وللقيام بذلك عليك أن تعرف لغة C جيدًا، خاصة عندما يتعلق الأمر بالمؤشرات. يجب عليك أيضًا فهم بعض لغات التجميع (تستخدم هذه البرامج التعليمية بناء جملة Intel)، بما في ذلك الغرض من استخدام سجل EBP.

    موارد

    هناك العديد من الموارد إذا كنت تعرف كيف تبحث عنهم. وعلى وجه الخصوص، ستجد الروابط التالية مفيدة:

    • رتفم! أدلة إنتل هي هبة من السماء.
    • صفحات الويكي ومنتدى الموقع osdev.org.
    • هناك العديد من البرامج التعليمية والمقالات الجيدة على موقع Osdever.net، وعلى وجه الخصوص دروس تطوير kernel الخاصة بـ Bran، والتي يستند إليها هذا البرنامج التعليمي، استخدمت هذه البرامج التعليمية بنفسي للبدء، وكان الكود الموجود فيها جيدًا جدًا لدرجة أنني فعلت ذلك لا تغييره لعدد من السنوات.
    • إذا لم تكن مبتدئا، فيمكنك الحصول على إجابات للعديد من الأسئلة في المجموعة

    ايليا الكسندروف

    نحن نقوم بإنشاء نظام التشغيل الخاص بنا على أساس Linux

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

    على مدار سنوات عديدة من العمل مع Linux، استخدمت عددًا كبيرًا من التوزيعات المختلفة: Mandriva وFedora وSlackWare وDebian وUbuntu وغيرها الكثير. أحببت بعض المشاريع أكثر، وبعضها أقل. ولكن في جميع التوزيعات كان علينا حتماً أن نتعامل مع أوجه القصور الخطيرة التي جعلت العمل صعباً للغاية. أحدهما يتطلب موارد كبيرة للغاية، والآخر لا يدعم جميع المعدات اللازمة، والثالث يفتقر إلى البرامج المختلفة. وهنا تذكرت الحكمة الشرقية الشهيرة: إذا كنت تريد أن تفعل شيئًا جيدًا، فافعله بنفسك.

    لينكس من الصفر

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

    أدت رغبة المبرمج الموهوب إلى ظهور مشروع Linux from Scratch (www.linuxfromscratch.org)، والمختصر بـ LFS. يتيح لك هذا المشروع تصميم نظام التشغيل الخاص بك المستند إلى Linux من البداية، من أكواد المصدر. يتم تجميع LFS على جهاز كمبيوتر مثبت عليه نظام Linux بالفعل، ومع ذلك، فإن القرص المضغوط المباشر "المتقدم"، على سبيل المثال، Knoppix، مناسب أيضًا.

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

    كما تعلمون، قام لينوس تورفالدس بتطوير نظام التشغيل الخاص به تحت شعار "للمتعة فقط!" - أي من أجل المتعة فقط. يجب الاعتراف بأن LFS لا يتم العثور عليه في كثير من الأحيان على الخوادم؛ وعادة ما يستخدم هذا النظام من قبل عشاق الكمبيوتر. سيساعدك التثبيت والعمل باستخدام Linux من Scratch على فهم العلاقة بين مكونات نظام التشغيل، وهو ما سيكون مفيدًا عند تطوير توزيعة Linux الخاصة بك، وليس فقط استنادًا إلى LFS. لذلك، تم تصميم LFS إلى حد كبير لأولئك الأشخاص الذين تعتبر عملية تجميع التوزيع الخاص بهم مثيرة ومثيرة للاهتمام - وصدقوني، هناك الكثير من هؤلاء الأشخاص.

    لذلك، إذا كنت على استعداد لقضاء يوم كامل (أو حتى أكثر) في تصميم النظام، فإنني أوصي بالتنزيل من الموقع (2) LFS-packages-6.0، LFS-book، ومواصلة قراءة هذه المقالة.

    تقسيم القرص وإنشاء شجرة الدليل

    للحصول على فهم أفضل للمادة، سنقوم بوصف العملية برمتها بشكل عام (انظر الشكل 1).

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

    طوال العملية برمتها، مساعدك الرئيسي هو الوثائق من حزمة كتب LFS، والتي يمكن العثور على الترجمة الروسية لها هنا: http://multilinux.sakh.com/download/lfsbook.tar.bz2. يصف الكتاب كل خطوة من خطوات إنشاء نظام التشغيل بالتفصيل، لذا تأكد من الرجوع إلى هذا الدليل إذا كانت لديك مشكلات (ليس المقصود من هذه المقالة أن تحل محل هذه الوثائق الشاملة).

    نقوم بإنشاء قسم جديد - في حالتي هو /dev/hda5، نظرًا لأن القسم /dev/hda1 مشغول بالفعل بواسطة Linux Slackware المثبت على القرص الصلب. يوصى أولاً بعمل نسخة احتياطية للنظام حتى يمكن استعادته في حالة حدوث ضرر، على الرغم من أن احتمال ذلك قريب من الصفر. وهنا، أعتقد أن كل شيء واضح: نخصص المبلغ المطلوب (23 جيجابايت يكفي) للدليل الجذر، مساحة تساوي ضعف حجم ذاكرة الوصول العشوائي لقسم المبادلة، إذا رغبت في ذلك، يمكنك إنشاء أقسام منفصلة للمنزل الدليل (/الصفحة الرئيسية) و/التمهيد. ومع ذلك، فإن خيار التقسيم الذي يفضله الكثيرون - تخصيص كل المساحة المتاحة ناقص المبادلة إلى الدليل الجذر، ثم إنشاء المبادلة نفسها - يعد أيضًا مقبولًا تمامًا عند إنشاء LFS. على كمبيوتر المؤلف، يستخدم كل من Linux Slackware، وهو نظام التشغيل الأصلي، وLFS محرك أقراص ثابتة واحدًا، ومع ذلك، فإن تثبيت LFS على محرك أقراص ثابت آخر ليس بالأمر الصعب أيضًا.

    اختر نظام الملفات حسب تقديرك: لم تكن هناك مشاكل مع Ext3 أو ReiserFS ضمن LFS. لكن سيشعر محبو XFS بخيبة أمل - فمحاولات جعل Linux From Scratch يعمل مع FS هذا لم تكن ناجحة.

    نقوم الآن بتثبيت القسم المخصص لنظام التشغيل الجديد:

    $ mount /dev/hda5 /mnt/mylin

    للراحة، دعونا نحدد متغير MYLIN:

    $ تصدير MYLIN=/mnt/mylin

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

    $ إضافة مستخدم مايلين

    $ chown –R مايلين $MYLIN

    تحتاج إلى إنشاء شجرة دليل في جذر القسم الجديد:

    $cd$ميلين

    $ mkdir –p bin boot dev وما إلى ذلك home lib mnt opt ​​​​root sbin usr/(X11R6,local) var

    في الدلائل usr، usr/X11R6، usr/local، نقوم بإنشاء البنية اللازمة: الدلائل الفرعية bin، إلخ، تشمل، lib، sbin، share، src.

    ثم سنفعل الشيء نفسه بالنسبة للمجلدين /var و/opt للنظام المستقبلي:

    $ mkdir var/(cache,lib,local,lock,log,opt,run,spool)

    $ mkdir opt/(bin,doc,include,info,lib,man)

    دعونا لا ننسى أن هناك تسلسلات هرمية أعمق، على سبيل المثال /usr/share/man/man1. لكن نطاق المقالة لا يسمح لنا بتقديم جميع المعلومات حول بنية شجرة الملفات هنا، لذلك تحتاج إما إلى استخدام مستند Filesystem Hierarhy Standard (يمكن العثور عليه على: http://linux-ve.net) /MyLDP/file-sys/fhs-2.2-rus) أو ادرس بعناية بنية نظام التشغيل Linux الذي قمت بتثبيته بالفعل. بعد إعداد القرص الصلب، ننتقل إلى التجميع الثابت.

    بناء ثابت

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

    ولكن عندما نستخدم الأمر chroot لتعيين الدليل الجذر للنظام المُجمَّع حديثًا، فإن مكتبات النظام المثبت "الأصل"، الموجودة في /lib، و/usr/lib، وغيرها، لن تكون متاحة بعد الآن، لذلك يتم تجميعها ديناميكيًا سترفض البرامج العمل، بالإضافة إلى ذلك، لن يكون من الممكن عدم ضمان توافق الإصدار.

    لتجنب ذلك، سنقوم أولاً بتجميع كافة البرامج اللازمة لنظامنا المستقبلي بشكل ثابت. لنبدأ بمترجم أوامر bash. (يمكن لعشاق ZSH أو TCSH تثبيت المترجمين الفوريين المفضلين لديهم بعد تثبيت النظام، ولكن في مرحلة الإنشاء، لا يتم توفير استخدامها من قبل مؤلف LFS). يجب عليك التحقق مما إذا كان لديك الملف /usr/lib/libcurses.a، وإذا لم يكن كذلك، قم بتثبيت حزمة ncursesdev. يجب إنشاء جميع الحزم بعلامات بناء ثابتة: "--enable-static-link" أو "--disable-shared" أو "--static". يمكن معرفة أي منها مناسب في كل حالة محددة من خلال الوثائق الخاصة بحزمة معينة أو من خلال مخرجات البرنامج النصي للتكوين الذي تم تشغيله باستخدام المعلمة "--help".

    $ ./تكوين --مساعدة

    لكي لا نخلط بين البرامج المترجمة بشكل ثابت والبرامج "الديناميكية" لاحقًا، فلنقم بإنشاء دليل خاص لها:

    $mkdir $MYLIN/stat

    عند إنشاء الحزم وتثبيتها، لا تنس إضافة المعلمة "--prefix=$MYLIN/stat" لنقل الملفات إلى هذا الدليل. وأخيرًا، قم بتثبيت باش:

    $ ./configure –-enable-static-link --prefix=$MYLIN/stat

    $ جعل

    $ قم بالتثبيت

    باستخدام نفس المخطط، نقوم بجمع الحزم الضرورية المتبقية : binutils، bzip2، textutils، texinfo، tar، sh-utils، gcc، grep، gzip، gawk، diffutils، fileutils، make، patch، sed،وفي الواقع، نواة لينكس.

    نعم، عند تجميع النواة، لا تنس أنه بالنسبة للإصدارات الأقدم من النواة (2.2.x-2.4.x) فإنك تحتاج إلى استخدام gcc 2.95، وبالنسبة للإصدار الحالي 2.6.x فمن المستحسن استخدام gcc 3.x تجنب المشاكل.

    لا تنس إلقاء نظرة على الأقسام ذات الصلة من كتاب LFS، فهو يتحدث عن هذا والعديد من الفروق الدقيقة الأخرى. بشكل عام، لا يختلف تجميع النواة في LFS عن إجراء مماثل يتم إجراؤه عند استخدام التوزيع المثبت على محرك الأقراص الثابتة. لنقم بفك ضغط مصادر النواة إلى $MYLIN/usr/src/linux-2.6.xx، ثم قم بتكوينها عن طريق تشغيل:

    $ جعل القائمة التكوين

    لقد تم وصف عملية ضبط معلمات النواة عدة مرات على الإنترنت (6)؛ ومن غير المرجح أن تكون هناك حاجة للخوض في هذا الأمر بمزيد من التفصيل. بعد ذلك، نعطي الأوامر التالية في المجلد الذي يحتوي على مصادر Linux-kernel:

    $ اصنع bzImage

    $ إنشاء وحدات

    هذا كل شيء، في $MYLIN/usr/src/linux-2.6.xx/arch/i386/boot/bzImage هناك نواة جديدة.

    بعد ذلك، قم بإنشاء الملفات $MYLIN/etc/passwd و$MYLIN/etc/group. في الأول، نسجل مستخدمًا واحدًا في الوقت الحالي - الجذر باستخدام أي كلمة مرور، وفي الثانية - مجموعات المستخدمين (بالنسبة للمبتدئين، ستكون مجموعة جذر واحدة كافية أيضًا).

    عند هذه النقطة، انتهت استعداداتنا للخطوة التالية، وننتقل إلى تجميع ديناميكي أكثر دقة.

    التجميع الديناميكي

    نحن الآن بحاجة إلى تغيير الدليل الجذر إلى /mnt/mylin، حيث سنستخدم فقط الأدوات المساعدة المجمعة بشكل ثابت - لن نتمكن بعد الآن من اللجوء إلى مساعدة الأدوات من نظام التشغيل "الأصل". نصدر الأمر في وحدة التحكم:

    $ chroot $MYLIN/usr/bin/env –i

    >الصفحة الرئيسية=/مصطلح الجذر=$TERM PS1='u:w$'

    > المسار=/bin: /usr/bin: /sbin: /usr/sbin: /stat/sbin

    >/stat/bin/bash --login

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

    لضمان عمل بعض البرامج، تحتاج إلى تثبيت نظام ملفات proc على النظام الجديد.

    $ جبل بروك /proc -t proc

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

    أثناء الإنشاء، حددنا المعلمة "--prefix=$MYLIN/stat"، لذلك عند تغيير الجذر، ستنتهي جميع الحزم المبنية بشكل ثابت في الدليل /stat لقسم نظام التشغيل الجديد.

    لذلك، قم بفك ضغط أرشيف glibc-2.x.x.tar.gz (على سبيل المثال، في الدليل /usr/src/) وانتقل إلى دليل glibclinuxthreads. سيتعين علينا تصحيح كود المصدر قليلاً نظرًا لحقيقة أنه في هذه المرحلة من المستحيل تحديد المستخدم بالاسم في النظام (على وجه التحديد بسبب عدم وجود glibc والمكتبات الأخرى)، وحقيقة أنه لتثبيت glibc عليك بحاجة إلى مترجم بيرل، الذي ليس لدينا.

    نحن نستبدل اسم المستخدم الجذر في تسجيل الدخول/Makefile بـ uid الخاص به، أي 0، ويجب استبدال المتغير $PERL في malloc/Makefile بالمسار إلى المترجم - /usr/bin/Perl - وسوف ببساطة يتم تجاهلها أثناء التكوين.

    $ /usr/src/glibc-2.x.x/configure --prefix=/usr --enable-add-ons --libexecdir=/usr/bin &&

    & يصنع

    وقم بالتثبيت

    $ جعل البيانات المحلية/التثبيت المحلي

    $ /stat/bash --login

    إذا فعلت كل شيء بشكل صحيح، فسيتم تجميع glibc، وسيظهر "الجذر" أخيرًا في الموجه، ويمكنك إعادة ترجمة جميع البرامج ديناميكيًا.

    لنكمل تثبيت النواة:

    $ جعل Modules_install

    $ قم بالتثبيت

    لنقل النواة الجديدة إلى الدليل /boot، قم بتشغيل أمر آخر:

    $ قم بإلغاء التثبيت

    نقوم بجمع كافة البرامج المثبتة وبعض البرامج الجديدة، الآن بدون علامات التحويل البرمجي الثابتة. سنحتاج (في هذه المرحلة من المهم جدًا ألا ننسى تجميع كل ما هو مدرج أدناه) (انظر الجدول 1).

    الجدول 1. مجموعة الحزم المطلوبة للتجميع

    com.autoconf

    grep

    بيرل

    com.automake

    جروف

    سحق

    com.gzip

    com.procinfo

    bin86

    procps

    com.binutils

    أقل

    com.psmisc

    bzip2

    reiserfs-progs

    diffutils

    libtool

    e2fsprogs

    ليلو

    sh-utils

    ظل

    ملف

    يصنع

    sysklogd

    com.fileutils

    com.makedev

    sysvinit

    findutils

    صفحات الرجل

    ثني

    modutils

    texinfo

    البله

    ncurses

    com.textutils

    netkitbase

    util-linux

    الثور

    أدوات الشبكة

    الحصول على النص

    رقعة

    بعد إجراء إعادة الترجمة الديناميكية، يمكنك حذف الدليل باستخدام الحزم المبنية بشكل ثابت:

    $ rm -rf /stat

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

    التكوين الأولي للنظام

    قبل أن نبدأ الإعداد، ألاحظ أنه يجب إجراء جميع التغييرات في ملفات الدليل لنظام التشغيل الجديد، وليس النظام الأصلي.

    لضبط وقت النظام، قم بإنشاء ملف /etc/sysconfig/clock يحتوي على سطر واحد فقط:

    التوقيت العالمي = 0

    الآن ستعرض ساعة الكمبيوتر الوقت في منطقتك الزمنية - بشرط أن يتم ضبط القيمة الزمنية في BIOS بشكل صحيح.

    دعونا نعطي الكمبيوتر اسما:

    صدى "HOSTNAME=my_linux" > /etc/sysconfig/network

    سنشير الآن إلى الأقسام التي يجب أن يقوم النظام بتثبيتها عند التمهيد في /etc/fstab:

    # خيارات نوع FS لنقطة تثبيت نظام الملفات تفريغ ترتيب fsck

    /dev/hda5/ext3 الإعدادات الافتراضية 1 1

    /dev/hda3 مبادلة مبادلة pri=1 0 0

    proc /proc إعدادات proc الافتراضية 0 0

    بدلاً من /dev/hda3 و/dev/hda5، اكتب الأقسام الخاصة بك (الجذر والمبادلة)، وأكمل الملف، إذا لزم الأمر، بنقاط تحميل للأقسام الأخرى من محرك الأقراص الثابتة والأقراص المضغوطة.

    الآن دعونا نجعل نظامنا قابلاً للتمهيد.

    إذا كنت تستخدم توزيعات Linux أخرى، بالإضافة إلى LFS، فأنت الآن بحاجة إلى تسجيل الدخول إلى النظام القديم - للقيام بذلك، قم بتشغيل الأمر:

    $ الخروج

    بالفعل في نظام التشغيل الأصلي، قم بإضافة ما يلي إلى الملف /etc/lilo.conf:

    #LFS

    image=/boot/bzImage

    التسمية = lfs

    الجذر=

    يقرأ فقط

    من الواضح أن "/boot/bzImage" هو المسار إلى نواة النظام التي قمت بتجميعها، و"القسم" هو قسم القرص حيث يوجد الدليل الجذر.

    إذا كنت لا تخطط لاستخدام أنظمة تشغيل أخرى وتوزيعات Linux، فانتقل مباشرة إلى إعداد LILO في LFS.

    في هذه الحالة، سيبدو lilo.conf كما يلي:

    boot=/dev/hda

    التأخير = 40

    المدمج

    في جي ايه=عادي

    الجذر=/dev/hda1

    يقرأ فقط

    الصورة=/boot/zImage-2.6.12

    التسمية = لينكس

    قم بإجراء التغييرات اللازمة وفقًا للتكوين الخاص بك. نقوم بتحديث أداة تحميل التشغيل باستخدام الأمر:

    $ /sbin/lilo –v

    وإذا تمت جميع الخطوات السابقة بشكل صحيح سنجد أنفسنا في النظام الجديد. ومع ذلك، فإن مرحلة طويلة من الضبط "الدقيق" (ينبغي إيلاء اهتمام خاص لأمان النظام الجديد، لأن LFS افتراضيًا يبدو غير محمي تمامًا، مثل أي نظام تشغيل مثبت حديثًا) لا يزال أمامنا. لكن لديك بالفعل نسخة مجمعة ذاتيًا من Linux.

    ملاحظة

    لم يكن جيرارد بيكمانز هو الشخص الوحيد الذي فكر في إنشاء نظام Linux خاص به. مشروع آخر، BYOLinux، بقيادة جوناثان ثورب، توقف الآن عن تطويره، على الرغم من أن الوثائق التي كتبها لا تزال ذات صلة اليوم، لكنها ليست مفصلة مثل كتاب LFS ولم تتم ترجمتها إلى اللغة الروسية. والفرق الرئيسي بين طريقة جون هو أن مكتبة glibc يتم نقلها من النظام الأصلي إلى النظام الفرعي دون إعادة الترجمة؛ وهذا ليس بنفس الكفاءة، ولكنه يتجنب العديد من المشاكل أثناء التجميع. لدى بعض مستخدمي FreeBSD أيضًا الرغبة في الشعور وكأنهم مصمم نظام التشغيل.

    الآن أصبح هذا ممكنًا تمامًا - يوجد على http://ezine.daemonnews.org/200302/fbsdscratch.html مقال حول بناء FreeBSD من المصادر بالكامل - من التوزيعات إلى المنافذ، وبطريقة لا تشبه "إعادة البناء" المعتادة. للنظام، ولكنه مشابه لطريقة جيرارد بيكمان. حسنًا، الآن لديك نظامك الشخصي الفريد الذي يعتمد على Linux. إذا نشأت مشاكل، فابحث عن حلها في كتاب LFS، حيث يتم وصف كل شيء بالتفصيل هناك. أوصي أيضًا بتنزيل دليل مسؤول شبكة Linux من البوابة http://www.tldp.org؛ على الرغم من أنه لا يرتبط مباشرة بـ LFS، إلا أنه سيكون مفيدًا في مرحلة إعداد النظام. لا تنس أن كل برنامج يأتي أيضًا مع صفحات معلومات ومعلومات متنوعة، مصممة أيضًا لتسهيل الحياة على مستخدمي Linux.

    1. كتاب LFS باللغة الروسية – http://multilinux.sakh.com/lfs.
    2. البوابة الرسمية لمشروع LFS هي http://www.linuxfromscratch.org.
    3. بوابة ByoLinux - http://www.byolinux.org.
    4. مقالة حول FreeBSD من الصفر – http://ezine.daemonnews.org/200302/fbsdscratch.html.
    5. مقال حول تجميع نواة Linux - http://vikos.lrn.ru/MyLDP/kernel/kompil-2-6.html.
    6. بيرق أ. مراجعة Knoppix 3.7 الطبعة الروسية. – مجلة “مسؤول النظام” العدد 3 مارس 2005 – 4-6 ص. ().