بادئ ذي بدء ، علّق على أن هذه هي مقالتي الأولى وأتمنى أن تنال إعجابكم جميعًا.
في هذه السلسلة سنقوم بمحاكاة لينوس تورفالدس، سنقوم بإنشاء نظام التشغيل الخاص بنا من 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 ... سيخبرنا الوقت.
:O
أخذ 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
لقد كان هذا أفضل منشور رأيته حتى الآن على هذه المدونة. أنا بالفعل أريد أن أعرف ماذا أفعل.
ينبهر
مبهر حقا!!
FUUUUUUA!
إنها أكثر مشاركة رائعة رأيتها على الإطلاق. مبروك ادريان مقال عاهرة! مثيرة للاهتمام !!! 🙂
أنا اتفق. أتخيل هذا الموقف:
مستخدم جنو / لينكس القوي (بوجه سعيد):
"أنا أعرف بالفعل كيفية تجميع Gentoo"
Nerd (بازدراء): "pff ، لقد قمت بإنشاء توزيعة خاصة بي ..."
نعم ، يمكنني إنشاء توزيعة Linux الخاصة بي. في الواقع ، أقوم بتطوير initramfs ونواة لـ linux المضمن. إن إنشاء نظام تشغيل ليس مماثلاً لتوزيعة لينكس. الأول أكثر صعوبة ، ويكاد يكون مستحيلًا ، والثاني ، كما قلت ، يمكن أن يكون أي شيء ، حتى Ubuntu مع تغيير الشعار xD. لذلك سأترك الأمر هكذا:
مستخدم جنو / لينكس القوي (بوجه سعيد)
- أعرف بالفعل كيفية تجميع Gentoo الخاص بي
شبه الطالب الذي يذاكر كثيرا
- Pff ، لقد اتبعت لينكس من البداية وقمت بعمل توزيعة خاصة بي
الطالب الذي يذاكر كثيرا (مع موقف ازدراء)
- pff ، لأنني قمت ببرمجة نواة في المجمع وفي C
Saludos!
هذا مثير للاهتمام بالنسبة لي ، في انتظار الفصول التالية.
لقد رأيت هذا البرنامج التعليمي منذ بعض الوقت ، فهو مخصص لـ C ++
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
شكرا على الرابط ، سوف ألقي نظرة عليه.
أرغب في نظام تشغيل متوافق بنسبة 100٪ مع رسومات AMD: /
Windows
hahaha في Windows Catalyst لا يحتوي على دعم OpenGL ، على الرغم من أنه في Linux لا يمكنني استخدام كل القوة الرسومية التي سأستمر في انتظارها لأرى ما سيحدث!
فقط انتظر الصمام للقضاء على السوق
مساهمة ساحرة ومثالية وممتازة ، تبدو وكأنها سلسلة رائعة من المشاركات 🙂
بوآه أود أن أعرف كيف أبرمج لمساعدتك ، ببساطة كطريقة للتدرب على المعرفة التي تتعلمها وتساعدها. في الوقت الحالي ، أترك لك الشعار للفت الانتباه إلى المشروع بمجرد الانتهاء منه "استخدم NextDivel ، تبدو الإباحية هي نفسها (أو أفضل)." ، سوف تكتسح xD.
Mooooooolaaa !!!!
مقالة جيدة جدًا ، ولكن هل أنت فضولي فقط لماذا لم تتبع مشروع Linux From Scratch؟
تحياتي
حسنًا ، Linux من Scratch جيد ، ويمكنك معرفة أنه ملكك ، لكنه ميكانيكي للغاية حقًا:
-تحميل الخطوط
-القبض عليهم
- ترجمة
-تثبيت
-التالية
هنا حتى لو كانت النتيجة أسوأ في النهاية ، يمكنك القول أنك قمت بمراجعة جميع الملفات.
كما هو واضح من تعليقي السابق ، لأنه لا يحتوي على نفس المستوى من التعقيد. علاوة على ذلك ، فإن لينكس من الصفر ليس في الحقيقة ، خلافًا لاسمه ، إنشاء نظام من نقطة الصفر. إنشاء نظام من نقطة الصفر هو برمجته بنفسك ، وكتابة النواة الخاصة بك ، وليس نواة لينكس ، وإن أمكن حتى أداة تحميل التشغيل الخاصة بك بدلاً من نكش ، ليلو ، سيسلينكس ، إلخ. على الرغم من أن LFS ليس بالأمر الهين ومعقدًا للغاية ، إلا أنه لا يقترب حتى من برمجة النواة الخاصة بك ...
بالإضافة إلى ذلك ، أتفق مع AdrianArroyo Calle على أنه ميكانيكي للغاية ، لقد قرأته في وقت ما وانتهى بك الأمر إلى الاستسلام في الصفحة السادسة ، ويخبروك أيضًا باستخدام إصدارات الحزم لأنه بخلاف ذلك لا تعمل التعليمات (وهذا يدل على عدم المرونة ، فى رايى ). أعتقد أنه من الأفضل أن يكون لديك شيء من فكرتك الخاصة ، وتجميع الحزم التي تريدها ، وحتى برمجة بعضها ، وتجميع نواة لينكس وبسلام.
Saludos!
uuuoooohh !! لم ألتقط أي مشاركة كما فعل هذا المنشور.
الرجاء المتابعة 😀
أنا لا أعرف ما الخطأ:
خطأ: لم يتم العثور على رأس متعدد التمهيد.
خطأ تحتاج إلى تحميل النواة أولاً
إذا كان هناك أي عزاء ، فقد ارتكبت نفس الخطأ. حاول استخدام المصادر الموجودة في GitHub ، فقد تم حل الخطأ بالفعل. على أي حال ، أعتقد أنه إذا قمت بتغيير الخط في grub.cfg من "multiboot /next/START.ELF" إلى "kernel /next/START.ELF" فقد يعمل. لا اعرف بالضبط.
بادئ ذي بدء ، المدخل الرائع
أواجه نفس المشكلة في تحميل النواة من اليرقة. حتى باستخدام مصادر GitHub أو تغيير نظام التشغيل المتعدد لـ kernel ...
خطأ: لم يتم العثور على رأس متعدد التمهيد.
خطأ: لا يوجد kernel محمل
هل تستخدم clang كمترجم؟ قم بتغييره لدول مجلس التعاون الخليجي
هل تذكرت استخدام البرنامج النصي رابط؟ من الضروري أن يعرف الرابط (في حالتنا) مكان وضع كل شيء في الملف. في هذه الحالة ، يجب أن يكون رأس التشغيل المتعدد في البداية.
هل تستخدم نظام CMake؟ إذا كنت تستخدمه أعتقد أنه لا يفشل.
إذا لم ينجح الأمر معك ، سأحاول إيجاد حل آخر.
[+100]
رائعا !!!
إنه رائع حقًا
أخلع قبعتي. مشاركة رائعة. تهانينا.
واها!
سيكون من الرائع أن تتمكن من فتح التطبيقات التي تم إنشاؤها في HTML5 و Javascript دون الحاجة إلى استخدام متصفح ، هل هذا ممكن؟
أنا أتحدث عنهم مثل التطبيقات المحلية.
لذلك سيكون من السهل البرمجة لنظام التشغيل هذا 😀
في هذه الحالة لن أفعل ذلك لأنه يتطلب الكثير من العمل وراءه ولكن هناك نظام تشغيل يسمى "is" يقوم بما تقوله. في الواقع ، سطر الأوامر هو JavaScript ويتم رسم النوافذ باستخدام وظائف JavaScript Canvas. قام مهندسو نينتندو بذلك وهو الآن مفتوح المصدر.
http://code.google.com/p/es-operating-system/
فالا ، شكرا على المعلومات 😀
سألقي نظرة
من يستطيع أن يصنع نظام التشغيل الخاص به يمكن أن يموت بسلام ، منذ المستوى الفكري الذي يجب عليه تحقيقه به ؛ يجعلك تستغني عن الجنة أو الجحيم.
قطعة من الإرسال.
حتى الآن لم يُعرف أحد بأنه قد صنع شيئًا يمكن القول إنه نظام تشغيل لائق مصنوع من الصفر ، ولا حتى Linux Torvalds كما قلت في البداية ، حيث بدأ هذا من مصادر Unix وكل شيء آخر مؤلف شائع لدى أكثر من شخص ، الحياة قصيرة جدًا ولا يمكن تصور البدء من الصفر حقًا لأي شخص ، حتى لو كان العكس هو المطلوب ، يمكن إثباته في العديد من الأخطاء التي ارتكبت في النسخ واللصق بواسطة Linux Torvalds
مصادر يونكس مغلقة ، استخدام minix ... وهو شيء آخر.
ومن صنع QDOS ماذا؟
كانت تقوم على شيء ما؟
من ما أراه ، من ليس لديه نظام التشغيل الخاص به لأنهم لا يريدون ذلك ، هههههههه.
الآن بجدية ، مثير جدا للاهتمام! إن الكثير يتجاوز معرفتي المحدودة بالبرمجة ، لكنني سأقرأ الأجزاء الأخرى من هذه السلسلة بفارغ الصبر.
شكرا على المنشور!
لقد تركتني بوجه O_O ... بدون نية التقليل من مساهمات أي شخص ، إنها أكثر "مؤيدة" رأيتها مؤخرًا. مع تحياتي.
مقال جيد جدا ، أدريان. يرجى مواصلة…
هل تمزح في يوم كذبة أبريل؟ ، لا تقصد "محاكاة Linus Torvalds: قم بإنشاء نظام التشغيل الخاص بك من الصفر." لا أعتقد أنه من الصعب على أولئك الذين يتابعون مهنة في بعض معاهد التكنولوجيا أو الجامعات ؛ لكن بالنسبة لي ، فأنا آرتشر مبتدئ (هناك من يطلقون علينا "Noob" لكنني أعتبر نفسي أكثر من المبتدئين كسولًا إلى حد ما) وهذا يبدو وكأنه لا يخطو على الأرض. على أي حال ، هذه المادة تخلق الكثير من الفضول وبدون شك في الإعجاب واحترام محررها ، تهانينا ؛ أول شيء سأفعله هو محاولة فهم القليل على الأقل من هذه المادة القيمة.
شكرًا لك Adrian Arroyo Calle ، العمل الممتاز والتوصيل النبيل للمعرفة.
LEL وظيفة ممتازة ، استمر في ذلك.
يا لها من مشاركة رائعة، وهذا ما فاتني desde linux. رائع.
منشور رائع ، شكرا جزيلا لك.
لم أفهم ما يفعله ملف link.ld ، هل يمكن لأي شخص أن يشرحها لي؟
يخبر ملف link.ld الرابط (في هذه الحالة ld) حيث يجب أن يكون كل جزء من الكود في الملف الناتج. نحدد أيضًا نقطة الدخول نظرًا لأنه ليس لدينا نظام تشغيل لا يمكننا استخدام main كبرنامج عادي ، في هذه الحالة نختار وظيفة البدء.
كل ما تبذلونه من عظيم! في انتظار 7! ماذا لو كان لدي شك ، على سبيل المثال ، إذا أردت فقط تشغيل خوارزمية ، بدون نظام تشغيل ، كيف أعرف ما الذي يمكنني استخدامه وما الذي لا يمكنني استخدامه؟
إذا كنت تستخدمه على هذا النحو ، فلن تتمكن من استخدام أي شيء من stdlib ، وهو ما يستخدمه الجميع عمليًا (لا يوجد malloc ، مجاني ، printf ، scanf ، strcmp ، إلخ). كل شيء يجب تنفيذه مباشرة من الذاكرة أو ASM. ربما سأوضح لك في فصل أعلى كيفية تثبيت مكتبة C لنظام التشغيل. إذا كنت تستخدم C ++ ، فلا يمكنك استخدام الاستثناءات وعوامل التشغيل الجديدة والحذف (وبالتأكيد المزيد).
كريو كيو هذا يمكن أن يعطيك فكرة أفضل عن كيفية القيام بذلك.
مرحبًا ، منذ حوالي 5 سنوات ، تابعت منشورًا مشابهًا وقمت بتطوير microkernel الذي يبدأ بالطريقة نفسها ، ولديه بعض الجوانب للتحسين ، ولكنه قد يثير اهتمامك ، فهو يعمل في الوضع المحمي ، وينفذ مهام متعددة ويؤدي محاكاة افتراضية للذاكرة ، وقد عملت مؤخرًا على ذلك برنامج تشغيل القرص ومحرك الأقراص المضغوطة لجعله قابلاً للتثبيت وليس فقط التشغيل على قرص مضغوط مباشر ... تحياتي.
عزيزي لدي خطأ عند تنفيذ الأمر:
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
أضف ال "؛" في نهاية * (. multiboot_header)
مبادرة ممتازة ، سأتابع فصول هذا المنشور بالتأكيد ، وأعتزم تعلم الكثير منها. شكرًا جزيلاً لك على الوقت الذي قضيته في تعليمنا. تفصيل واحد في هذا الصدد ، تجدر الإشارة إلى أن Linus Torvalds ليس منشئ أي نظام تشغيل ، لقد أنشأ Kernel لنظام GNU / Linux (الذي تم استخدامه في أنظمة تشغيل أخرى) ، والذي لا يزال يستحق العناء ، لكنه كذلك من المهم أن تنسب الفضل إلى Richard Stallman في إنشاء معظم نظام التشغيل.
شكرا جزيلا لك على المدخلات وآمل أن تفكر في ملاحظتي.
لقد كنت العبث بالموضوع لفترة من الوقت ، أصبحت مهتمة بمجرد أن قرأت العنوان الرئيسي. لكن الرسالة تستمر في الظهور
خطأ: لم يتم العثور على رأس متعدد التمهيد.
خطأ تحتاج إلى تحميل النواة أولاً
لقد قمت بتحميل ما آخذه إلى الريبو على جيثب https://github.com/rkmax/GenyOS
نفس الشيء يحدث لي هل وجدت الحل؟
سؤال بدأت في تقديم بناء الجملة ويخبرني سطر إدخال القائمة الأمر لم يتم العثور على من يمكنه إخباري بالسبب
هذا ما افعله
BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
إدخال القائمة: الأمر غير موجود
لا يجب إدخال محتوى هذا المحتوى في سطر الأوامر ، ولكن في الملف الذي تقوم بإنشائه ويسمى grub.cfg
مقالة ممتازة شكرا لك!
مذهل…!! إنه مثل الرابط المفقود تمامًا.
أحب دروس محاكاة LInus Torvalds ، ولكن هناك خطوة واحدة لا أفهمها ، وهي ما يلي:
نقوم الآن بنسخ START.ELF إلى / التالي داخل المجلد الذي يحاكي جذر نظام التشغيل الخاص بنا. نذهب إلى المجلد الجذر لنظام التشغيل الجديد الخاص بنا باستخدام وحدة التحكم والتحقق من وجود ملفين: أحدهما /boot/grub/grub.cfg والآخر /next/START.ELF.
نذهب إلى الدليل العلوي وندعو أداة إنشاء ISO باستخدام GRUB تسمى grub-mkrescue
هل يمكن لشخص أن يشرحها لي: ص
ببساطة لإنشاء حد أدنى من ISO يمكن لـ GRUB تحميله ، نقوم بنسخ النواة إلى (/ من ISO ، أي مجلد) /next/START.ELF وملف تكوين GRUB إلى (/ من ISO ، أي مجلد) / التمهيد /grub/grub.cfg. بمجرد الانتهاء من ذلك ، لم نقم بعد بتثبيت GRUB على ISO وهناك أداة تساعد على إنشاء ISO من مجلد وتثبيت GRUB يسمى grub-mkrescue. ثم ننتهي أخيرًا بـ ISO قابل للتمهيد تم تثبيت GRUB عليه ، والذي يمكنه قراءة التكوين لتنفيذ START.ELF لاحقًا بشكل صحيح. لا أعرف ما إذا كنت قد شرحت نفسي ، ولكن ما نفعله هو نوع من نظام الملفات الخاطئ الذي ننشئ به ISO.
رائع
حسنًا ، انظر حقًا إلى نظام جديد ليس كثيرًا ولكن إذا قمت بتحسين نظام لينكس ، على سبيل المثال ، فقم بإنشاء نواة لينكس مع مكون خادم يعمل كنواة صغيرة إذا كنت ترغب في ذلك ، أي بنية exo مع سلوك النواة الصغيرة التي ستكون فائقة ولينكس.
والشيء الآخر هو أنني لست خبيرًا في البرمجة ، فقط عدد قليل من c ++ جبني وبعض جافا ، سيكون كافياً بالنسبة لي أن أعطي برنامج Linux kernel وحدة نمطية ، وأخذها ، وتعديلها ، إلخ.
بلا شك يجب أن أفعله بالفعل في إجازة.
هذا جيد وفي أي برنامج يتم تصميمه ورمزه
من فضلك أعطني هذه الإجابة
عند التجميع من 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
يبدو أن الخطأ هو أنه لا يمكن العثور على llibgcc نظرًا لأن لديك إصدار 64 بت وحاليًا يتم إجبار نظام الإنشاء على استخدام 32 بت. يجب عليك تثبيت حزمة التوافق على توزيعة أو أفضل ، استخدم نظام 32 بت.
لدي 32 بت ونفس الخطأ يظهر ، هل تقصد نظام التشغيل أو البنية؟ لي هو 64 بت ، لكني أستخدم 32 بت Ubuntu ، لا تسأل ، مشاكل مالية ، مع هذا أقول كل شيء.
موضوع ممتاز ، في انتظار نطاق أكبر. في صحتك
عظيم أتمنى المزيد
مرحبًا ، أنا سفير شاب يريد إنشاء نظام تشغيل يدعم جميع البرامج والأنظمة الأساسية حتى لا يضطر المطورون إلى امتلاك آلات أو تطبيقات أو برامج قوية على جهاز كمبيوتر.
لهذا السبب أنا مهتم بهذا المنشور ولكن عندما أقوم بتنزيل git الخاص بك أو محاولة إنشائه ، كل شيء يعمل حتى أقوم بتنفيذ الأمر.
"Grub-mkrescue: تحذير: لا يدعم xorriso" –grub2-boot-info ". تم تعطيل بعض الميزات. استخدم xorriso 1.2.9 أو أحدث ..
grub-mkrescue: تحذير: لا يدعم xorriso "–grub2-boot-info". صورة kernel الخاصة بك كبيرة جدًا. تم تعطيل تمهيد القرص. استخدم xorriso 1.2.9 أو أحدث .. »
ليس لدي أي فكرة حقًا لأنني أعرف الكثير عن التطبيقات والشبكات ولكني لا أعرف أي شيء عن اليرقة
قد تحتاج إلى تحديث برنامج xorriso على توزيعتك. ما التوزيعة والإصدار الذي تستخدمه؟
أستخدم xubuntu 14.04lts وأحاول تشغيل xorriso لكن الغلاف يخبرني أنه لا يمكن العثور عليه وحصلت على apt-get install xorriso على الرغم من أنني توقعت بصدق بعض الاستجابة لأنني كانت لدي تجربة سيئة في تثبيت الأشياء التي لا أعرفها في linux hehe. سأقوم بتحديثه الآن وأخبرك بما حدث
ثم قم بتثبيت xorriso من مركز البرامج أو ببساطة من المحطة ، قم بتنفيذ "sudo apt-get install xorriso"
لقد فعلت بالفعل كل ما قلته لي وبواسطة كل من 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
شكرًا ، أنا على استعداد للمضي قدمًا ، ساعدني أحد الأصدقاء وأخبرني أن الخطأ الذي فعلته هو تنظيم الدليل ، لذلك قمت بتسويته وهذا كل شيء.
معذرةً ، هل يمكن أن تخبرني ما الإجراء الذي قمت به لأنني لم أحصل على أي خطأ للتمهيد: لا يوجد مثل هذا الملف أو الدليل
لا يوجد جهاز تمهيد.
في صحتك! كنت سأطلب منك معروفًا إذا كان بإمكانك إرسال بريد إلكتروني إليّ بما تشرحه هنا ، لقد أصبت ببعض الارتباك وأحتاج إلى مقارنة ما لدي مع ما تشرحه ، ربما ما هو غير واضح بالنسبة لي هو ما إذا كان إنشاء اليرقة. cfg يتم في دول مجلس التعاون الخليجي أو أين بالضبط؟ شكرا جزيلا صديقي!
تقوم بإنشاء الملف grub.cfg باستخدام أي محرر نصوص ويجب عليك حفظه في PROJECT_FOLDER / boot / grub / grub.cfg
مرحباً أدريان ، أولاً وقبل كل شيء ، أهنئكم وأشكركم على مساهمتكم.
أنت تعلم أنني أفعل هذا من أجل ممارسة وبدأت في تجميعها معًا بعد التدريس الخاص بك ، ولكن بعد البدء وجدت الخطأ الأول
$ as -o kernel.o -c kernel.asm
باش: مثل: الأمر غير موجود ...
الأوامر المماثلة هي:
'sa'
"ac"
أنا أعمل على فيدورا 20 ، ولا يمكنني إيجاد حل في هذا الصدد ، سأكون ممتنًا لتوجيهاتكم حول ما إذا كان ينبغي علي تغيير شيء ما في دول مجلس التعاون الخليجي أو الغاز
شكرا مقدما
يجب عليك تثبيت GAS حتى أتمكن من رؤية رمز الخطأ. ليس لدي فيدورا في متناول اليد ولكن من الناحية النظرية ، إذا قمت بتثبيت برنامج gcc-c ++ ، فسوف تقوم بتثبيت مجموعة GCC بأكملها وعادةً ما تأتي مع GNU As.
أنا معك ، أعرف شيئًا عن C ++ ، C # (على الرغم من أن هذا الأخير ليس مفيدًا جدًا في هذا الأمر) الشيء السيئ هو أنني ما زلت أفتقر إلى الخبرة ، ولا أتعامل أبدًا مع لغة C ، منشورك رائع ، ليس لدي الكثير لأقوله ، إذا كان لدي وقت أراه. شكرا.
شكرا جزيلا على المساعدة الرائعة لك….
أنا أحب لينكس ، إنها أفضل منطقة موجودة ، الحقيقة بالنسبة للنوافذ الخاصة بي هي قمامة لدرجة أنني أعلم أن منشئ لينكس هو منشئ النوافذ
مرحبا تلقيت خطأ في اليرقة يقول
خطأ: الملف /next/START.ELF غير موجود
خطأ: تحتاج إلى تحميل النواة أولاً
هل يمكنك مساعدتي والبحث في Google ولكن لا يمكنني العثور عليه
من فضلك ، كيف يمكنني أن أجعلها تظهر رسالة HELLO WORLD؟ أنا مبتدئ وما زلت لا أعرف ما يكفي
يحدث لي ما يلي:
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 حالة خروج واحدة