लिनुस टोरवाल्ड्स का अनुकरण करना: स्क्रैच (I) से अपना ऑपरेटिंग सिस्टम बनाना

सबसे पहले, टिप्पणी करें कि यह मेरा पहला लेख है और मुझे आशा है कि आप सभी को यह पसंद आएगा।

लिनुस तोरवल खुश

इस श्रृंखला में हम अनुकरण करने जा रहे हैं लीनुस Torvalds, हम 0. से अपना ऑपरेटिंग सिस्टम बनाने जा रहे हैं। इस पहले एपिसोड में हम बूट देखने जा रहे हैं और हम अपने कर्नेल से स्क्रीन पर एक टेक्स्ट डालेंगे।

मेरे मामले में ऑपरेटिंग सिस्टम कहा जाता है अगलाडिवेल। पहला निर्णय जो हमें ऑपरेटिंग सिस्टम पर विचार करते ही करना चाहिए, बूटलोडर क्या है?

यहाँ कई प्रकार हैं, और हम स्वयं भी बना सकते हैं; हालाँकि इस ट्यूटोरियल में मैं उपयोग करने जा रहा हूँ 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 गैस (परियोजना के कोडांतरक जीएनयू, आमतौर पर gcc के साथ आता है)। तो हम कर्नेल बनाने जा रहे हैं।

हम सबसे पहले एक फाइल बनाते हैं, जिसे कर्नेल कहा जाता है। इस फ़ाइल में हमारे कर्नेल के शुरुआती बिंदु होंगे और मल्टीबूट (कुछ बूटलोडर्स की एक विशेषता जैसे) को भी परिभाषित करेगा 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

मल्टीबूट से संबंधित सब कुछ बस विनिर्देशन का पालन करना है और कुछ नहीं। सब कुछ शुरू में शुरू होगा, इसे मल्टीबूट_एंट्री कहेंगे, हमने मल्टीबूट हेडर को पहले 4k में परिभाषित किया है और हम इसे (movl के साथ) डालेंगे।

बाद में हम नेक्स्टबर्न_मैन कहते हैं जो हमारा कर्नेल सी फ़ंक्शन है। लूप में हम कंप्यूटर को रोकने के लिए रुक जाते हैं। इसके साथ संकलित है:

as -o kernel.o -c kernel.asm

अब हम सी में प्रोग्रामिंग दर्ज करने जा रहे हैं। आप सोचेंगे कि अब सब कुछ केक का एक टुकड़ा है, हम एक डालते हैं printf en मुख्य और यह बात है, हमने यह किया है।

खैर नहीं, तब से printf y मुख्य वे कार्य हैं जो ऑपरेटिंग सिस्टम द्वारा परिभाषित किए गए हैं, लेकिन हम उन्हें बना रहे हैं! हम केवल उन कार्यों का उपयोग कर सकते हैं जिन्हें हम स्वयं परिभाषित करते हैं।

बाद के अध्यायों में मैं अपनी खुद की सी लाइब्रेरी (ग्लिबैक, बायोनिक, न्यूलिबिक) को कैसे रखा जाए, इस बारे में बात करूंगा। हमने बात की है कि हम टेक्स्ट को स्क्रीन पर रखना चाहते हैं, अच्छी तरह से हम देखेंगे कि हम इसे कैसे करते हैं।

दो विकल्प हैं, एक को कॉल करना है BIOS और दूसरा स्क्रीन मेमोरी को सीधे प्रबंधित करना है। हम बाद को करने जा रहे हैं क्योंकि यह सी से स्पष्ट है और यह हमें संरक्षित मोड में प्रवेश करने पर भी करने की अनुमति देगा।

हम निम्नलिखित सामग्री के साथ 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

यदि आपने इसे अभी तक बना लिया है, तो आप अपने ब्रांड-नए ऑपरेटिंग सिस्टम को आजमाना चाहेंगे, लेकिन हम अभी तक काम नहीं कर रहे हैं। हमें एक छोटी फ़ाइल की आवश्यकता है जो कंपाइलर को बताए कि फ़ाइल में प्रत्येक सेक्शन को कहाँ छोड़ना है। यह एक लिंकर स्क्रिप्ट के साथ किया जाता है। हम लिंक बनाते हैं।

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।

हम ऊपरी निर्देशिका में जाते हैं और GRUB नामक आईएसओ निर्माण उपयोगिता कहते हैं ग्रब-मर्क्रेस्क्यू

grub-mkrescue -o nextdivel.iso nextroot

एक बार जब हम यह कर लेते हैं तो हमारे पास ए आईएसओ। यह आईएसओ कंप्यूटर पर खोला जा सकता है x86 (64 बिट भी) और वर्चुअल मशीन। इसका परीक्षण करने के लिए, मैं उपयोग करने जा रहा हूं QEMU। हम फोन करते हैं QEMU कमांड लाइन से:

qemu-system-i386 nextdivel.iso

शुरू होगा सीबीआईओएस और बाद में हमारे पास होगा GRUB। बाद में अगर सब कुछ सही रहा तो हम अपना मुहावरा देखेंगे।
आप सोचेंगे कि यह मुश्किल है, मैं आपको जवाब देता हूं, हां यह है।

वास्तव में एक ऑपरेटिंग सिस्टम बनाना मुश्किल है और यह कि यह यहाँ कुछ भी उपयोगी नहीं है। भविष्य के अध्यायों में हम देखेंगे कि स्क्रीन पर रंगों को कैसे संभालना है, मेमोरी को आरक्षित करना है और यदि मैं कर सकता हूं, तो कीबोर्ड से डेटा कैसे प्राप्त करें।

