محاكاة Linus Torvalds: قم بإنشاء نظام التشغيل الخاص بك من البداية (I)

بادئ ذي بدء ، علّق على أن هذه هي مقالتي الأولى وأتمنى أن تنال إعجابكم جميعًا.

لينوس تورفالس سعيد

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

في حالتي ، يتم استدعاء نظام التشغيل NextDivel. القرار الأول الذي يجب أن نتخذه بمجرد النظر في نظام التشغيل هو ما سيكون برنامج bootloader؟

يوجد هنا العديد من المتغيرات ، ويمكننا حتى إنشاء واحدة بأنفسنا ؛ ولكن في هذا البرنامج التعليمي سأستخدم GRUB، لأن معظمهم يعرفون شيئًا أكثر أو أقل عنه. نقوم بإنشاء مجلد سيكون جذر نظام التشغيل لدينا وهناك نقوم بإنشاء مجلد / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

هناك نقوم بإنشاء ملف grub.cfg على النحو التالي:

menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}

في هذا الملف رأينا كيف GRUB سيتم تحميل النواة الخاصة بنا ، في هذه الحالة ، في /next/START.ELF. الآن يجب أن نخلق نواة لدينا.

لهذا سنحتاج إلى الخليج y GAS (مجمع المشروع جنو، عادةً ما يأتي مع دول مجلس التعاون الخليجي). لذلك سنقوم بإنشاء النواة.

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

.text
.globl start
start:
jmp multiboot_entry
.align 4
multiboot_header:
.long 0x1BADB002
.long 0x00000003
.long -(0x1BADB002+0x00000003)
multiboot_entry:
movl $(stack + 0x4000), %esp
call NextKernel_Main
loop: hlt
jmp loop
.section ".bss"
.comm stack,0x4000

كل ما يتعلق بنظام التشغيل المتعدد هو ببساطة اتباع المواصفات ولا شيء آخر. سيبدأ كل شيء في البداية ، وسوف يستدعي multiboot_entry ، وسنقوم بتعريف رأس multiboot في أول 4k وسنضعه (مع movl).

لاحقًا نسمي NextKernel_Main وهي دالة النواة C. في الحلقة توقفنا لإيقاف الكمبيوتر. يجمع هذا مع:

as -o kernel.o -c kernel.asm

الآن سوف ندخل البرمجة في C. ستعتقد أن كل شيء الآن هو قطعة كعكة ، نضع printf en رئيسي وهذا كل شيء ، لقد فعلناه.

حسنًا ، لا ، منذ ذلك الحين printf y رئيسي إنها وظائف يحددها نظام التشغيل ، لكننا نقوم بإنشائها! يمكننا فقط استخدام الوظائف التي نحددها بأنفسنا.

في فصول لاحقة سأتحدث عن كيفية وضع مكتبة C الخاصة بنا (glibc ، bionic ، newlibc) ولكن من وقت لآخر. لقد ناقشنا أننا نريد وضع نص على الشاشة ، حسنًا سنرى كيف نفعل ذلك.

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

نقوم بإنشاء ملف يسمى NextKernel_Main.c بالمحتوى التالي:

int NextKernel_Main()
{
char *str = "NextDivel says Hello World", *ch;
unsigned short *vidmem = (unsigned short*) 0xb8000;
unsigned i;
for (ch = str, i = 0; *ch; ch++, i++)
vidmem[i] = (unsigned char) *ch | 0x0700;
return 0;
}

مع هذا نتلاعب مباشرة بالذاكرة وحرفًا بحرف نكتبه. نقوم بالتجميع عن طريق إلغاء تنشيط stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

إذا كنت قد وصلت إلى هذا الحد ، فستحتاج إلى تجربة نظام التشغيل الجديد تمامًا الآن ، لكننا لم ننتهي بعد. نحتاج إلى ملف صغير يخبر المترجم بمكان كل قسم في الملف. يتم ذلك باستخدام نص رابط. نقوم بإنشاء link.ld:

ENTRY(start)
SECTIONS
{
. = 0x00100000;
.multiboot_header :
{
*(.multiboot_header)
}
.text :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
data = .; _data = .; __data = .;
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}

