सर्व प्रथम, टिप्पणी द्या की हा माझा पहिला लेख आहे आणि मला आशा आहे की आपणा सर्वांना हे आवडेल.
या मालिकेत आपण अनुकरण करणार आहोत लिनस टोरवाल्ड्स0 पासून आपण आपली ऑपरेटिंग सिस्टम बनवणार आहोत. या पहिल्या भागात आपण बूट पाहणार आहोत आणि आम्ही कर्नलमधून स्क्रीनवर एक मजकूर ठेवू.
माझ्या बाबतीत ऑपरेटिंग सिस्टम म्हणतात नेक्स्टडिव्हल. ऑपरेटिंग सिस्टमचा विचार करताच आपण घेतलेला पहिला निर्णय म्हणजे बूटलोडर काय होणार आहे?
येथे अनेक रूपे आहेत आणि आपण स्वतः एक तयार करू शकतो; या ट्यूटोरियल मध्ये मी वापरणार आहे ग्रब, कारण बहुतेक त्याच्याबद्दल कमी-अधिक प्रमाणात माहित असतात. आम्ही एक फोल्डर तयार करतो जो आपल्या ऑपरेटिंग सिस्टमचे मूळ असेल आणि तेथे आम्ही / बूट / ग्रब फोल्डर तयार करतो
mkdir nextroot && cd nextroot
mkdir -p boot/grub
तेथे आम्ही खालीलप्रमाणे grub.cfg फाईल तयार करतो.
menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}
या फाईलमधे आपण कसे ते पाहिले आहे ग्रब या प्रकरणात /next/START.ELF मध्ये आमचे कर्नल लोड करेल. आता आपण आपले कर्नल तयार केले पाहिजे.
यासाठी आम्हाला आवश्यक असेल जीसीसी y जीएएस (प्रकल्प संयोजक GNU, सहसा जीसीसीसह येतो). तर आपण कर्नल तयार करणार आहोत.
प्रथम आपण 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
मल्टीबूटशी संबंधित सर्व काही केवळ तपशिलाचे अनुसरण करणे म्हणजे आणखी काहीही नाही. सर्व काही सुरूवात होईल, त्याला मल्टीबूट_एन्ट्री कॉल होईल, आम्ही पहिल्या 4 के मध्ये मल्टीबूट हेडर परिभाषित केले आहे आणि आम्ही ते (मूवलसह) ठेवू.
नंतर आम्ही नेक्स्टकर्नेल_मॅनला कॉल करू जे आमचे कर्नल सी फंक्शन आहे. लूपमध्ये आम्ही संगणक थांबविण्यासाठी थांबलो. हे यासह संकलित करते:
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;
}
याद्वारे आपण स्मृतीत थेट फेरफार करतो VGA आणि चारित्र्यानुसार आम्ही ते लिहित आहोत. आम्ही 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 = .;
}
याद्वारे आपण प्रत्येक विभाग आणि एंट्री पॉईंटची स्थिती परिभाषित करू. सुरूवात करा, की आपण कर्नल.एस्.एम. मध्ये परिभाषित केले आहे. आता आम्ही या सर्व कंकोचेशन एकत्र करू शकतो:
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
grub-mkrescue -o nextdivel.iso nextroot
एकदा आम्ही हे केल्यावर आमच्याकडे एक असेल ISO. हे आयएसओ संगणकावर उघडले जाऊ शकते x86 (64 बिट्स देखील) आणि व्हर्च्युअल मशीन्स. त्याची चाचणी घेण्यासाठी, मी वापरणार आहे QEMU. आम्ही कॉल करतो QEMU कमांड लाइन मधून:
qemu-system-i386 nextdivel.iso
सुरू होईल सीबीआयओएस आणि नंतर आपल्याकडे असेल ग्रब. नंतर जर सर्व काही ठीक असेल तर आपण आपला वाक्यांश पाहू.
आपण विचार कराल की हे अवघड आहे, मी उत्तर देतो, होय ते आहे.
खरोखर ऑपरेटिंग सिस्टम तयार करणे अवघड आहे आणि ही येथे काहीही उपयुक्त नाही. भविष्यातील अध्यायात आपण स्क्रीनवर रंग कसे हाताळायचे, मेमरी रिझर्व्ह करायची असल्यास आणि कीबोर्ड वरून डेटा कसा मिळवायचा ते पाहू.
जर एखाद्यास येथे सर्वकाही कॉपी करायचे नसेल तर माझ्याकडे एक रेपॉजिटरी आहे 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
ऑपरेटिंग सिस्टम तयार करण्याची वेळ आणि इच्छा असल्यास मी नेक्स्टडिव्हलवर सहयोग करण्यास प्रोत्साहित करतो. कदाचित लिनक्सपेक्षाही श्रेष्ठ ... वेळ सांगेल.
:O
टोरवाल्ड्सने मिनीक्स ऑपरेटिंग सिस्टम (यूएनआयएक्समधून काढलेली) अँड्र्यू एस. टॅनबॅमकडे नेली आणि त्यात सुधारणा केली.
ताननबॉमचा लिनसशी झगडा झाला आहे, त्यांनी एकमेकांचा अपमान केला. टॅनबॉम म्हणतो की मायक्रोकर्नेल हे भविष्य आहे (एचयूआरडी, मिनीक्स नवीन शंकू मायक्रोकर्नेल).
http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html
या ब्लॉगवर मी आत्तापर्यंत पाहिलेली ही सर्वोत्कृष्ट पोस्ट आहे. मला आणखी काय करावे हे आधीपासूनच जाणून घ्यायचे आहे.
प्रभावित व्हा
खरोखर प्रभावी !!
FUUUUUUUAA!
हे मी कधीही पाहिलेले असे विनोदी पोस्ट आहे. अभिनंदन एड्रियन, वेश्या लेख! हायपर इंटरेस्टिंग !!! 🙂
मी मान्य करते. मी या परिस्थितीची कल्पना करतोः
जीएनयू / लिनक्स पॉवर यूजर (आनंदी चेहर्यासह):
"माझ्या जेंटूचे संकलन कसे करावे हे आधीपासूनच मला माहित आहे"
बेवकूफ (तिरस्कारपूर्वक): «pff, मी माझे स्वतःचे डिस्ट्रो तयार केले आहे ...»
होय, मी माझा स्वत: चा लिनक्स डिस्ट्रॉ तयार करू शकतो. खरं तर मी एम्बेडेड लिनक्ससाठी एक इन्ट्रॅम आणि कर्नल विकसित करत आहे. लिनक्स डिस्ट्रोपेक्षा ऑपरेटिंग सिस्टम बनविणे समान नाही. पहिले खूपच कठीण आहे, जवळजवळ अशक्य आहे, दुसरे, जसे आपण म्हणाला तसे काहीही असू शकते, अगदी एक्सडी लोगोसह उबंटू देखील बदलला. म्हणून मी हे असेच सोडतो:
जीएनयू / लिनक्स पॉवर यूजर (आनंदी चेहर्यासह)
- माझ्या जेंटूचे संकलन कसे करावे हे मला आधीच माहित आहे
सेमी-नेर्ड
- पीएफएफ, मी सुरवातीपासून लिनक्सचे अनुसरण केले आणि मी स्वत: ची डिस्ट्रॉ बनविली
बेवकूफ (तिरस्करणीय वृत्तीसह)
- पीएफएफ, कारण मी असेंबलर आणि सी मध्ये कर्नल प्रोग्राम केला आहे
ग्रीटिंग्ज!
पुढील अध्याय प्रलंबित, हे माझ्यासाठी मनोरंजक आहे.
मी हे ट्यूटोरियल काही काळापूर्वी पाहिले, ते सी ++ साठी आहे
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
दुव्याबद्दल धन्यवाद, मी याकडे एक नजर टाकीन.
मला एएमडी ग्राफिक्सशी एक ऑपरेटिंग सिस्टम 100% सुसंगत आहेः /
विंडोज
विंडोज कॅटॅलिस्टमध्ये हाहााहाला ओपनजीएल समर्थन नाही, जरी लिनक्समध्ये मी सर्व ग्राफिक उर्जा वापरू शकत नाही, काय होते हे पाहण्याची मी प्रतीक्षा करत राहीन!
फक्त बाजार पुसण्यासाठी वाल्वची प्रतीक्षा करा
जादूई, परिपूर्ण, उत्कृष्ट योगदान, हे पोस्टच्या मालिकेसारखे दिसते 🙂
बुवा मला हे जाणून घ्यायचे आहे की आपण शिकत असलेल्या ज्ञानाचा सराव करण्याचा एक मार्ग म्हणून आपल्याला मदत करण्यात सक्षम होण्यासाठी प्रोग्राम कसा करावा आणि एखादा मदत करतो. एकदा आपण या प्रकल्पाचे लक्ष संपवण्याचा हेतू सोडत नाही एकदा आपण "नेक्स्टडिव्हल वापरा, अश्लील सारखे दिसते (किंवा चांगले).", आपण एक्सडी साफ कराल.
Mooooooolaaa !!!!
खूप चांगला लेख, परंतु आपण उत्सुक आहात की आपण लिनक्स फ्रम स्क्रॅच प्रोजेक्ट का अनुसरण केला नाही?
कोट सह उत्तर द्या
ठीक आहे, स्क्रॅच वरील लिनक्स ठीक आहे, आणि आपण ते आपले असल्याचे सांगू शकता, परंतु हे खरोखर खूप यांत्रिक आहे:
डाऊनलोड फॉन्ट
-पाच
-संकलित
-इन्स्टॉल करा
-खालील
येथे, जरी परिणाम शेवटी खराब झाला तरीही आपण असे म्हणू शकता की आपण सर्व फायलींचे पुनरावलोकन केले आहे.
माझ्या मागील टिप्पणीवरून हे स्पष्ट आहे, कारण त्यात समान पातळीची जटिलता नाही. शिवाय, स्क्रॅचपासून लिनक्स खरोखरच त्याच्या नावाच्या विरूद्ध नसते, स्क्रॅचपासून एक सिस्टम तयार करते. स्क्रॅचपासून सिस्टम बनवणे हे स्वतः प्रोग्रामिंग करत आहे, स्वतःचे कर्नल लिहित आहे, लिनक्स कर्नल नाही, शक्य असल्यास ग्रबऐवजी स्वतःचा बूटलोडर देखील, लिलो, सिस्लिनिक्स इ. जरी एलएफएस हा छोटासा पराक्रम नसतो आणि बर्याच गुंतागुंतीचा असतो, तरीही तो आपल्या स्वतःच्या कर्नल प्रोग्रामिंगच्या जवळ येत नाही ...
याव्यतिरिक्त, मी अॅड्रियनअरोयो कॅलेशी सहमत आहे की ते खूपच यांत्रिक आहे, मी हे कधीतरी वाचले आहे आणि आपण सहाव्या पृष्ठावर सोडले आहे, ते आपल्याला पॅकेजेसच्या कोणत्या आवृत्ती वापरण्यास सांगतात कारण अन्यथा सूचना कार्य करणार नाहीत (की माझ्या मते) लवचिकतेचा अभाव दर्शविते). मला वाटते की आपल्या स्वतःच्या कल्पनांपेक्षा काही घेणे चांगले आहे, आपल्यास इच्छित पॅकेजेस संकलित करा, अगदी काही प्रोग्राम करा, लिनक्स कर्नल आणि शांततेने संकलित करा.
ग्रीटिंग्ज!
uuuoooohh !! हे पोस्ट जितके होते तितके मी कधीही मिळविले नाही.
कृपया सुरू ठेवा 😀
मला काय माहित नाही काय आहे:
त्रुटी: कोणतेही मल्टीबूट हेडर आढळले नाही.
त्रुटी आपल्याला प्रथम कर्नल लोड करणे आवश्यक आहे
जर ते काही सांत्वन देत असेल तर मीही अशीच चूक केली. गिटहबमधील स्त्रोत वापरण्याचा प्रयत्न करा, तेथे त्रुटी आधीच सुटली आहे. तरीही मला वाटते आपण grub.cfg लाइन "मल्टीबूट /next/START.ELF" वरुन "कर्नल /next/START.ELF" वर बदलल्यास ते कार्य करू शकेल. मला नक्की ठाऊक नाही.
सर्व प्रथम, भव्य प्रवेशद्वार 🙂
ग्रबमधून कर्नल लोड करताना मला सारखीच समस्या येत आहे. जरी गिटहब स्त्रोत वापरणे किंवा कर्नलसाठी मल्टीबूट बदलणे ...
त्रुटी: कोणतेही मल्टीबूट हेडर आढळले नाही.
त्रुटी: लोड केलेले कर्नल नाही
आपण कंपाईलर म्हणून रेंगा वापरत आहात? जीसीसीसाठी ते बदला
आपल्याला लिंकर स्क्रिप्ट वापरण्याचे आठवते आहे? दुवा साधणार्याला (आमच्या बाबतीत एलडी) फाइलमध्ये प्रत्येक वस्तू कुठे ठेवणार आहे हे माहित असणे आवश्यक आहे. या प्रकरणात मल्टीबूट शीर्षलेख सुरवातीस असणे आवश्यक आहे.
आपण सीएमके सिस्टम वापरत आहात? आपण याचा वापर केल्यास मला असे वाटते की हे अयशस्वी होणार नाही.
जर हे आपल्यासाठी कार्य करत नसेल तर मी दुसरा उपाय शोधण्याचा प्रयत्न करेन.
[+१००]
अति उत्तम !!!
हे खरोखर छान आहे 🙂
मी माझी टोपी काढली. प्रभावी पोस्ट. अभिनंदन.
ओहो!
आपण ब्राउझर न वापरता एचटीएमएल 5 आणि जावास्क्रिप्टमध्ये बनविलेले अनुप्रयोग उघडू शकले तर ते चांगले होईल, हे शक्य आहे काय?
मी त्यांच्याबद्दल मूळ अनुप्रयोगांबद्दल बोलत आहे.
तर या ऑपरेटिंग सिस्टमसाठी प्रोग्राम करणे सोपे होईल 😀
या प्रकरणात मी हे करणार नाही कारण यामागे अजून बरेच काम लागलेले आहे परंतु तेथे "ऑपरेटिंग" नावाची एक ऑपरेटिंग सिस्टम आहे जी आपण म्हणता त्याप्रमाणे करते. खरं तर कमांड लाइन जावास्क्रिप्ट आहे आणि कॅनव्हास जावास्क्रिप्ट फंक्शन वापरुन विंडोज रेखांकित केल्या आहेत. निन्टेन्डो अभियंत्यांनी हे केले आणि आता ते ओपन सोर्स आहे.
http://code.google.com/p/es-operating-system/
वल्ला, माहितीबद्दल धन्यवाद 😀
मी एक नजर टाकीन
जो स्वत: चा ओएस बनवू शकतो तो शांततेने मरू शकतो, कारण त्याच्याद्वारे बौद्धिक पातळी प्राप्त करणे आवश्यक आहे; हे त्याला स्वर्ग किंवा नरकात वितरित करते.
पोस्टिंगचा तुकडा.
सुरवातीपासून बनविलेले एक सभ्य ऑपरेटींग सिस्टम असे म्हटले जाऊ शकते असे आतापर्यंत कोणालाही माहित नाही, अगदी सुरुवातीलाच म्हणाल तसे लिनक्स टोरवाल्डसुद्धा नाही, कारण हे यूनिक्स स्रोत पासून सुरू झाले आहे आणि इतर सर्व काही सामान्यपणे अधिक सामान्यपणे लिहिलेले आहे. एका व्यक्तीपेक्षा, आयुष्य खूपच लहान आहे आणि खरोखरच सुरवातीपासून सुरुवात करणे कोणालाही न समजण्यासारखे आहे, जरी त्याउलट हवे असले तरीही, लिनक्स टोरवाल्ड्सने कॉपी आणि पेस्ट करण्याच्या अनेक त्रुटींमध्ये हे दर्शनीय आहे
युनिक्स स्त्रोत बंद आहेत, मिनीक्सचा वापर आहे ... जे काहीतरी वेगळंच आहे.
आणि ज्यांनी QDOS केले ते काय?
कशावर आधारित होते?
मी काय पहात आहे, ज्याची स्वतःची ऑपरेटिंग सिस्टम नाही आहे कारण त्यांना नको आहे, हाहााहा.
आता गंभीरपणे, अतिशय मनोरंजक! माझ्या मर्यादित प्रोग्रामिंग ज्ञानाच्या पलीकडे बरेच काही आहे, परंतु मी या मालिकेचे इतर भाग अपेक्षेने वाचेन.
पोस्ट धन्यवाद!
तुम्ही मला ओ ओ चेहरा सोडून सोडले आहे ... कोणाच्याही योगदानाला कमी लेखण्याच्या हेतूशिवाय, मी नुकतेच पाहिलेला हा सर्वात "प्रो" आहे. साभार.
खूप चांगला लेख, áड्रियन. कृपया सुरू ठेवा…
आपण एप्रिल फूल डे वर थट्टा करीत आहात का ?, याचा अर्थ असा होऊ नका "इमुलेटिंग लिनस टोरवाल्ड्स: स्क्रॅचपासून स्वतःची ऑपरेटिंग सिस्टम तयार करा." मला असे वाटत नाही की जे तंत्रज्ञान किंवा विद्यापीठाच्या काही संस्थांमध्ये करिअर करतात त्यांच्यासाठी ते अवघड आहे; पण माझ्यासाठी मी एक नवशिक्या धनुर्धारी आहे (असे काही लोक आहेत ज्यांना आपण "नूब" म्हणतो पण मी स्वत: ला अधिक नवशिक्या मानून काहीसे आळशी मानतो) असे वाटते की जमिनीवर पाऊल ठेवू नये. तथापि, हा लेख बर्याच प्रकारची कुतूहल निर्माण करतो आणि त्याच्या संपादकांबद्दल, संशयास्पद आणि संशयास्पद प्रतिसाद न देता; पहिली गोष्ट म्हणजे मी हे बहुमोल साहित्य समजून घेण्याचा प्रयत्न करतो.
धन्यवाद अॅड्रियन अॅरोयो कॅले, उत्कृष्ट कार्य आणि ज्ञानाचे उदात्त वितरण.
एलईएल उत्कृष्ट पोस्ट, सुरू ठेवा.
किती छान पोस्ट, हीच माझी आठवण झाली desde linux. अप्रतिम.
छान पोस्ट, खूप खूप धन्यवाद
मला लिंक डॉट फाइल काय करते हे समजले नाही, कोणी मला ते समजावून सांगू शकेल काय?
लिंक.ld फाइल लिंकरला (या प्रकरणात एलडी) सांगते जेथे कोडचा प्रत्येक भाग परिणामी फाईलमध्ये असावा. आम्ही प्रविष्टी बिंदू देखील परिभाषित करतो कारण आमच्याकडे ऑपरेटिंग सिस्टम नसल्यामुळे आम्ही मुख्यला सामान्य प्रोग्राम म्हणून वापरू शकत नाही, या प्रकरणात आम्ही प्रारंभ कार्य निवडतो.
आपली सर्व पोस्ट छान आहे! 7 ची प्रतीक्षा करीत आहे! मला काय शंका असेल तर, उदाहरणार्थ, जर मला फक्त ओएसशिवाय अल्गोरिदम चालवायचा असेल तर मी काय वापरू शकतो आणि काय नाही हे मला कसे कळेल?
आपण हे असे वापरल्यास आपण stdlib मधून काहीही वापरण्यास सक्षम नसाल, जे प्रत्येकाने प्रत्यक्षात वापरलेलेच आहे (कोणतेही मालोक, विनामूल्य, प्रिंटफ, स्कॅनफ, स्ट्राइकम्प वगैरे नाही). प्रत्येक गोष्ट थेट मेमरी किंवा एएसएम कडून लागू केली जावी. कदाचित उच्च अध्यायात मी आपल्याला ऑपरेटिंग सिस्टमसाठी सी लायब्ररी कशी स्थापित करावी ते दर्शवेल. आपण सी ++ वापरल्यास आपण अपवाद आणि नवीन आणि ऑपरेटर हटवू शकत नाही (आणि निश्चितच अधिक).
मला वाटते हे हे कसे करावे याबद्दल आपल्याला चांगली कल्पना देऊ शकते.
हॅलो, सुमारे years वर्षांपूर्वी मी अशाच प्रकाशनाचे अनुसरण केले आणि एक मायक्रोकेनल विकसित केले जे त्याच मार्गाने सुरू होते, त्यात सुधार करण्याचे काही पैलू आहेत, परंतु हे आपल्याला स्वारस्य असू शकते, हे संरक्षित मोडमध्ये चालते, मल्टी-टास्किंग चालवते आणि मेमरी व्हर्च्युलायझेशन करते, अलीकडे मी त्यावर स्थापित करण्यायोग्य बनविण्यासाठी डिस्क ड्राइव्हर आणि सीडी ड्राइव्हवर कार्य केले आणि फक्त थेट सीडीवरच चालत नाही ... ग्रीटिंग्ज.
प्रिय, आज्ञा अंमलात आणताना मला एक त्रुटी आली:
जीसीसी -ओ प्रारंभ.इएलएफ कर्नल.ओ नेक्स्टकर्नेल_मैन.ओ -लिंक.ल्ड -नोस्टडलिब -एफपीआयसी -फ्रेस्टँडिंग -एलजीसीसी
link.ld: 5 वाक्यरचना त्रुटी
कलेक्ट 2: एरर: एलडीने 1 बाहेर पडा
link.ld
. = 0x00100000;
.मूल्टीबूट_हेडर: {
* (. मल्टीबूट_हेडर)
}
5 व्या ओळीत मला त्रुटी दिसत नाही, कोणीतरी सारखे आहे काय?
मी व्हर्च्युअल बॉक्समध्ये व्हर्च्युअलाइज्ड डेबियन व्हीजीसह कार्य करीत आहे
"जोडा"; * च्या शेवटी (. मल्टीबूट_हेडर)
उत्कृष्ट पुढाकार, मी नक्कीच या पोस्टच्या अध्यायांचे अनुसरण करेन, त्यातून बरेच काही शिकण्याचा माझा मानस आहे. आम्हाला शिकवण्यासाठी वेळ दिल्याबद्दल धन्यवाद. या संदर्भात एकच तपशील लक्षात घ्यावा की लिनस टोरवाल्ड्स कोणत्याही ऑपरेटिंग सिस्टमचा निर्माता नाही, त्याने जीएनयू / लिनक्स सिस्टमची कर्नल तयार केली (जी इतर ओएसमध्ये वापरली गेली आहे) अजूनही उपयुक्त आहे, परंतु बहुतेक ओएस तयार करण्यासाठी रिचर्ड स्टालमॅनला आवश्यक क्रेडिट देणे महत्वाचे आहे.
इनपुटबद्दल धन्यवाद आणि मी आशा करतो की आपण माझ्या निरीक्षणाचा विचार केला.
मी या विषयावर थोडा वेळ गोंधळ घालत आहे, हेडलाईन वाचताच मला रस निर्माण झाला. पण संदेश मिळत राहतो
त्रुटी: कोणतेही मल्टीबूट हेडर आढळले नाही.
त्रुटी आपल्याला प्रथम कर्नल लोड करणे आवश्यक आहे
मी गिथबवरील रेपोवर जे घेतो ते अपलोड केले https://github.com/rkmax/GenyOS
माझ्या बाबतीतही असेच घडते. तुला तोडगा सापडला का?
एक प्रश्न मी सिंटॅक्सचा परिचय करुन देण्यास सुरुवात केली आणि मेन्यूनेन्ट्री लाइन मला कमांड नॉटला सांगते की मला का हे सांगू शकते
हे मी करतो
ब्लॅक @ ब्लॅक-पीसी: ~ / ब्लॅकरुट $ मेन्यूएन्ट्री «नेक्स्टडिव्हल {
मेन्यूएन्ट्री: कमांड आढळली नाही
या सामग्रीची सामग्री कमांड लाइनमध्ये प्रविष्ट केलेली नाही, परंतु आपण तयार केलेल्या फाईलमध्ये grub.cfg म्हणतात
उत्कृष्ट लेख, धन्यवाद!
नेत्रदीपक… !! हा फक्त हरवलेल्या दुव्यासारखा आहे.
मला तुमचे एम्युलेटिंग लिनुस टोरवाल्ड्स शिकवण्या आवडतात पण मला असे समजत नाही असे एक पाऊल पुढील गोष्टी आहेः
आता आम्ही आमच्या फोल्डरमध्ये START.ELF वर / पुढील कॉपी करतो जी आमच्या ऑपरेटिंग सिस्टमच्या रूटची नक्कल करते. आम्ही कन्सोलसह आमच्या नवीन ऑपरेटिंग सिस्टमच्या मूळ फोल्डरवर जातो आणि दोन फायली असल्याचे सत्यापित करतो: एक /boot/grub/grub.cfg आणि दुसरी /next/START.ELF.
आम्ही वरच्या निर्देशिकेत जाऊ आणि GRUB-mkrescue नावाच्या GRUB सह आयएसओ क्रिएशन युटिलिटीला कॉल करतो
कोणी मला ते समजावून सांगू शकेल: पी
फक्त कमीतकमी आयएसओ निर्माण करण्यासाठी जी जीआरबी लोड करू शकते आम्ही कर्नल (आयएसओच्या / कोणत्याही फोल्डर्स) /next/START.ELF आणि GRUB कॉन्फिगरेशन फाईलवर (आयएसओ / कोणत्याही फोल्डर) / बूट / वर कॉपी करतो grub / grub.cfg. एकदा हे पूर्ण झाल्यावर आम्ही अद्याप आयएसओ वर ग्रब स्थापित केले नाही आणि एक युटिलिटी आहे जी फोल्डरमधून आयएसओ व्युत्पन्न करते आणि ग्रब-मिक्रेस्क्यू नावाची ग्रब स्थापित करते. मग आम्ही शेवटी GRUB स्थापित केलेल्या बूट करण्यायोग्य आयएसओसह समाप्त करू, जे नंतर START.ELF योग्यरित्या कार्यान्वित करण्यासाठी कॉन्फिगरेशन वाचू शकते. मी स्वत: ला स्पष्ट केले आहे की नाही हे मला माहित नाही, परंतु आम्ही काय करतो ते एक प्रकारची खोटी फाइल सिस्टम आहे ज्याद्वारे आम्ही आयएसओ व्युत्पन्न करतो.
बुएन्सिमो
बरं, खरोखरच नवीन प्रणालीकडे लक्ष द्या पण जर लिनक्स सुधारित केले तर उदाहरणार्थ सर्व्हर घटकासह लिनक्स एक्सोन्यूक्लियस तयार करणे जे इच्छित असल्यास मायक्रोन्यूक्लियस म्हणून कार्य करते, म्हणजेच सुपर आणि लिनक्स असेल मायक्रोनुक्लियस वर्तन असलेली एक एक्सो स्ट्रक्चर.
दुसरी गोष्ट म्हणजे मी प्रोग्रामिंगमध्ये तज्ञ नाही, फक्त काही चीझी सी ++ आणि काही जावा, लिनक्स कर्नल प्रोग्रामला मॉड्यूल देणे, आतड्यात टाकणे, त्यात बदल करणे इत्यादी पुरेसे आहे.
निःसंशयपणे मला आधीच सुट्टीवर करावे लागेल.
हे चांगले आहे आणि कोणत्या प्रोग्राममध्ये ते डिझाइन आणि कोड करते?
कृपया मला ते उत्तर द्या
आपल्या गिटमधून संकलित करताना मला मिळेल:
[jmponce @ jar build] ma cmake ..
- नेक्स्टरूट निर्देशिका तयार करत आहे
- आयएसओ स्क्रिप्ट व्युत्पन्न करत आहे
DESTDIR = पुढील स्थापना करा
./iso.sh
- आढळले ऑक्सीजन: / यूएसआर / बिन / डोक्सीजन (आढळले आवृत्ती "1.8.9")
- कॉन्फिगरेशन पूर्ण झाले
- व्युत्पन्न झाले
- बिल्ड फायली यावर लिहिल्या गेल्या आहेत: / होम / जेम्पोन्स / नेक्स्ट-डायव्हल / बिल्ड
[jmponce @ jar build] $ बनवा
START.ELF लक्ष्यावरील अवलंबन स्कॅन करीत आहे
[%%] बिल्डिंग एएसएम-एटीटी ऑब्जेक्ट एसआरसी / सीएमके फायल्स / START.ELF.dir / प्रारंभ / boot.asm.o
[१%%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरपी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / नेक्स्टशेललाइट सीपीपी.ओ
[२१%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / ND_Screen.cpp.o
[२%%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरपी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / नेक्स्ट केर्नेल_मेन.क.पी.ओ
[% 35%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरपी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / ND_Panic.cpp.o
[%२%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / ND_Timer.cpp.o
[%०%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / एनडी_मेमरी.क.पी.ओ
[57%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरपी / सीएमके फायल्स / START.ELF.dir / स्टार्ट / ND_Ports.cpp.o
[% 64%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमके फायल्स / START.ELF.dir / स्टार्ट / एनडी_जीडीटी सीपीपीओ.
[%१%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमके फायल्स / START.ELF.dir / स्टार्ट / एनडी_आयएसआर सीपीपी.ओ
[% 78%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरपी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / एनडी_सटरिंग.क.पी.ओ
[% 85%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमके फायल्स / START.ELF.dir / स्टार्ट / एनडी_आयआरक्यू सीपीपीओ.
[% २%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमकेफाइल्स / START.ELF.dir / स्टार्ट / एनडी_आयडीटीसीपीपीओ.
[100%] बिल्डिंग सीएक्सएक्स ऑब्जेक्ट एसआरसी / सीएमके फायल्स / START.ELF.dir / स्टार्ट / एनडी_केयबोर्ड सीपीपी.ओ
CXX कार्यान्वित करण्यायोग्य START.ELF चा दुवा साधत आहे
/ यूएसआर / बिन / एलडी: विसंगत /usr/lib/gcc/x86_64-unज्ञ-linux-gnu/4.9.2/libgcc.a -lgcc शोधत असताना वगळले
/ usr / bin / ld: -lgcc शोधू शकत नाही
कलेक्ट 2: एरर: एलडी एक्झिट स्टेटस 1 परत केला
src / CMakeFiles / START.ELF.dir / build.make: 402: लक्ष्य 'src / START.ELF' साठी अयशस्वी सूचना
करा [2]: *** [src / START.ELF] त्रुटी 1
सीएमकेफाइल्स / मेकफाईल 2: 106: लक्ष्य 'src / CMakeFiles / START.ELF.dir / all' साठी अयशस्वी सूचना
[1]: *** [src / CMakeFiles / START.ELF.dir / all] त्रुटी 2
मेकफाईल: ११117: लक्ष्य 'ऑल' च्या सूचनांमध्ये अपयशी
बनवा: *** [सर्व] त्रुटी 2
त्रुटी असे दिसते आहे की आपल्याकडे 64-बिट आवृत्ती असल्यामुळे आणि ते संकलित प्रणालीला 32-बिट वापरण्यास भाग पाडले गेल्याने ते llibgcc शोधू शकले नाही. आपण आपल्या डिस्ट्रॉ किंवा त्याहून सुसंगतता पॅक स्थापित करावा, 32-बिट सिस्टम वापरा.
माझ्याकडे 32 बिट्स आहेत आणि मला तीच त्रुटी प्राप्त झाली आहे, म्हणजे आपण ऑपरेटिंग सिस्टम किंवा आर्किटेक्चरचा अर्थ काय? माझे 64 बिट आहे, परंतु मी 32 बिट उबंटू वापरत आहे, आर्थिक समस्या विचारू नका, मी हे सर्व सांगतो.
उत्कृष्ट विषय, मोठ्या व्याप्तीच्या प्रतीक्षेत. चीअर्स
छान मी आणखी आशा करतो
नमस्कार, मी एक तरुण राजदूत आहे ज्यास सर्व प्रोग्रामिंग आणि प्लॅटफॉर्मचे समर्थन करणारी एक ऑपरेटिंग सिस्टम तयार करण्याची इच्छा आहे जेणेकरून विकासकांना पीसीवर शक्तिशाली मशीन्स किंवा अनुप्रयोग किंवा प्रोग्राम नसतील.
म्हणूनच मला या पोस्टमध्ये रस आहे परंतु जेव्हा मी तुझी गाणी डाउनलोड करतो किंवा तयार करण्याचा प्रयत्न करतो तेव्हा मी आज्ञा कार्यान्वित करेपर्यंत सर्व काही कार्य करते.
"ग्रब-एमकेरेस्क्यू: चेतावणीः आपला xorriso" rgrub2-बूट-माहिती "ला समर्थन देत नाही. काही वैशिष्ट्ये अक्षम केली गेली आहेत. Xorriso 1.2.9 किंवा नंतरचा वापरा ..
grub-mkrescue: चेतावणी: आपला xorriso "rgrub2-बूट-माहिती" ला समर्थन देत नाही. आपली कर्नल प्रतिमा खूप मोठी आहे. डिस्क बूट अक्षम केले गेले आहे. Xorriso 1.2.9 किंवा नंतरचा वापरा .. »
मला अनुप्रयोग आणि वेबबद्दल बरेच काही माहित असल्याने मला खरंच कल्पना नाही परंतु मला ग्रबबद्दल काहीही माहित नाही
आपल्याला आपल्या डिस्ट्रॉवर xorriso प्रोग्राम अद्यतनित करण्याची आवश्यकता असू शकते. आपण कोणती डिस्ट्रो आणि आवृत्ती वापरता?
मी xubuntu 14.04lts वापरतो आणि xorriso चालवण्याचा प्रयत्न करतो पण शेल मला सांगते की ते सापडत नाही आणि मी स्थापित xorriso स्थापित करतो जरी मला प्रामाणिकपणे काही प्रतिसाद अपेक्षित होता कारण मला लिनक्स हे मध्ये माहित नसलेल्या गोष्टी स्थापित करण्याचा मला एक वाईट अनुभव आला. . मी आत्ताच ते अद्यतनित करेन आणि जे घडले ते सांगेन
त्यानंतर सॉफ्टवेअर सेंटरवरून किंवा फक्त टर्मिनलवरून 'सूरो ऑप्ट-गेट इनस्टॉल xorriso' वर xorriso स्थापित करा.
आपण मला सांगितले त्या सर्व गोष्टी मी आधीच केल्या आहेत आणि माझ्या जीटस आणि माय या दोन्हीसह मी हा झोरिसो 1.3.2 मिळवितो: रॉकरिज फाइल सिस्टम मॅनिपुलेटर, लिबर्निया प्रोजेक्ट.
ड्राइव्ह चालू: -आउटदेव 'स्टिडिओ: नेक्स्टडिव्हल.आइसो'
मीडिया चालू: stdio फाईल, अधिलिखित
माध्यमांची स्थिती: रिक्त आहे
माध्यम सारांश: 0 सत्रे, 0 डेटा ब्लॉक, 0 डेटा, 1901 मी विनामूल्य
आयएसओ प्रतिमेत जोडली: निर्देशिका '/'''/tmp/grub.OEqSzV'
xorriso: अद्यतनः 546 सेकंदात 1 फायली जोडल्या
xorriso: अयशस्वी: स्त्रोत फाइल '/ मीडिया / gaia / ज्युपिटर 1 / शेलसिस्टम / Nextroot / Nextroot' चे गुणधर्म निश्चित करू शकत नाही: अशी कोणतीही फाइल किंवा निर्देशिका
xorriso: अद्यतनः 546 सेकंदात 1 फायली जोडल्या
xorriso: गर्भपात करणे: -बालबार_पर 'अयशस्वी' चे सामना 'अपयशी'
आणि कॉर्डरॉय मला समजत नाही की माझी रचना /nextroot/boot/grub/grub.cfg आणि नेक्स्ट्रोट / पुढच्या / START.ELF आहे
धन्यवाद, मी पुढे जाण्यास तयार आहे, एका मित्राने मला मदत केली आणि मला सांगितले की मी काय चुकीचे केले आहे ते निर्देशिकाची संस्था आहे, म्हणून मी ते सोडविले आणि तेच आहे
मला माफ करा, आपण कोणती प्रक्रिया केली हे मला सांगता येईल कारण मला बूट करण्यास त्रुटी आढळली नाही: अशी फाइल किंवा निर्देशिका नाही
बूट करण्यायोग्य डिव्हाइस नाही.
चीअर्स! आपण येथे जे स्पष्टीकरण देत आहे त्यासह आपण मला ईमेल पाठवत असाल तर मी आपल्याला अनुकूलता विचारणार आहे, मी थोडा गोंधळात पडला आहे आणि आपल्याकडे असलेल्या स्पष्टीकरणासह माझे जे काही आहे त्याची तुलना करण्याची मला गरज आहे, कदाचित जे मला स्पष्ट नाही ते आहे की नाही ग्रब सीएफजी ची निर्मिती टर्मिनल जीसीसीमध्ये केली जाते किंवा कोठे आहे? आभारी आहे मित्रा!
आपण कोणत्याही मजकूर संपादकासह grub.cfg फाइल तयार केली आणि आपण ती PROJECT_FOLDER / boot / grub / grub.cfg मध्ये जतन करणे आवश्यक आहे.
नमस्कार अॅड्रियन, सर्व प्रथम तुमचे अभिनंदन करतो आणि तुमच्या योगदानाबद्दल धन्यवाद.
तुम्हाला माहिती आहे की मी हे सराव करीत आहे आणि तुमच्या शिकवणीनंतर मी हे एकत्र ठेवण्यास सुरवात केली, तथापि प्रारंभ केल्यानंतर मला पहिली त्रुटी आढळली
$ -ओ-कर्नल.ओ-सी कर्नल.एएसएम म्हणून
bash: as: कमांड आढळली नाही ...
तत्सम आज्ञा आहेतः
'सा'
'एसी'
मी फेडोरा २० वर काम करत आहे, आणि मला यासंदर्भात तोडगा सापडत नाही, मी जीसीसी किंवा गॅसमध्ये काहीतरी बदलले पाहिजे की नाही याबद्दल तुमच्या मार्गदर्शनाची मी प्रशंसा करीन
आगाऊ धन्यवाद
आपण जीएएस स्थापित करणे आवश्यक आहे जेणेकरून मी त्रुटी कोड पाहू शकेल. माझ्याकडे हाथात फेडोरा नाही परंतु सिद्धांतानुसार आपण जीसीसी-सी स्थापित केले ++ आपण संपूर्ण जीसीसी स्वीट स्थापित कराल आणि जीएनयू सामान्यत: त्यासह येईल.
मी तुझ्याबरोबर आहे, मला सी ++, सी # बद्दल काहीतरी माहित आहे (जरी या प्रकरणात हे शेवटचे फारसे उपयुक्त नाही) परंतु वाईट गोष्ट म्हणजे मला अजूनही अनुभवाचा अभाव आहे, मी सी भाषा कधीच हाताळत नाही, आपले प्रकाशन उत्तम आहे, माझ्याकडे वेळ असल्यास मला काही सांगायचे नाही. धन्यवाद.
मोठ्या मदतीबद्दल तुमचे आभार….
मला लिनक्स आवडतो तो सर्वात चांगला जिल्हा आहे, माझ्या विंडोजसाठी सत्य कचरा आहे हे मला माहित आहे की लिनक्सचा निर्माता विंडोजचा निर्माता आहे.
हॅलो मला ग्रब मध्ये एक एरर मिळाली
त्रुटी: फाईल /next/START.ELF आढळले नाही
त्रुटी: आपल्याला प्रथम कर्नल लोड करणे आवश्यक आहे
तुम्ही मला मदत कराल आणि गुगली पण मला सापडत नाही
कृपया, हेलो वर्ल्ड संदेश मी कसा दर्शवू शकतो? मी एक नवशिक्या आहे आणि मला अद्याप पुरेसे माहिती नाही
पुढील गोष्टी माझ्या बाबतीत घडतात:
जीसीसी -ओ प्रारंभ.इएलएफ कर्नल.ओ नेक्स्टकर्नेल_मैन.ओ -लिंक.ल्ड -नोस्टडलिब -एफपीआयसी -फ्रेस्टँडिंग -एलजीसीसी
/ यूएसआर / बिन / एलडी: कर्नल.ओ: पीआयई ऑब्जेक्ट बनवताना प्रतीक `स्टॅक 'च्या विरूद्ध पुनर्स्थित R_X86_64_32 वापरले जाऊ शकत नाही; -fPIE सह पुन्हा कंपाईल करा
/ usr / bin / ld: अंतिम दुवा अयशस्वी: आउटपुटवरील प्रस्तुत नसलेला विभाग
कलेक्ट 2: एरर: एलडीने 1 बाहेर पडा