अगर कोई यहाँ सब कुछ कॉपी नहीं करना चाहता है, तो मेरे पास एक रिपॉजिटरी है GitHub (अधिक विस्तृत) ऑपरेटिंग सिस्टम के साथ अगलाडिवेल। अगर आप संकलन करना चाहते हैं अगलाडिवेल आपको बस गिट और सेमीकिट करना होगा:

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 पर सहयोग करने के लिए प्रोत्साहित करता हूं। शायद लिनक्स से भी बेहतर ... समय बताएगा।


अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   इलाव कहा

    :O

    1.    मारियोनोगुडिक्स कहा

      टॉर्वाल्ड्स ने मिनिक्स ऑपरेटिंग सिस्टम (UNIX से प्राप्त) को एंड्रयू एस। तेनबाउम में ले गए और इसमें सुधार किया।

      ताननबाम का लिनस के साथ झगड़ा हुआ, उन्होंने एक-दूसरे का अपमान किया। तेनबाम कहते हैं कि माइक्रोकर्नेल भविष्य है (HURD, Minix new cone Microkernel)।

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

  2.   एलियोटाइम३००० कहा

    यह इस ब्लॉग पर अब तक की सबसे अच्छी पोस्ट है। मैं पहले से ही जानना चाहता हूं कि और क्या करना है।

  3.   कार्लोस। दोस्त कहा

    प्रभावित होना

  4.   एक्सल कहा

    वास्तव में प्रभावित करने वाला!!

  5.   रौकालिनक्स कहा

    फ़्यूयूयूयूयूयूयूएए!
    यह geekiest पोस्ट मैंने कभी देखा है hehe है। बधाई हो एड्रियान, वेश्या का एक लेख! बेहद दिलचस्प !!! 🙂

    1.    जोकिन कहा

      मैं सहमत हूँ। मैं इस स्थिति की कल्पना करता हूं:
      GNU / लिनक्स पावर उपयोगकर्ता (खुश चेहरे के साथ):
      "मुझे पहले से ही पता है कि मेरे गेंटू को कैसे संकलित करना है"

      नर्ड (अवमानना): «pff, मैंने अपना खुद का डिस्ट्रो बनाया है ...»

      1.    देसीकोडर कहा

        हां, मैं अपना खुद का linux distro बना सकता हूं। वास्तव में मैं एक initramfs विकसित कर रहा हूँ और एम्बेडेड लिनक्स के लिए एक कर्नेल। यह लिनक्स डिस्ट्रो की तुलना में ऑपरेटिंग सिस्टम बनाने के लिए समान नहीं है। पहला अधिक कठिन है, लगभग असंभव है, दूसरा, जैसा कि आपने कहा है, कुछ भी हो सकता है, यहां तक ​​कि लोगो के साथ उबंटू भी एक्सडी। तो मैं इसे इस तरह छोड़ दूंगा:

        GNU / लिनक्स पावर यूजर (खुश चेहरे के साथ)
        - मैं पहले से ही जानता हूं कि मेरे गेंटू को कैसे संकलित किया जाए

        अर्ध-नर्ड
        - Pff, मैंने खरोंच से एक linux का पालन किया है और मैंने अपना खुद का डिस्ट्रो बनाया है

        बेवकूफ (तिरस्कारपूर्ण रवैये के साथ)
        - pff, क्योंकि मैंने असेंबलर में और C में एक कर्नेल प्रोग्राम किया है

        Saludos!

  6.   Cronos कहा

    यह मेरे लिए दिलचस्प है, अगले अध्याय लंबित हैं।

  7.   Abimaelmartell कहा

    मैंने कुछ समय पहले इस ट्यूटोरियल को देखा, यह C ++ के लिए है
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet कहा

      लिंक के लिए धन्यवाद, मैं इस पर एक नज़र डालूंगा।

  8.   जोस जैके कहा

    मैं एक ऑपरेटिंग सिस्टम 100% AMD ग्राफिक्स के साथ संगत करना चाहूंगा: /

    1.    इवानलिनक्स कहा

      Windows

      1.    जोस जैके कहा

        Windows उत्प्रेरक में hahaha में OpenGL का समर्थन नहीं है, हालांकि लिनक्स में मैं सभी ग्राफिक पावर का उपयोग नहीं कर सकता हूं जो कि देखने के लिए इंतजार करता रहेगा कि क्या होता है!

        1.    beny_hm कहा

          बाजार के सफाए के लिए बस वाल्व का इंतजार करें

  9.   KZKG ^ गारा कहा

    जादुई, सही, उत्कृष्ट योगदान, यह पोस्ट की एक महान श्रृंखला की तरह दिखता है excellent

  10.   ओ_पिक्सोट_ओ कहा

    बुआ मैं जानना चाहता हूं कि आपकी मदद करने के लिए कैसे प्रोग्राम करना है, बस ज्ञान के साथ अभ्यास करने का एक तरीका है कि आप सीख रहे हैं और एक की मदद कर रहे हैं। अभी के लिए मैं आपको इस परियोजना पर ध्यान आकर्षित करने के लिए आदर्श वाक्य को छोड़ देता हूं जब आप इसे समाप्त कर लेते हैं "NextDivel का उपयोग करें, पोर्न एक ही (या बेहतर) दिखता है।", आप xD को स्वीप करेंगे।

  11.   यह नाम कहा

    मूओउल्लाआआ !!!!

  12.   नॉर्डरी कहा

    बहुत अच्छा लेख, लेकिन सिर्फ उत्सुक कि आपने स्क्रैच परियोजना से लिनक्स का पालन क्यों नहीं किया है?

    सादर

    1.    AdrianArroyoStreet कहा

      ठीक है, स्क्रैच से लिनक्स ठीक है, और आप यह बता सकते हैं कि यह आपका है, लेकिन यह वास्तव में बहुत यांत्रिक है:
      -डाउनलोड फोंट
      -उनको लगाओ
      -कंपनी
      -इंस्टॉल
      -निम्नलिखित
      यहां, भले ही परिणाम अंत में खराब हो, आप कह सकते हैं कि आपने सभी फाइलों की समीक्षा की है।

    2.    देसीकोडर कहा

      जैसा कि मेरी पिछली टिप्पणी से स्पष्ट है, क्योंकि इसमें जटिलता का स्तर समान नहीं है। इसके अलावा, स्क्रैच से लिनक्स वास्तव में नहीं है, इसके नाम के विपरीत, स्क्रैच से एक सिस्टम बनाना। स्क्रैच से एक सिस्टम बनाना यह स्वयं प्रोग्रामिंग कर रहा है, अपने कर्नेल को लिख रहा है, लिनक्स कर्नेल नहीं, यदि संभव हो तो इसके बजाय अपने खुद के बूटलोडर को भी देखें। ग्रब, लिलो, सिस्लिनक्स, आदि। यद्यपि एक LFS कोई छोटा पराक्रम नहीं है और यह काफी जटिल है, यह आपके अपने कर्नेल को प्रोग्रामिंग करने के करीब भी नहीं आता है ...

      इसके अलावा, मैं AdrianArroyo Calle से सहमत हूं कि यह बहुत अधिक यांत्रिक है, मैंने इसे कभी-कभी पढ़ा है और आप छठे पृष्ठ पर छोड़ देना चाहते हैं, वे आपको संकुल के किन संस्करणों का उपयोग करने के लिए भी कहते हैं क्योंकि अन्यथा निर्देश काम नहीं करेंगे (जो लचीलेपन की कमी को दर्शाता है) , मेरी राय में )। मुझे लगता है कि अपने स्वयं के विचार के लिए बेहतर है कि आप जो पैकेज चाहते हैं उसे संकलित करें, यहां तक ​​कि कुछ प्रोग्राम भी करें, एक लिनक्स कर्नेल और शांति का संकलन करें।

      Saludos!

  13.   कुकी कहा

    ऊऊऊओओहह !! मैंने कभी किसी पोस्ट पर कब्जा नहीं किया, जितना कि इसने किया।
    कृपया जारी रखें 😀

  14.   linux_user कहा

    मुझे नहीं पता कि क्या गलत हुआ:

    त्रुटि: कोई मल्टीबूट हेडर नहीं मिला।
    त्रुटि आपको कर्नेल को पहले लोड करने की आवश्यकता है

    1.    AdrianArroyoStreet कहा

      अगर यह कोई सांत्वना है, तो मैंने वही गलती की। GitHub में मौजूद स्रोतों का उपयोग करने का प्रयास करें, वहां त्रुटि पहले से ही हल है। वैसे भी मुझे लगता है कि अगर आप grub.cfg में लाइन को "मल्टीबूट /next/START.ELF" से "कर्नेल /next/START.ELF" में बदल दें तो यह काम कर सकता है। मुझे ठीक से पता नहीं है।

      1.    मैकप्लाटानो कहा

        सबसे पहले, शानदार प्रवेश entrance
        मैं एक ही समस्या ग्रब से कर्नेल लोड हो रहा है। यहां तक ​​कि GitHub स्रोतों का उपयोग करना या कर्नेल के लिए मल्टीबूट बदलना ...

        त्रुटि: कोई मल्टीबूट हेडर नहीं मिला।
        त्रुटि: कोई लोड किए गए कर्नेल नहीं

        1.    AdrianArroyoStreet कहा

          क्या आप एक संकलक के रूप में क्लैंग का उपयोग कर रहे हैं? इसे gcc के लिए बदलें
          क्या आपने लिंकर स्क्रिप्ट का उपयोग करने के लिए याद किया है? लिंकर (हमारे मामले में ld) के लिए यह जानना आवश्यक है कि फ़ाइल में यह प्रत्येक चीज़ कहां डालने जा रहा है। इस मामले में मल्टीबूट हैडर शुरुआत में होना चाहिए।
          क्या आप CMake सिस्टम का उपयोग कर रहे हैं? यदि आप इसका उपयोग करते हैं तो मुझे लगता है कि यह विफल नहीं है।
          यदि यह आपके लिए काम नहीं करता है, तो मैं एक और समाधान खोजने की कोशिश करूंगा।

  15.   खोतो कहा

    [+100]
    सिर्फ महान !!!

  16.   invisible15 कहा

    यह वास्तव में अच्छा है 🙂

  17.   तनराक्स कहा

    मैं अपनी टोपी उतारता हूं। प्रभावशाली पोस्ट। बधाई हो।

  18.   आदमी कहा

    वाह!
    यह बहुत अच्छा होगा यदि आप एक ब्राउज़र का उपयोग किए बिना HTML5 और जावास्क्रिप्ट में किए गए एप्लिकेशन खोल सकते हैं, क्या यह संभव है?
    मैं उनके बारे में बात कर रहा हूं जैसे कि देशी एप्लिकेशन।
    इसलिए इस ऑपरेटिंग सिस्टम के लिए प्रोग्राम करना आसान होगा to

    1.    AdrianArroyoStreet कहा

      इस मामले में मैं ऐसा नहीं करने जा रहा हूं क्योंकि इसके पीछे बहुत अधिक काम है, लेकिन एक ऑपरेटिंग सिस्टम है जिसे "is" कहा जाता है। वास्तव में कमांड लाइन जावास्क्रिप्ट है और विंडोज़ जावास्क्रिप्ट कैनवस कार्यों का उपयोग करके तैयार की जाती हैं। निनटेंडो इंजीनियरों ने इसे किया और अब यह खुला स्रोत है।

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

      1.    आदमी कहा

        वला, जानकारी के लिए धन्यवाद the
        मैं एक नजर मार लूगां

  19.   पहरा देनेवाला कहा

    जो कोई भी अपना खुद का ओएस बना सकता है, वह शांति से मर सकता है, क्योंकि बौद्धिक स्तर उसे हासिल करना होगा; यह आपको स्वर्ग या नरक से दूर कर देता है।
    पोस्टिंग का टुकड़ा।

    1.    मिगुएल कहा

      अब तक किसी को भी ऐसा कुछ नहीं मालूम है जिसके बारे में कहा जा सकता है कि यह एक अच्छा ऑपरेटिंग सिस्टम है, जो स्क्रैच से बना है, न कि लिनक्स टोरवाल्ड्स जैसा कि आप शुरुआत में कहते हैं, क्योंकि यह यूनिक्स स्रोतों से शुरू हुआ है और बाकी सभी चीजों में लेखक हैं एक से अधिक लोगों के लिए सामान्य, जीवन बहुत छोटा है और खरोंच से शुरू होना किसी के लिए भी अकल्पनीय है, भले ही विपरीत चाहता हो, यह लिनक्स टॉर्वाल्ड्स द्वारा कॉपी और पेस्ट करने में की गई कई गलतियों में प्रदर्शन है।

      1.    Skarmiglione कहा

        यूनिक्स स्रोत बंद हो गए हैं, मिनिक्स का उपयोग ... जो कुछ और है।

      2.    फेलिप रोबेना कहा

        और जिन लोगों ने QDOS बनाया है क्या?
        कुछ पर आधारित थे?

  20.   टेस्ला कहा

    मैं जो देख रहा हूं, उनके पास अपना ऑपरेटिंग सिस्टम नहीं है क्योंकि वे नहीं करना चाहते हैं, हाहाहाहा।

    अब गंभीरता से, बहुत दिलचस्प! बहुत कुछ मेरे सीमित प्रोग्रामिंग ज्ञान से परे है, लेकिन मैं इस श्रृंखला के अन्य भागों को उत्सुकता से पढ़ूंगा।

    पोस्ट के लिए धन्यवाद!

  21.   मैनुअल आर कहा

    आपने मुझे एक O_O चेहरे के साथ छोड़ दिया ... किसी के योगदान को कम करके आंका बिना, यह सबसे "समर्थक" है जिसे मैंने हाल ही में देखा है। सादर।

  22.   aitor_cz कहा

    बहुत अच्छा लेख, एड्रियान। कृपया जारी रखें…

  23.   mj कहा

    क्या आप अप्रैल फूल डे पर मजाक कर रहे हैं? क्या इसका मतलब यह नहीं है "लिनुस टॉर्वाल्ड्स का अनुकरण करना: खरोंच से अपना खुद का ऑपरेटिंग सिस्टम बनाना।" मुझे नहीं लगता कि यह उन लोगों के लिए मुश्किल है जो प्रौद्योगिकी या विश्वविद्यालय के किसी संस्थान में अपना कैरियर बना रहे हैं; लेकिन मेरे लिए मैं एक नौसिखिया धनुर्धर हूं (ऐसे लोग हैं जो हमें "नोब" कहते हैं, लेकिन मैं खुद को अधिक नौसिखिया कुछ आलसी मानता हूं) ऐसा लगता है जैसे जमीन पर कदम नहीं रखते। वैसे भी यह लेखनीयता का एक बहुत कुछ बनाता है और इसके बारे में और इसके अलावा, संपादकीय, निष्कर्षों के लिए उत्तरदायी है; पहली चीज जो मैं करूंगा, वह है कि इस मूल्यवान सामग्री को कम से कम समझने की कोशिश करें।
    धन्यवाद, आप एड्रियन अरोयो कैले, उत्कृष्ट काम और ज्ञान का उत्कृष्ट वितरण।

  24.   ब्लेयर पास्कल कहा

    LEL उत्कृष्ट पोस्ट, इसे बनाए रखें।

  25.   f3niX कहा

    क्या बढ़िया पोस्ट है, यही बात मुझसे छूट गई desde linux. आश्चर्यजनक।

  26.   माणिक कहा

    शानदार पोस्ट, बहुत बहुत धन्यवाद।
    मुझे समझ नहीं आया कि लिंक.ल्ड फ़ाइल क्या करती है, क्या कोई मुझे यह समझा सकता है?

    1.    AdrianArroyoStreet कहा

      Link.ld फ़ाइल लिंकर को बताता है (इस मामले में ld) जिसके परिणामस्वरूप फ़ाइल के भीतर कोड का प्रत्येक भाग होना चाहिए। हम प्रवेश बिंदु को भी परिभाषित करते हैं क्योंकि हमारे पास एक ऑपरेटिंग सिस्टम नहीं है जिसे हम एक सामान्य प्रोग्राम के रूप में मुख्य रूप से उपयोग नहीं कर सकते हैं, इस मामले में हम प्रारंभ फ़ंक्शन का चयन करते हैं।

  27.   मैक्सी कहा

    आपके सभी पोस्ट महान! 7 का इंतजार! क्या होगा अगर मुझे संदेह है, उदाहरण के लिए, अगर मैं केवल ओएस के बिना एक एल्गोरिथ्म चलाना चाहता था, तो मुझे कैसे पता चलेगा कि मैं क्या उपयोग कर सकता हूं और सी क्या नहीं?

    1.    AdrianArroyoStreet कहा

      यदि आप इसे इस तरह से उपयोग करते हैं, तो आप stdlib से कुछ भी उपयोग नहीं कर सकते, जो व्यावहारिक रूप से हर कोई उपयोग करता है (कोई मॉलोक, मुफ्त, प्रिंटफ, स्कैनफ, स्ट्रैम्प आदि)। सब कुछ सीधे मेमोरी या एएसएम से लागू किया जाना है। शायद एक उच्च अध्याय में मैं आपको दिखाऊंगा कि ऑपरेटिंग सिस्टम के लिए सी लाइब्रेरी कैसे स्थापित करें। यदि आप C ++ का उपयोग करते हैं तो आप अपवादों और नए और हटाए गए ऑपरेटरों (और निश्चित रूप से) का उपयोग नहीं कर सकते हैं।

    2.    स्विचर कहा

      मुझे लगता है यह यह आपको एक बेहतर विचार दे सकता है कि यह कैसे करना है।

  28.   Esteban कहा

    नमस्कार, लगभग 5 साल पहले मैंने इसी तरह के प्रकाशन का अनुसरण किया और उसी तरह से शुरू होने वाले एक माइक्रोकर्नेल को विकसित किया, इसमें सुधार करने के कुछ पहलू हैं, लेकिन इसमें आपकी रुचि हो सकती है, यह संरक्षित मोड में चलता है, मल्टी-टास्किंग को निष्पादित करता है और मेमोरी वर्चुअलाइजेशन करता है, हाल ही में मैंने इस पर काम किया। डिस्क ड्राइवर और सीडी ड्राइव इसे स्थापित करने के लिए और न केवल लाइव सीडी पर चलाने के लिए ... अभिवादन।

  29.   जोहान कहा

    प्रिय, मुझे कमांड निष्पादित करते समय एक त्रुटि है:
    gcc -o START.ELF कर्नेल। अगला। कर्नेल_मैं।

    link.ld: 5 सिंटैक्स त्रुटि
    collect2: error: ld ने 1 निकास स्थिति लौटा दी

    लिंक
    । = 0x00100000;
    .मल्टीबूट_हेडर: {
    * (मल्टीबूट_हाइडर)
    }

    पंक्ति 5 में मैं त्रुटि नहीं देखता, क्या कोई ऐसा ही है?

    मैं वर्चुअलबॉक्स में एक वर्चुअलाइज्ड डेबियन व्हीजी के साथ काम कर रहा हूं

    1.    जूलियन रेयेस एस्कृगस कहा

      जोड़ें ";" * के अंत में (? मल्टीबूट_हाइडर)

  30.   एरिक ओरेलाना रोमेरो कहा

    उत्कृष्ट पहल, मैं निश्चित रूप से इस पोस्ट के अध्यायों का पालन करूंगा, इससे बहुत कुछ सीखने का इरादा है। हमें सिखाने के लिए समय निकालने के लिए बहुत-बहुत धन्यवाद। इस संबंध में एक एकल विवरण, यह ध्यान दिया जाना चाहिए कि लिनुस टॉर्वाल्ड्स किसी भी ऑपरेटिंग सिस्टम के निर्माता नहीं हैं, उन्होंने ग्नू / लिनक्स सिस्टम का कर्नेल बनाया (दूसरे ओएस में उपयोग किया गया है), जो अभी भी सार्थक है, लेकिन यह है अधिकांश ओएस बनाने के लिए रिचर्ड स्टालमैन को श्रेय देना महत्वपूर्ण है।

    इनपुट के लिए बहुत बहुत धन्यवाद और मुझे आशा है कि आप मेरे अवलोकन पर विचार करेंगे।

  31.   जूलियन रेयेस एस्कृगस कहा

    मैं थोड़ी देर के लिए इस विषय के साथ खिलवाड़ कर रहा था, जैसे ही मैंने शीर्षक पढ़ा, मुझे दिलचस्पी हो गई। लेकिन संदेश मिलता रहता है

    त्रुटि: कोई मल्टीबूट हेडर नहीं मिला।
    त्रुटि आपको कर्नेल को पहले लोड करने की आवश्यकता है

    मैंने जीथुब पर एक रेपो में जो अपलोड किया है, उसे अपलोड किया है https://github.com/rkmax/GenyOS

    1.    मार्टिन विलबाबा कहा

      मेरे साथ भी यही होता है। क्या आपको इसका हल मिला?

  32.   कार्लोस कहा

    एक प्रश्न मैंने वाक्य रचना शुरू करने के लिए शुरू किया और मेनेंट्री लाइन मुझे कमांडनोट बताती है जो मुझे बता सकता है कि क्यों
    मैं यह करता हूं

    BLACK @ ब्लैक-पीसी: ~ / ब्लैकरोट $ मेनेंट्री «NextDivel» {{
    मेनेंट्री: कमांड नहीं मिला

    1.    AdrianArroyoStreet कहा

      इस सामग्री की सामग्री को कमांड लाइन में दर्ज नहीं किया जाना है, लेकिन उस फ़ाइल में जिसे आप grub.cfg कहते हैं

  33.   नोडेटिनो कहा

    बहुत बढ़िया लेख, धन्यवाद!

  34.   डेविड कहा

    बहुत शानदार…!! यह मिसिंग लिंक की तरह है।

  35.   आर गार्सियाग कहा

    मुझे आपके अनुकरण करने वाले LInus Torvalds ट्यूटोरियल पसंद हैं, लेकिन एक कदम है जो मुझे समझ में नहीं आता है, निम्नलिखित:
    अब हम अपने फोल्डर के अंदर START.ELF / को कॉपी करते हैं जो हमारे ऑपरेटिंग सिस्टम के रूट को सिमुलेट करता है। हम कंसोल के साथ अपने नए ऑपरेटिंग सिस्टम के रूट फ़ोल्डर में जाते हैं और सत्यापित करते हैं कि दो फाइलें हैं: एक /boot/grub/grub.cfg और दूसरा /next/START.ELF।

    हम ऊपरी निर्देशिका में जाते हैं और GRUB-mkresoscope नामक GRUB के साथ एक आईएसओ निर्माण उपयोगिता कहते हैं

    क्या कोई मुझे यह समझा सकता है: पी

    1.    AdrianArroyoStreet कहा

      बस एक न्यूनतम आईएसओ उत्पन्न करने के लिए जिसे GRUB लोड कर सकता है, हम कर्नेल को (/, ISO, किसी भी फ़ोल्डर में) कॉपी कर सकते हैं /next/START.ELF और GRUB कॉन्फ़िगरेशन फ़ाइल / (आईएसओ, किसी भी फ़ोल्डर) / बूट के लिए /grub/grub.cfg एक बार ऐसा हो जाने के बाद, हमने अभी तक GRUB को ISO पर स्थापित नहीं किया है और एक उपयोगिता है जो ISO को एक फोल्डर से उत्पन्न करता है और GRUB को ग्रब-mkrescue कहते हैं। फिर हम अंत में एक बूट योग्य आईएसओ के साथ समाप्त हो जाएंगे जिसमें GRUB स्थापित है, जो बाद में START.ELF को सही ढंग से निष्पादित करने के लिए कॉन्फ़िगरेशन पढ़ सकता है। मुझे नहीं पता कि मैंने खुद को समझाया है, लेकिन हम जो करते हैं वह एक प्रकार की झूठी फाइल प्रणाली है जिसके साथ हम एक आईएसओ उत्पन्न करते हैं।

  36.   मिगुएल जोस ग्वेरा एटेंसियो कहा

    बहुत खूब

  37.   माइकल मोरेनो कहा

    ठीक है, वास्तव में एक नई प्रणाली को इतना नहीं देखते हैं, लेकिन यदि आप लिनक्स में सुधार करते हैं, उदाहरण के लिए, एक सर्वर घटक के साथ एक लिनक्स एक्सोन्यूक्लियस बनाते हैं जो एक माइक्रोन्यूक्लियस के रूप में कार्य करता है यदि आप चाहें, तो यह है कि माइक्रोन्यूक्लियर व्यवहार के साथ एक एक्सो संरचना जो सुपर और लिनक्स होगी।

    दूसरी बात यह है कि मैं प्रोग्रामिंग का विशेषज्ञ नहीं हूं, बस कुछ चीज़ी सी ++ और कुछ जावा, यह मेरे लिए पर्याप्त होगा कि लिनक्स के कर्नेल प्रोग्राम को एक मॉड्यूल दिया जाए, इसे gutting किया, इसे संशोधित किया आदि।

  38.   विंटर सोल्जर53 कहा

    एक शक के बिना मुझे पहले से ही छुट्टी पर रहना होगा।

  39.   फर्मिन कहा

    यह एक अच्छा और किस कार्यक्रम में इसे डिजाइन और कोड करता है?
    कृपया मुझे वह उत्तर दें

  40.   डार्कमाइंड कहा

    जब आपके git से संकलन मुझे मिलता है:

    [jmponce @ jar build] $ cmake ।।
    - NextRoot निर्देशिका बनाना
    - आईएसओ स्क्रिप्ट तैयार करना
    DESTDIR = अगला इंस्टॉल करें
    ./iso.sh
    -डॉक्सीजन मिला: / usr / bin / doxygen (पाया संस्करण "1.8.9")
    - कॉन्फ़िगर किया जा रहा है
    - किया हुआ
    - बिल्ड फ़ाइलों को लिखा गया है: / घर / jmponce / अगले- divel / build
    [jmponce @ jar build] $ मेक
    लक्ष्य START.ELF की स्कैनिंग निर्भरताएँ
    [[%] ASM-ATT ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / boot.oo का निर्माण
    [१४%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / NextShellLite.cn.o
    [२१%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_Screen.pp.o
    [२ [%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [३५%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_Panic.cn.o
    [४२%] भवन CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_Timer.pp.o
    [५०%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_Memory.cn.o
    [५XX%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_Ports.pp.o
    [६४%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_GDT.cn.o
    [[१%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_ISRIP.o
    [[[%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_String.pp.o
    [[५%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_IRQ.pp.o
    [९ २%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_IDT.pp.o
    [१००%] बिल्डिंग CXX ऑब्जेक्ट src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cn.o
    लिंकिंग CXX निष्पादन योग्य START.ELF
    / usr / bin / ld: असंगत /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a को -lccc की तलाश करते समय छोड़ दिया जाता है
    / usr / bin / ld: -lgcc नहीं मिल सकता है
    एकत्रित 2: त्रुटि: ld ने निकास स्थिति 1 लौटा दी
    src / CMakeFiles / START.ELF.dir / build.make: 402: लक्ष्य 'src / START.ELF' के लिए विफल निर्देश
    बनाना [2]: *** [src / START.ELF] त्रुटि १
    CMakeFiles / Makefile2: 106: लक्ष्य के निर्देशों की विफलता 'src / CMakeFiles / START.ELF.dir / all'
    [१]: *** [src / CMakeFiles / START.ELF.dir / all] त्रुटि २
    Makefile: 117: लक्ष्य 'सभी' के लिए निर्देशों में विफलता
    बनाना: *** [सभी] त्रुटि २

    1.    AdrianArroyoStreet कहा

      त्रुटि यह प्रतीत होती है कि यह llibgcc नहीं ढूँढ सकती क्योंकि आपके पास 64-बिट संस्करण है और वर्तमान में बिल्ड सिस्टम 32-बिट का उपयोग करने के लिए मजबूर है। आपको अपने डिस्ट्रो या बेहतर पर एक संगतता पैक स्थापित करना चाहिए, 32-बिट सिस्टम का उपयोग करें।

      1.    रोनाल्डो रोड्रिग्ज कहा

        मेरे पास 32 बिट्स हैं और मुझे एक ही त्रुटि मिलती है, क्या आपका मतलब ऑपरेटिंग सिस्टम या आर्किटेक्चर से है? मेरा 64 बिट है, लेकिन मैं 32 बिट उबंटू का उपयोग कर रहा हूं, वित्तीय समस्याओं को न पूछें, इसके साथ ही मैं यह सब कहता हूं।

  41.   जॉर्ज कहा

    उत्कृष्ट विषय, अधिक गुंजाइश की प्रतीक्षा कर रहा है। चियर्स

  42.   Jhon कहा

    महान मैं और अधिक के लिए उम्मीद है

  43.   मिट्टी का पेरेज़ कहा

    नमस्कार, मैं एक युवा राजदूत हूं जो एक ऑपरेटिंग सिस्टम बनाना चाहता है जो सभी कार्यक्रमों और प्लेटफार्मों का समर्थन करता है ताकि डेवलपर्स के पास एक पीसी पर शक्तिशाली मशीन या एप्लिकेशन या प्रोग्राम न हों।
    इसलिए मुझे इस पोस्ट में दिलचस्पी है, लेकिन जब मैं आपका git डाउनलोड करता हूं या इसे बनाने की कोशिश करता हूं, तो जब तक मैं कमांड निष्पादित नहीं करता, तब तक सब कुछ ठीक हो जाता है ।/iso.sh या grub-mkrescue -o nextdivel.iso आपको इस त्रुटि के बारे में बताता है।

    "ग्रब-मकेरस्क्यूप: चेतावनी: आपका एक्सोरिसो" -grub2-boot-info "का समर्थन नहीं करता है। कुछ फ़ीचर्स डिसेबल्ड कर दिए गए हैं। Xorriso 1.2.9 या बाद का उपयोग करें।
    grub-mkrescue: चेतावनी: आपका xorriso "–grub2-boot-info" का समर्थन नहीं करता है। आपकी कर्नेल छवि बहुत बड़ी है। डिस्क बूट अक्षम कर दिया गया है। Xorriso 1.2.9 या बाद का उपयोग करें .. »
    मुझे वास्तव में कोई पता नहीं है क्योंकि मैं अनुप्रयोगों और जाले के बारे में बहुत कुछ जानता हूं लेकिन मुझे ग्रब के बारे में कुछ नहीं पता है

    1.    AdrianArroyoStreet कहा

      आपको अपने distro पर xorriso प्रोग्राम को अपडेट करने की आवश्यकता हो सकती है। आप किस डिस्ट्रो और वर्जन का उपयोग करते हैं?

      1.    मिट्टी का पेरेज़ कहा

        मैं xubuntu 14.04lts का उपयोग करता हूं और xorriso को चलाने का प्रयास करता हूं, लेकिन शेल मुझे बताता है कि यह नहीं मिल सकता है और मैं apt-get install xorriso प्राप्त करता हूं, हालांकि मुझे ईमानदारी से कुछ प्रतिक्रिया की उम्मीद थी क्योंकि मुझे उन चीजों को स्थापित करने का एक बुरा अनुभव था जो मुझे linux hehe में नहीं पता है। मैं इसे अभी अपडेट करता हूं और आपको बताता हूं कि क्या हुआ था

      2.    AdrianArroyoStreet कहा

        तब सॉफ़्टवेयर केंद्र से या बस टर्मिनल से xorriso स्थापित करें "sudo apt-get install xorriso"

      3.    मिट्टी का पेरेज़ कहा

        मैंने पहले से ही सब कुछ किया जो आपने मुझे बताया था और गिट और मेरा दोनों के साथ मुझे यह xorriso 1.3.2 मिलता है: रॉकरिज फाइलसिस्टम मैनिपुलेटर, लिबर्निया प्रोजेक्ट।

        ड्राइव करंट: -आउटदेव 'stdio: nextdivel.iso'
        मीडिया वर्तमान: stdio फ़ाइल, अधिलेखित
        मीडिया स्थिति: रिक्त है
        मीडिया सारांश: 0 सत्र, 0 डेटा ब्लॉक, 0 डेटा, 1901 मी फ्री
        ISO छवि में जोड़ा गया: निर्देशिका '/''/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 सेकंड में 1 फाइलें जोड़ी गईं
        xorriso: विफलता: स्रोत फ़ाइल की विशेषताओं को निर्धारित नहीं कर सकता '/ मीडिया / गैया / ज्यूपिटर 1 / शेलसिस्टम / नेक्रोट / नेक्रोट': ऐसी कोई फ़ाइल या निर्देशिका नहीं
        xorriso: UPDATE: 546 सेकंड में 1 फाइलें जोड़ी गईं
        xorriso: aborting: -abort_on 'FAILURE' ने 'FAILURE' का सामना किया
        और कॉरडरॉय मुझे समझ नहीं आ रहा है कि मेरी संरचना /nextroot/boot/grub/grub.cfg और nextroot / next / START.ELF है

      4.    मिट्टी का पेरेज़ कहा

        धन्यवाद, मैं आगे बढ़ने के लिए तैयार हूं, एक मित्र ने मेरी मदद की और मुझे बताया कि मैंने क्या गलत किया है, जो कि निर्देशिका का संगठन था, इसलिए मैं बस गया और यही वह है

      5.    एरिक कहा

        क्षमा करें, क्या आप मुझे बता सकते हैं कि आपने क्या प्रक्रिया की है क्योंकि मुझे बूट के लिए कुछ भी त्रुटि नहीं मिलती है: ऐसी कोई फ़ाइल या निर्देशिका नहीं

        बूट करने लायक कोई डिवाइस नहीं।

  44.   जोस कहा

    चियर्स! मैं आपसे यह पूछने जा रहा था कि यदि आप मुझे यहाँ समझाते हैं कि आप मुझे एक ईमेल भेज सकते हैं, तो मैं थोड़ा भ्रमित हो गया हूँ और मुझे यह समझने की ज़रूरत है कि आपके पास जो है, आप उसके बारे में बताएं, शायद मेरे लिए यह स्पष्ट नहीं है कि क्या ग्रब का निर्माण है। cfg टर्मिनल gcc में किया जाता है या बिल्कुल कहाँ? आपका बहुत धन्यवाद मित्र!

    1.    AdrianArroyoStreet कहा

      आप किसी भी टेक्स्ट एडिटर के साथ फाइल grub.cfg बनाएं और इसे PROJECT_FOLDER / बूट / ग्रब / grub.cfg में सेव करें

  45.   झुझानो कहा

    हैलो एड्रियन, सबसे पहले, आपको बधाई देता हूं और आपके योगदान के लिए धन्यवाद।

    आप जानते हैं कि मैं यह एक अभ्यास के लिए कर रहा हूं और मैंने इसे आपके ट्यूशन के बाद एक साथ रखना शुरू कर दिया, हालांकि शुरू करने के बाद मुझे पहली त्रुटि मिली

    $ के रूप में -o कर्नेल।ओ-सी कर्नेल।मास
    bash: as: कमांड नहीं मिला ...
    इसी तरह के आदेश हैं:
    '' ''
    'एसी'

    मैं फेडोरा 20 पर काम कर रहा हूं, और मुझे इस संबंध में कोई समाधान नहीं मिल रहा है, मैं आपके मार्गदर्शन की सराहना करूंगा कि क्या मुझे gcc या गैस में कुछ बदलना चाहिए

    अग्रिम धन्यवाद

    1.    AdrianArroyoStreet कहा

      आपको GAS स्थापित करना होगा ताकि मैं त्रुटि कोड देख सकूं। मेरे पास फेडोरा नहीं है, लेकिन सिद्धांत रूप में अगर आप yum install gcc-c ++ करते हैं तो आप पूरे GCC सुइट को स्थापित करेंगे और यह आमतौर पर GNU As के साथ आता है।

  46.   गैस्टन रामिरेज़ कहा

    मैं आपके साथ हूं, मुझे C ++, C # के बारे में कुछ पता है (हालांकि यह आखिरी इस मामले में बहुत उपयोगी नहीं है) बुरी बात यह है कि मुझे अभी भी अनुभव की कमी है, मैं कभी भी सी भाषा को नहीं संभालता, आपका प्रकाशन महान है, मेरे पास कहने के लिए बहुत कुछ नहीं है, अगर मेरे पास समय है तो मैं देखूंगा। धन्यवाद।

  47.   टेरिसटा डेल जेसस नां सांचेज़ कहा

    बहुत मदद के लिए आपका बहुत बहुत धन्यवाद…।

  48.   JKY कहा

    मैं लिनक्स से प्यार करता हूँ यह सबसे अच्छा जिला है, मेरी खिड़कियों के लिए सच्चाई यह है कि मुझे पता है कि लिनक्स का निर्माता खिड़कियों का निर्माता है

  49.   रोडे कहा

    हैलो, मुझे ग्रब में एक त्रुटि मिलती है
    त्रुटि: फ़ाइल /next/START.ELF नहीं मिली
    त्रुटि: आपको पहले कर्नेल लोड करने की आवश्यकता है

    क्या आप मेरी मदद कर सकते हैं और गुगली कर सकते हैं लेकिन मुझे नहीं मिल रहा है

  50.   एनरिक एविला कहा

    कृपया, मैं इसे कैसे बना सकता हूं संदेश HELLO WORLD? मैं एक शुरुआत हूं और मुझे अभी भी पर्याप्त जानकारी नहीं है

  51.   कार्लोस गुरेरो अल्वारेज़ कहा

    निम्नलिखित मेरे लिए होता है:
    gcc -o START.ELF कर्नेल। अगला। कर्नेल_मैं।
    / usr / bin / ld: kernel.o: relocation R_X86_64_32 प्रतीक के खिलाफ 'स्टैक' का उपयोग PIE ऑब्जेक्ट बनाते समय नहीं किया जा सकता है; के साथ recompile -fPIE
    / usr / bin / ld: अंतिम लिंक विफल रहा: आउटपुट पर अप्राप्य खंड
    collect2: error: ld ने 1 निकास स्थिति लौटा दी