2010-01-18 9 views
9

मैं बस सोच रहा हूं कि आप सी ++ में एक फ्रीस्टैंडिंग प्रोग्राम कैसे बनाते हैं?आप एक फ्रीस्टैंडिंग सी ++ प्रोग्राम कैसे बनाते हैं?

संपादित करें: फ्रीस्टैंडिंग द्वारा मेरा मतलब है कि एक प्रोग्राम जो होस्टेड एनवायरोमेंट (उदाहरण के लिए ओएस) में नहीं चलता है। मैं चाहता हूं कि मेरा प्रोग्राम ओएस के बजाए कंप्यूटर लोड करने वाला पहला प्रोग्राम हो।

+2

"फ्रीस्टैंडिंग" परिभाषित करें। आप बाहरी पुस्तकालयों पर कोई निर्भरता का मतलब नहीं है? ओएस और पर्यावरण के लिए क्या? –

+0

में फ्रीस्टैंडिंग के रूप में? कोई ऑपरेटिंग सिस्टम नहीं है? कोई गतिशील पुस्तकालय नहीं? –

+0

@ जोश केली: "फ्रीस्टैंडिंग" से मेरा मतलब है कि एक प्रोग्राम जो मूल रूप से कंप्यूटर पर लोड किया गया पहला प्रोग्राम है (उदाहरण के लिए ओएस)। मुझे पता है कि ज्यादातर लोग एएसएम में बूट-स्ट्रैपर लिखते हैं लेकिन मैं सोच रहा था कि सी ++ में ऐसा करना संभव है या नहीं। –

उत्तर

10

इस लेख पर एक नज़र डालें। यदि आप एक से अधिक धागे चाहते हैं तो आपको रनटाइम पर ऑब्जेक्ट बनाना और अपना शेड्यूलर बनाना होगा, तो आपको अपना हीप मैनेजर (नया/हटाएं) लिखना होगा।

2

आपकी स्पष्टीकरण के साथ भी, जवाब यह है कि यह निर्भर करता है - सटीक बूट अनुक्रम हार्डवेयर पर निर्भर करता है - हालांकि इसमें काफी समानता है। बूट लोडर आम तौर पर एक पूर्ण पते पर लोड होता है, और जिस फ़ाइल में निहित फ़ाइल को अक्सर स्मृति में पढ़ा जाता है। इसका मतलब है कि एक सामान्य लिंकर के बजाय, आप आमतौर पर "लिंकिंग लोकेटर" का उपयोग करते हैं। जहां एक ठेठ लिंकर एक निष्पादन योग्य फ़ाइल को स्थानांतरित करने और लोड करने के लिए तैयार करता है, एक लोकेटर एक निष्पादन योग्य बनाता है जो पहले से ही लागू किए गए सभी स्थानान्तरण के साथ एक सटीक पते पर चलाने के लिए सेट हो चुका है। उन्हें याद रखने के लिए पुरानी पुरानी लोगों के लिए, यह आमतौर पर एक एमएस-डॉस .COM फ़ाइल की तरह काफी सुंदर है।

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

2

गूगल एक शुरुआत

एक और विचार एम्बेडेड सिस्टम emulators के साथ शुरू करने के लिए है के लिए 'एम्बेडेड C++', उदाहरण के लिए Atmel AVR साइट एक अच्छा आईडीई emulates Atmel AVR प्रणाली है, और आप कच्चे कोड बनाने की अनुमति देता सी में और इसे एक नकली सीपीयू में लोड करें, वे टूलिन के रूप में जीसीसी का उपयोग करते हैं (मुझे लगता है)

2

सी ++ embedded systems programming में ओएस कर्नेल लिखने के लिए भी उपयोग किया जाता है।

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

प्रारंभिक बूट प्रक्रिया के लिए, आप मानक लाइब्रेरी का उपयोग करने में सक्षम नहीं होंगे। कोई अपवाद नहीं, आरटीआईआई, नया/हटाएं। यह वापस "कक्षाओं के साथ सी" है। ज्यादातर लोग यहां सी का उपयोग करते हैं।

एक बार आपके पास पर्याप्त सहायक आधारभूत संरचना लोड हो जाने के बाद, आप मानक लाइब्रेरी के जो भी हिस्सों को पोर्ट कर सकते हैं उसका उपयोग कर सकते हैं।

2

आप एक वातावरण प्रदान करता है कि आवश्यकता होगी:

  • एक काम कर रहे सी पुस्तकालय, या यह के लिए पर्याप्त है कि तुम क्या
  • सी ++ क्रम के कुछ हिस्सों कि आप उपयोग करना चाहते करना चाहते हैं। यह कंपाइलर-विशिष्ट

किसी भी अन्य पुस्तकालयों के अतिरिक्त है। यदि आपके प्लेटफ़ॉर्म पर कोई गतिशील लिंकर नहीं है (यदि आपके पास कोई ओएस नहीं है, तो आपके पास शायद कोई लिंकर नहीं है) तो आपको इसे सभी को स्थिर-लिंक करना होगा।

अभ्यास में इसका मतलब है कि कुछ छोटे सी ++ रनटाइम को जोड़ने और आपके प्लेटफ़ॉर्म के लिए उपयुक्त सी लाइब्रेरी। फिर आप एक स्टैंडअलोन सी ++ प्रोग्राम लिख सकते हैं।

0

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

5

यह पेज देखें: http://wiki.osdev.org/C++

यह सब कुछ एक OS C++ का उपयोग करते हुए और अधिक लोकप्रिय toolchains का उपयोग कर मूल भाषा के रूप में लेखन शुरू करने के लिए आवश्यक है।

इसके अतिरिक्त यह पृष्ठ बहुत उपयोगी साबित होना चाहिए: http://wiki.osdev.org/C++_Bare_Bones। ओएस के सी ++ एंट्री पॉइंट पर पहुंचने के माध्यम से यह आपको बहुत ज्यादा चलता है।

http://www.codeproject.com/KB/tips/boot-loader.aspx

आप आप के रूप में अब तक मुख्य रूप() प्राप्त करने के लिए एक छोटे से विधानसभा शुरू हुआ कोड की आवश्यकता होगी, लेकिन फिर आप सी में आराम लिख सकता ++:

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