بهذا نحدد موضع كل قسم ونقطة الدخول ، ابدأ ، التي حددناها في kernel.asm. الآن يمكننا توحيد كل هذا التلفيق:

gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

نقوم الآن بنسخ START.ELF إلى / التالي داخل المجلد الذي يحاكي جذر نظام التشغيل الخاص بنا. نذهب إلى المجلد الجذر لنظام التشغيل الجديد الخاص بنا باستخدام وحدة التحكم والتحقق من وجود ملفين: أحدهما /boot/grub/grub.cfg والآخر /next/START.ELF.

نذهب إلى الدليل العلوي وندعو أداة إنشاء ISO باستخدام GRUB يسمى نكش مكريسكي

grub-mkrescue -o nextdivel.iso nextroot

بمجرد القيام بذلك ، سيكون لدينا ملف ISO. يمكن فتح ملف ISO على أجهزة الكمبيوتر x86 (64 بت أيضًا) والأجهزة الافتراضية. لاختباره ، سأستخدم كيمو. نحن نتصل كيمو من سطر الأوامر:

qemu-system-i386 nextdivel.iso

ستبدأ سيبيوس وبعد ذلك سيكون لدينا GRUB. في وقت لاحق ، إذا كان كل شيء صحيحًا ، فسنرى عبارتنا.
ستعتقد أن هذا صعب ، أجبك ، نعم هو كذلك.

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

إذا كان شخص ما لا يريد نسخ كل شيء هنا ، فلدي مستودع في GitHub جيثب: (أكثر تفصيلاً) مع نظام التشغيل NextDivel. إذا كنت تريد تجميع ملفات NextDivel عليك فقط الحصول على git و cmake:

git clone https://github.com/AdrianArroyoCalle/next-divel
cd next-divel
mkdir build && cd build
cmake ..
make
make DESTDIR=next install
chmod +x iso.sh
./iso.sh
qemu-system-i386 nextdivel.iso

