2009-03-16 10 views
8

मुझे प्रोग्रामिंग चुनौतियों को पसंद है, और कर्नेल लिखना एक प्रोग्रामिंग चुनौती प्रतीत होता है।वर्चुअल मशीनों में कर्नेल का विकास और परीक्षण करना

दुर्भाग्य से, कर्नेल विशेष रूप से परीक्षण करने के लिए कठिन हैं क्योंकि वे मूल रूप से ऑपरेटिंग सिस्टम का मूल हैं और इसलिए उन्हें आसानी से ऑपरेटिंग सिस्टम के शीर्ष पर नहीं चलाया जा सकता है।

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

वर्चुअल मशीनों का उपयोग कर कर्नेल (सी + असेंबली) को विकसित और परीक्षण करने का सबसे आसान/सर्वोत्तम तरीका क्या है?

उत्तर

11

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

इसके अलावा, आप हर 2 मिनट में ओएस को बूट करने की संभावना से अधिक होंगे, इसलिए यह वर्चुअल पीसी को बूट छवि & आग बनाने के लिए स्वचालित तरीके से स्वचालित तरीके से मदद करता है।

मैंने कर्नेल को बूट करने के लिए सभी आवश्यक सामग्री के साथ एक GRUB बूट फ्लॉपी छवि बनाई है। रूट से जुड़ें। मैं इस फ़ाइल को वर्चुअल प्रोजेक्ट निर्देशिका में कॉपी करने के लिए बैच फ़ाइल का उपयोग करता हूं, छवि को अपने कर्नेल की प्रतिलिपि बनाने के लिए FAT Image Generator का उपयोग करें। फिर बस वर्चुअल पीसी प्रोजेक्ट लॉन्च करें। Vola! मेरी बैच फ़ाइल से

अंश:

COPY Images\Base.vfd Images\Boot.vfd /Y 
fat_imgen.exe modify Images\Boot.vfd -f Source\Bin\KERNEL.BIN 
COPY Images\Boot.vfd Emulators\VirtualPC\ /Y 
START Emulators\VirtualPC\MyOS.vmc 

एक आखिरी सुझाव: कम करने के लिए VirtualPC प्रक्रिया प्राथमिकता सेट करें - इस पर मुझ पर भरोसा! मुझे कुछ कोड का आदान-प्रदान करने में खुशी होगी!

उपकरण: डीजीजेपीपी, NASM, GRUB।
कोड: osdev.org, osdever.net

+0

मैं अपने कंप्यूटर में एक फ्लॉपी डिस्क पाठक की जरूरत नहीं है, लेकिन मुझे लगता है मैं फ्लॉपी छवियों के लिए एक की जरूरत नहीं है। आपके निर्देश सटीक प्रतीत होते हैं सिवाय इसके कि मैं लिनक्स का उपयोग करता हूं ... उस ओएस के लिए विशेष रूप से कुछ भी? – luiscubal

+0

ठीक है, यहां मैं छोटा पड़ता हूं - मेरा लिनक्स अनुभव बहुत सीमित है। जो मैं समझता हूं: एक फ्लॉपी छवि बनाना और फ़ाइलों को कॉपी करना विंडोज़ की तुलना में बहुत आसान है, लेकिन उस क्षेत्र में मुझसे कोई भी जवाब शायद गलत दिशा-निर्देश होगा। हालांकि, लिनक्स के लिए वीएमवेयर देखें। यह अच्छी चीजें है! – NTDLS

+0

लिनक्स: संकलक स्पष्ट रूप से gcc है, djgpp नहीं (जो स्वयं जीसीसी का बंदरगाह है)। –

0

शायद बस एक मशीन स्थापित करना (x86, मुझे लगता है), और फिर जांच करें कि बूट के दौरान यह कैसा व्यवहार करता है। मेजबान मशीन की फ़ाइल सिस्टम में एक या अधिक फ़ाइलें होनी चाहिए जो वर्चुअल मशीन की फ़ाइल सिस्टम के रूप में कार्य करती हैं, और फिर आपको कुछ बूट सेक्टर जानकारी डालना होगा जो आपके इन-डेवलपमेंट कर्नेल को बूट करने का कारण बनता है।

इसका मतलब यह होगा कि मेजबान पर निर्माण प्रणाली को वर्चुअल मशीन की फ़ाइल सिस्टम में कर्नेल लिखने का एक तरीका है, जो कठिनाई में भिन्न हो सकता है।

आकस्मिक एक चुनने, bochs को support बाहर से बूट मीडिया संपादन dd आदि

0

यह सीधा है जैसे मानक उपकरण का उपयोग कर रहा है। वर्चुअल मशीन सेट अप करें, अपना कर्नेल लिखें, वर्चुअल मशीन पर कॉपी करें, वर्चुअल मशीन को बूट करें।

यदि आप अधिक विशिष्ट सलाह चाहते हैं तो आपको अधिक विशिष्ट होने की आवश्यकता होगी।

1

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

हम एक स्थिर ग्राब का उपयोग करते हैं जो निर्माण प्रक्रिया के दौरान अंतिम आईएसओ में कॉपी किया जाता है।कुछ चीजों को तब तक होना चाहिए जब तक कि ओएस स्वयं होस्टिंग न हो जाए। मैं अत्यधिक अनुशंसा करता हूं कि आप अपनी खुद की यूजर स्पेस सी लाइब्रेरी को लागू न करें जब तक कि आप वास्तव में स्क्रैच से सब कुछ नहीं करना चाहते हैं .. आप जल्द ही स्वयं होस्टिंग कर लेंगे :)

हालांकि सिमिक्स गैर-मुक्त है, लेकिन मैं अत्यधिक अनुशंसा करता हूं (और इसके डिबगिंग/प्रोफाइलिंग टूल में बनाया गया) अपने कर्नेल बनाते समय। एक बार जब आपके पास कुछ प्रकार का कर्नेल कंसोल और लॉगर होता है, तो क्यूईएमयू बहुत अच्छा काम करता है।

0

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

आप इस उपक्रम के बारे में वास्तव में गंभीर हैं, तो आप निश्चित रूप से/अपने डिबग/कोड को चलाने के निर्माण/एक एमुलेटर या वी एम के खिलाफ चक्र तैनात करने के लिए चाहते हैं। किसी ने बोच का उल्लेख किया, जो बहुत लोकप्रिय है। यदि इम्यूलेशन की गति आपकी बात है, तो क्यूमु नामक एक एमुलेटर भी है जो BOCHS से तेज़ है।

मुझे लगता है कि अपने विकास के वातावरण उन देव वातावरण के लिए उपलब्ध प्रलेखन के कारण लिनक्स या विंडोज, जो फिर से शायद एक बुद्धिमान विकल्प होगा अंतर्गत चलाने के सुझाव देना चाहेंगे।

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

संबंधित मुद्दे