أنا أشجعك على التعاون في NextDivel إذا كان لديك الوقت والرغبة في إنشاء نظام تشغيل. ربما حتى أفضل من Linux ... سيخبرنا الوقت.


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   إيلاف قال

    :O

    1.    com.marianogaudix قال

      أخذ Torvalds نظام التشغيل Minix (المشتق من UNIX) إلى Andrew S. Tanenbaum وحسّنه.

      لقد خاض تانينباوم معركة مع لينوس ، وأهانوا بعضهم البعض. يقول Tanenbaum أن Microkernel هو المستقبل (HURD ، مخروط Minix الجديد Microkernel).

      http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html

  2.   إليوتيمي 3000 قال

    لقد كان هذا أفضل منشور رأيته حتى الآن على هذه المدونة. أنا بالفعل أريد أن أعرف ماذا أفعل.

  3.   كارلوس قال

    ينبهر

  4.   AXL قال

    مبهر حقا!!

  5.   روكونلينكس قال

    FUUUUUUA!
    إنها أكثر مشاركة رائعة رأيتها على الإطلاق. مبروك ادريان مقال عاهرة! مثيرة للاهتمام !!! 🙂

    1.    خواكين قال

      أنا اتفق. أتخيل هذا الموقف:
      مستخدم جنو / لينكس القوي (بوجه سعيد):
      "أنا أعرف بالفعل كيفية تجميع Gentoo"

      Nerd (بازدراء): "pff ، لقد قمت بإنشاء توزيعة خاصة بي ..."

      1.    com.desikoder قال

        نعم ، يمكنني إنشاء توزيعة Linux الخاصة بي. في الواقع ، أقوم بتطوير initramfs ونواة لـ linux المضمن. إن إنشاء نظام تشغيل ليس مماثلاً لتوزيعة لينكس. الأول أكثر صعوبة ، ويكاد يكون مستحيلًا ، والثاني ، كما قلت ، يمكن أن يكون أي شيء ، حتى Ubuntu مع تغيير الشعار xD. لذلك سأترك الأمر هكذا:

        مستخدم جنو / لينكس القوي (بوجه سعيد)
        - أعرف بالفعل كيفية تجميع Gentoo الخاص بي

        شبه الطالب الذي يذاكر كثيرا
        - Pff ، لقد اتبعت لينكس من البداية وقمت بعمل توزيعة خاصة بي

        الطالب الذي يذاكر كثيرا (مع موقف ازدراء)
        - pff ، لأنني قمت ببرمجة نواة في المجمع وفي C

        Saludos!

  6.   كرونوس قال

    هذا مثير للاهتمام بالنسبة لي ، في انتظار الفصول التالية.

  7.   أبيالمارتيل قال

    لقد رأيت هذا البرنامج التعليمي منذ بعض الوقت ، فهو مخصص لـ C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    شارع أدريان أرويو قال

      شكرا على الرابط ، سوف ألقي نظرة عليه.

  8.   خوسيه جيكوم قال

    أرغب في نظام تشغيل متوافق بنسبة 100٪ مع رسومات AMD: /

    1.    إيفان لينكس قال

      Windows

      1.    خوسيه جيكوم قال

        hahaha في Windows Catalyst لا يحتوي على دعم OpenGL ، على الرغم من أنه في Linux لا يمكنني استخدام كل القوة الرسومية التي سأستمر في انتظارها لأرى ما سيحدث!

        1.    بيني قال

          فقط انتظر الصمام للقضاء على السوق

  9.   KZKG ^ جارا قال

    مساهمة ساحرة ومثالية وممتازة ، تبدو وكأنها سلسلة رائعة من المشاركات 🙂

  10.   O_Pixote_O قال

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

  11.   thisnameisfalse قال

    Mooooooolaaa !!!!

  12.   نوردري قال

    مقالة جيدة جدًا ، ولكن هل أنت فضولي فقط لماذا لم تتبع مشروع Linux From Scratch؟

    تحياتي

    1.    شارع أدريان أرويو قال

      حسنًا ، Linux من Scratch جيد ، ويمكنك معرفة أنه ملكك ، لكنه ميكانيكي للغاية حقًا:
      -تحميل الخطوط
      -القبض عليهم
      - ترجمة
      -تثبيت
      -التالية
      هنا حتى لو كانت النتيجة أسوأ في النهاية ، يمكنك القول أنك قمت بمراجعة جميع الملفات.

    2.    com.desikoder قال

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

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

      Saludos!

  13.   كوكي قال

    uuuoooohh !! لم ألتقط أي مشاركة كما فعل هذا المنشور.
    الرجاء المتابعة 😀

  14.   لينكس قال

    أنا لا أعرف ما الخطأ:

    خطأ: لم يتم العثور على رأس متعدد التمهيد.
    خطأ تحتاج إلى تحميل النواة أولاً

    1.    شارع أدريان أرويو قال

      إذا كان هناك أي عزاء ، فقد ارتكبت نفس الخطأ. حاول استخدام المصادر الموجودة في GitHub ، فقد تم حل الخطأ بالفعل. على أي حال ، أعتقد أنه إذا قمت بتغيير الخط في grub.cfg من "multiboot /next/START.ELF" إلى "kernel /next/START.ELF" فقد يعمل. لا اعرف بالضبط.

      1.    مكبلاتانو قال

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

        خطأ: لم يتم العثور على رأس متعدد التمهيد.
        خطأ: لا يوجد kernel محمل

        1.    شارع أدريان أرويو قال

          هل تستخدم clang كمترجم؟ قم بتغييره لدول مجلس التعاون الخليجي
          هل تذكرت استخدام البرنامج النصي رابط؟ من الضروري أن يعرف الرابط (في حالتنا) مكان وضع كل شيء في الملف. في هذه الحالة ، يجب أن يكون رأس التشغيل المتعدد في البداية.
          هل تستخدم نظام CMake؟ إذا كنت تستخدمه أعتقد أنه لا يفشل.
          إذا لم ينجح الأمر معك ، سأحاول إيجاد حل آخر.

  15.   خورت قال

    [+100]
    رائعا !!!

  16.   invisible15 قال

    إنه رائع حقًا

  17.   تانراكس قال

    أخلع قبعتي. مشاركة رائعة. تهانينا.

  18.   رجل قال

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

    1.    شارع أدريان أرويو قال

      في هذه الحالة لن أفعل ذلك لأنه يتطلب الكثير من العمل وراءه ولكن هناك نظام تشغيل يسمى "is" يقوم بما تقوله. في الواقع ، سطر الأوامر هو JavaScript ويتم رسم النوافذ باستخدام وظائف JavaScript Canvas. قام مهندسو نينتندو بذلك وهو الآن مفتوح المصدر.

      http://code.google.com/p/es-operating-system/

      1.    رجل قال

        فالا ، شكرا على المعلومات 😀
        سألقي نظرة

  19.   باتودكس قال

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

    1.    ميغيل قال

      حتى الآن لم يُعرف أحد بأنه قد صنع شيئًا يمكن القول إنه نظام تشغيل لائق مصنوع من الصفر ، ولا حتى Linux Torvalds كما قلت في البداية ، حيث بدأ هذا من مصادر Unix وكل شيء آخر مؤلف شائع لدى أكثر من شخص ، الحياة قصيرة جدًا ولا يمكن تصور البدء من الصفر حقًا لأي شخص ، حتى لو كان العكس هو المطلوب ، يمكن إثباته في العديد من الأخطاء التي ارتكبت في النسخ واللصق بواسطة Linux Torvalds

      1.    سكارميجليون قال

        مصادر يونكس مغلقة ، استخدام minix ... وهو شيء آخر.

      2.    فيليبي روبينا قال

        ومن صنع QDOS ماذا؟
        كانت تقوم على شيء ما؟

  20.   تسلا قال

    من ما أراه ، من ليس لديه نظام التشغيل الخاص به لأنهم لا يريدون ذلك ، هههههههه.

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

    شكرا على المنشور!

  21.   مانويل ر قال

    لقد تركتني بوجه O_O ... بدون نية التقليل من مساهمات أي شخص ، إنها أكثر "مؤيدة" رأيتها مؤخرًا. مع تحياتي.

  22.   aitor_cz قال

    مقال جيد جدا ، أدريان. يرجى مواصلة…

  23.   mj قال

    هل تمزح في يوم كذبة أبريل؟ ، لا تقصد "محاكاة Linus Torvalds: قم بإنشاء نظام التشغيل الخاص بك من الصفر." لا أعتقد أنه من الصعب على أولئك الذين يتابعون مهنة في بعض معاهد التكنولوجيا أو الجامعات ؛ لكن بالنسبة لي ، فأنا آرتشر مبتدئ (هناك من يطلقون علينا "Noob" لكنني أعتبر نفسي أكثر من المبتدئين كسولًا إلى حد ما) وهذا يبدو وكأنه لا يخطو على الأرض. على أي حال ، هذه المادة تخلق الكثير من الفضول وبدون شك في الإعجاب واحترام محررها ، تهانينا ؛ أول شيء سأفعله هو محاولة فهم القليل على الأقل من هذه المادة القيمة.
    شكرًا لك Adrian Arroyo Calle ، العمل الممتاز والتوصيل النبيل للمعرفة.

  24.   بلير باسكال قال

    LEL وظيفة ممتازة ، استمر في ذلك.

  25.   f3niX قال

    يا لها من مشاركة رائعة، وهذا ما فاتني desde linux. رائع.

  26.   روبي قال

    منشور رائع ، شكرا جزيلا لك.
    لم أفهم ما يفعله ملف link.ld ، هل يمكن لأي شخص أن يشرحها لي؟

    1.    شارع أدريان أرويو قال

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

  27.   طويل قال

    كل ما تبذلونه من عظيم! في انتظار 7! ماذا لو كان لدي شك ، على سبيل المثال ، إذا أردت فقط تشغيل خوارزمية ، بدون نظام تشغيل ، كيف أعرف ما الذي يمكنني استخدامه وما الذي لا يمكنني استخدامه؟

    1.    شارع أدريان أرويو قال

      إذا كنت تستخدمه على هذا النحو ، فلن تتمكن من استخدام أي شيء من stdlib ، وهو ما يستخدمه الجميع عمليًا (لا يوجد malloc ، مجاني ، printf ، scanf ، strcmp ، إلخ). كل شيء يجب تنفيذه مباشرة من الذاكرة أو ASM. ربما سأوضح لك في فصل أعلى كيفية تثبيت مكتبة C لنظام التشغيل. إذا كنت تستخدم C ++ ، فلا يمكنك استخدام الاستثناءات وعوامل التشغيل الجديدة والحذف (وبالتأكيد المزيد).

    2.    سويشر قال

      كريو كيو هذا يمكن أن يعطيك فكرة أفضل عن كيفية القيام بذلك.

  28.   ستيفن قال

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

  29.   يوهان قال

    عزيزي لدي خطأ عند تنفيذ الأمر:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 خطأ في بناء الجملة
    collect2: خطأ: أرجع ld حالة خروج واحدة

    link.ld
    . = 0x00100000 ؛
    .multiboot_header: {
    * (. multiboot_header)
    }

    في السطر 5 لا أرى الخطأ ، هل شخص ما هو نفسه؟

    أنا أعمل مع أزيز ديبيان افتراضي في Virtualbox

    1.    جوليان رييس اسكريجاس قال

      أضف ال "؛" في نهاية * (. multiboot_header)

  30.   إريك أوريانا روميرو قال

    مبادرة ممتازة ، سأتابع فصول هذا المنشور بالتأكيد ، وأعتزم تعلم الكثير منها. شكرًا جزيلاً لك على الوقت الذي قضيته في تعليمنا. تفصيل واحد في هذا الصدد ، تجدر الإشارة إلى أن Linus Torvalds ليس منشئ أي نظام تشغيل ، لقد أنشأ Kernel لنظام GNU / Linux (الذي تم استخدامه في أنظمة تشغيل أخرى) ، والذي لا يزال يستحق العناء ، لكنه كذلك من المهم أن تنسب الفضل إلى Richard Stallman في إنشاء معظم نظام التشغيل.

    شكرا جزيلا لك على المدخلات وآمل أن تفكر في ملاحظتي.

  31.   جوليان رييس اسكريجاس قال

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

    خطأ: لم يتم العثور على رأس متعدد التمهيد.
    خطأ تحتاج إلى تحميل النواة أولاً

    لقد قمت بتحميل ما آخذه إلى الريبو على جيثب https://github.com/rkmax/GenyOS

    1.    مارتن فيلالبا قال

      نفس الشيء يحدث لي هل وجدت الحل؟

  32.   كارلوس قال

    سؤال بدأت في تقديم بناء الجملة ويخبرني سطر إدخال القائمة الأمر لم يتم العثور على من يمكنه إخباري بالسبب
    هذا ما افعله

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    إدخال القائمة: الأمر غير موجود

    1.    شارع أدريان أرويو قال

      لا يجب إدخال محتوى هذا المحتوى في سطر الأوامر ، ولكن في الملف الذي تقوم بإنشائه ويسمى grub.cfg

  33.   نوديتينو قال

    مقالة ممتازة شكرا لك!

  34.   ديفيد قال

    مذهل…!! إنه مثل الرابط المفقود تمامًا.

  35.   r.garciag قال

    أحب دروس محاكاة LInus Torvalds ، ولكن هناك خطوة واحدة لا أفهمها ، وهي ما يلي:
    نقوم الآن بنسخ START.ELF إلى / التالي داخل المجلد الذي يحاكي جذر نظام التشغيل الخاص بنا. نذهب إلى المجلد الجذر لنظام التشغيل الجديد الخاص بنا باستخدام وحدة التحكم والتحقق من وجود ملفين: أحدهما /boot/grub/grub.cfg والآخر /next/START.ELF.

    نذهب إلى الدليل العلوي وندعو أداة إنشاء ISO باستخدام GRUB تسمى grub-mkrescue

    هل يمكن لشخص أن يشرحها لي: ص

    1.    شارع أدريان أرويو قال

      ببساطة لإنشاء حد أدنى من ISO يمكن لـ GRUB تحميله ، نقوم بنسخ النواة إلى (/ من ISO ، أي مجلد) /next/START.ELF وملف تكوين GRUB إلى (/ من ISO ، أي مجلد) / التمهيد /grub/grub.cfg. بمجرد الانتهاء من ذلك ، لم نقم بعد بتثبيت GRUB على ISO وهناك أداة تساعد على إنشاء ISO من مجلد وتثبيت GRUB يسمى grub-mkrescue. ثم ننتهي أخيرًا بـ ISO قابل للتمهيد تم تثبيت GRUB عليه ، والذي يمكنه قراءة التكوين لتنفيذ START.ELF لاحقًا بشكل صحيح. لا أعرف ما إذا كنت قد شرحت نفسي ، ولكن ما نفعله هو نوع من نظام الملفات الخاطئ الذي ننشئ به ISO.

  36.   ميغيل خوسيه جيفارا أتينسيو قال

    رائع

  37.   مايكل مورينو قال

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

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

  38.   الشتاء الجندي 53 قال

    بلا شك يجب أن أفعله بالفعل في إجازة.

  39.   فيرمين قال

    هذا جيد وفي أي برنامج يتم تصميمه ورمزه
    من فضلك أعطني هذه الإجابة

  40.   داركميند قال

    عند التجميع من git أحصل على:

    [jmponce @ jar build] $ cmake ..
    - إنشاء دليل NextRoot
    - توليد نص ISO
    اجعل DESTDIR = التثبيت التالي
    ./iso.sh
    - تم العثور على Doxygen: / usr / bin / doxygen (الإصدار الموجود "1.8.9")
    - تم التهيئة
    - تم التوليد
    - تمت كتابة ملفات الإنشاء إلى: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    مسح تبعيات الهدف START.ELF
    [7٪] إنشاء كائن ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100٪] إنشاء كائن CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    ربط CXX ​​القابل للتنفيذ START.ELF
    / usr / bin / ld: غير متوافق /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a تم تخطيه أثناء البحث عن -lgcc
    / usr / bin / ld: لا يمكن العثور على -lgcc
    collect2: خطأ: إرجاع حالة الخروج 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: تعليمات فاشلة للهدف 'src / START.ELF'
    جعل [2]: *** [src / START.ELF] خطأ 1
    CMakeFiles / Makefile2: 106: تعليمات فاشلة للهدف 'src / CMakeFiles / START.ELF.dir / all'
    جعل [1]: *** [src / CMakeFiles / START.ELF.dir / all] خطأ 2
    ملف Makefile: 117: فشل في التعليمات الخاصة بالهدف "الكل"
    جعل: *** [الكل] خطأ 2

    1.    شارع أدريان أرويو قال

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

      1.    رونالدو رودريغيز قال

        لدي 32 بت ونفس الخطأ يظهر ، هل تقصد نظام التشغيل أو البنية؟ لي هو 64 بت ، لكني أستخدم 32 بت Ubuntu ، لا تسأل ، مشاكل مالية ، مع هذا أقول كل شيء.

  41.   خورخي قال

    موضوع ممتاز ، في انتظار نطاق أكبر. في صحتك

  42.   جون قال

    عظيم أتمنى المزيد

  43.   سويد بيريز قال

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

    "Grub-mkrescue: تحذير: لا يدعم xorriso" –grub2-boot-info ". تم تعطيل بعض الميزات. استخدم xorriso 1.2.9 أو أحدث ..
    grub-mkrescue: تحذير: لا يدعم xorriso "–grub2-boot-info". صورة kernel الخاصة بك كبيرة جدًا. تم تعطيل تمهيد القرص. استخدم xorriso 1.2.9 أو أحدث .. »
    ليس لدي أي فكرة حقًا لأنني أعرف الكثير عن التطبيقات والشبكات ولكني لا أعرف أي شيء عن اليرقة

    1.    شارع أدريان أرويو قال

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

      1.    سويد بيريز قال

        أستخدم xubuntu 14.04lts وأحاول تشغيل xorriso لكن الغلاف يخبرني أنه لا يمكن العثور عليه وحصلت على apt-get install xorriso على الرغم من أنني توقعت بصدق بعض الاستجابة لأنني كانت لدي تجربة سيئة في تثبيت الأشياء التي لا أعرفها في linux hehe. سأقوم بتحديثه الآن وأخبرك بما حدث

      2.    شارع أدريان أرويو قال

        ثم قم بتثبيت xorriso من مركز البرامج أو ببساطة من المحطة ، قم بتنفيذ "sudo apt-get install xorriso"

      3.    سويد بيريز قال

        لقد فعلت بالفعل كل ما قلته لي وبواسطة كل من git وأنا أحصل على xorriso 1.3.2: RockRidge file manipulator ، مشروع libburnia.

        محرك الأقراص الحالي: -outdev 'stdio: nextdivel.iso'
        تيار الوسائط: ملف stdio ، قابل للكتابة
        حالة الوسائط: فارغة
        ملخص الوسائط: 0 جلسات ، 0 كتل بيانات ، 0 بيانات ، 1901 متر مجانًا
        تمت الإضافة إلى صورة ISO: الدليل '/'='/tmp/grub.OEqSzV'
        xorriso: تحديث: تمت إضافة 546 ملفًا في ثانية واحدة
        xorriso: فشل: لا يمكن تحديد سمات الملف المصدر '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': لا يوجد مثل هذا الملف أو الدليل
        xorriso: تحديث: تمت إضافة 546 ملفًا في ثانية واحدة
        xorriso: المجهض: -abort_on 'FAILURE' واجه 'FAILURE'
        وسروال قصير لا أفهم أن بنيتي هي /nextroot/boot/grub/grub.cfg و nextroot / next / START.ELF

      4.    سويد بيريز قال

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

      5.    إريك قال

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

        لا يوجد جهاز تمهيد.

  44.   خوسيه قال

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

    1.    شارع أدريان أرويو قال

      تقوم بإنشاء الملف grub.cfg باستخدام أي محرر نصوص ويجب عليك حفظه في PROJECT_FOLDER / boot / grub / grub.cfg

  45.   جوهوازانو قال

    مرحباً أدريان ، أولاً وقبل كل شيء ، أهنئكم وأشكركم على مساهمتكم.

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

    $ as -o kernel.o -c kernel.asm
    باش: مثل: الأمر غير موجود ...
    الأوامر المماثلة هي:
    'sa'
    "ac"

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

    شكرا مقدما

    1.    شارع أدريان أرويو قال

      يجب عليك تثبيت GAS حتى أتمكن من رؤية رمز الخطأ. ليس لدي فيدورا في متناول اليد ولكن من الناحية النظرية ، إذا قمت بتثبيت برنامج gcc-c ++ ، فسوف تقوم بتثبيت مجموعة GCC بأكملها وعادةً ما تأتي مع GNU As.

  46.   جاستون راميريز قال

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

  47.   تيريسيتا ديل خيسوس ناه سانشيز قال

    شكرا جزيلا على المساعدة الرائعة لك….

  48.   جكي قال

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

  49.   ركب قال

    مرحبا تلقيت خطأ في اليرقة يقول
    خطأ: الملف /next/START.ELF غير موجود
    خطأ: تحتاج إلى تحميل النواة أولاً

    هل يمكنك مساعدتي والبحث في Google ولكن لا يمكنني العثور عليه

  50.   إنريكي أفيلا قال

    من فضلك ، كيف يمكنني أن أجعلها تظهر رسالة HELLO WORLD؟ أنا مبتدئ وما زلت لا أعرف ما يكفي

  51.   كارلوس جويررو ألفاريز قال

    يحدث لي ما يلي:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: لا يمكن استخدام النقل R_X86_64_32 مقابل الرمز "المكدس" عند إنشاء كائن PIE ؛ إعادة التحويل البرمجي باستخدام -fPIE
    / usr / bin / ld: فشل الارتباط النهائي: قسم غير قابل للتمثيل على الإخراج
    collect2: خطأ: أرجع ld حالة خروج واحدة