आप जो बात कर रहे हैं वह एम्बेडेड दुनिया में "नंगे-धातु" एप्लिकेशन के रूप में जाना जाता है। वे एआरएम कॉर्टेक्स-एम 3 जैसी चीजों के लिए बहुत आम हैं जो डेबिट-कार्ड सत्यापनकर्ता बॉक्स या इंटरैक्टिव खिलौने में कहते हैं (कहें) और पूर्ण ऑपरेटिंग सिस्टम चलाने के लिए पर्याप्त मेमोरी या क्षमता नहीं है। इसलिए, एक "एआरएम/लिनक्स" कंपाइलर प्राप्त करने के बजाय जो एआरएम प्रोसेसर पर लिनक्स पर चलाने के लिए एक एप्लीकेशन को संकलित करेगा, आपको एक "एआरएम नंगे-धातु" कंपाइलर मिलता है जो एक ऑपरेटिंग सिस्टम के बिना एआरएम प्रोसेसर पर चलाने के लिए चीजों को संकलित करता है। (मैं x86 के बजाय एआरएम का उपयोग कर रहा हूं, क्योंकि x86 नंगे धातु अनुप्रयोग वास्तव में इन दिनों काफी दुर्लभ हैं।)
जैसा कि आपके प्रश्न और अन्य उत्तरों में बताया गया है, आपके आवेदन को कुछ चीजें करने की आवश्यकता होगी अन्यथा ऑपरेटिंग सिस्टम की देखभाल की जाएगी।
सबसे पहले, इसे मेमोरी सिस्टम, इंटरप्ट वैक्टर, और बोर्ड गुओ के कई अन्य बिट्स को प्रारंभ करने की आवश्यकता है। आम तौर पर यह ऐसा कुछ है जो एक नंगे धातु संकलक आपके लिए करेगा, हालांकि यदि आपके पास अजीब बोर्ड है, तो आपको यह बताने की आवश्यकता हो सकती है कि यह कैसे करें। यह उस बिंदु से चीजें प्राप्त करता है जहां बोर्ड उस बिंदु पर जाता है जहां आपका मुख्य() फ़ंक्शन शुरू होता है।
फिर, आपको सीपीयू और रैम के बाहर की चीजों से बातचीत करने की आवश्यकता है। एक ऑपरेटिंग सिस्टम में ऐसा करने के लिए सभी प्रकार के फ़ंक्शन शामिल हैं - डिस्क I/O, स्क्रीन आउटपुट, कीबोर्ड और माउस इनपुट, नेटवर्किंग इत्यादि, आगे, और इसी तरह। एक ऑपरेटिंग सिस्टम के बिना, आपको इसे कहीं और से प्राप्त करना होगा। आप अपने हार्डवेयर निर्माता से पुस्तकालयों में से कुछ प्राप्त कर सकते हैं; उदाहरण के लिए, जिस बोर्ड में हाल ही में खेल रहा था, उसके पास 40x200-पिक्सेल एलईडी स्क्रीन है, और यह उस लाइब्रेरी के साथ आया जिस पर इसे चालू करने और उस पर व्यक्तिगत पिक्सेल मान सेट करने के लिए कोड था। और नेटवर्किंग या व्हाट्नॉट करने के लिए, टीसीपी/आईपी स्टैक और ऐसी चीजों को लागू करने के लिए पुस्तकालयों की बिक्री करने वाली कई कंपनियां हैं।
उदाहरण के लिए, यह एक बुनियादी प्रिंटफ भी करना मुश्किल बनाता है। जब आपके पास एक ऑपरेटिंग सिस्टम है, तो printf केवल ऑपरेटिंग सिस्टम को एक संदेश भेजता है जो कहता है "कंसोल पर यह स्ट्रिंग डालें", और ऑपरेटिंग सिस्टम को कंसोल पर वर्तमान कर्सर की स्थिति मिलती है, और यह सब कुछ पता लगाने के लिए क्या पिक्सल स्क्रीन पर बदलने के लिए, और ऐसा करने के लिए, उन पिक्सल को बदलने के लिए कौन सी सीपीयू निर्देशों का उपयोग करना है।
ओह, और हमने उल्लेख किया कि आपको पहले यह पता लगाना होगा कि प्रोग्राम को सीपीयू में कैसे प्राप्त किया जाए? एक ठेठ कंप्यूटर में कुछ प्रोग्राम करने योग्य रॉम होता है जो इसे शुरू होने से निर्देश लोड करेगा। एक x86 पर, यह BIOS है, और इसमें आमतौर पर पहले से ही एक आसान प्रोग्राम होता है जो सीपीयू शुरू करता है, डिस्प्ले सेट करता है, डिस्क की तलाश करता है, और डिस्क को उस डिस्क से लोड करता है जो इसे पाता है। एक एम्बेडेड सिस्टम पर, आमतौर पर आपका प्रोग्राम कहां जाता है - जिसका अर्थ है कि आपको अपना प्रोग्राम वहां रखने के लिए कुछ तरीका चाहिए। अक्सर, इसका मतलब है कि आपके पास "डीबगर" नामक एक उपकरण है जो प्रोग्राम को लोड करने वाले आपके एम्बेडेड बोर्ड से शारीरिक रूप से जुड़ा हुआ है - और यह भी चीजें कर सकता है जो आपको प्रोसेसर को रोकने और यह निर्धारित करने की अनुमति देता है कि उसका राज्य क्या है, ताकि आप कदम उठा सकें अपने प्रोग्राम के माध्यम से जैसे कि आप इसे अपने कंप्यूटर पर एक सॉफ्टवेयर डीबगर में चला रहे थे। लेकिन मैं पीछे हटा।
वैसे भी, अपने दूसरे प्रश्न का उत्तर देने के लिए, यह निष्पादन योग्य जिसे आप बनाना चाहते हैं वह है जो उस रोम में आपके एम्बेडेड बोर्ड पर संग्रहीत हो जाता है - या शायद आप इसे रोम में थोड़ा सा स्टोर करेंगे (यानी, आखिरकार, बहुत छोटा) और बाकी को फ्लैश ड्राइव पर स्टोर करें, और रोम में बिट में फ्लैश ड्राइव से बाकी को पाने के लिए निर्देश शामिल होंगे। यह शायद आपके मुख्य कंप्यूटर (यानी, लिनक्स या विंडोज कंप्यूटर जहां आप इसे बना रहे हैं) पर एक फ़ाइल के रूप में संग्रहीत किया जाएगा, लेकिन यह केवल भंडारण के लिए है, यह वहां नहीं चलेगा।
आप देखेंगे कि जब आप इन पुस्तकालयों में से एक साथ मिलते हैं, तो वे एक ऑपरेटिंग सिस्टम के बारे में काफी कुछ कर रहे हैं, और पुस्तकालयों के ढेर और वास्तविक परिचालन के बीच इस जगह का एक प्रकार है प्रणाली। उस स्थान पर जिसे आरटीओएस कहा जाता है - "रीयल-टाइम ऑपरेटिंग सिस्टम"। इनमें से छोटे वास्तव में केवल पुस्तकालयों का संग्रह हैं जो सभी ऑपरेटिंग-सिस्टम चीजों को करने के लिए मिलकर काम करते हैं, और कभी-कभी सामान भी शामिल करते हैं ताकि आप एक साथ कई धागे चला सकें (और फिर आप अलग-अलग धागे विभिन्न कार्यक्रमों की तरह कार्य कर सकते हैं) - - हालांकि यह सब एक ही संकलित "प्रोग्राम" में संकलित है, और आरटीओएस वास्तव में आपके द्वारा शामिल पुस्तकालय से अधिक कुछ नहीं है। बड़े लोग अलग-अलग स्थानों में कोड के हिस्सों को संग्रहित करना शुरू करते हैं, और मुझे लगता है कि उनमें से कुछ डिस्क के कोड के टुकड़े भी लोड कर सकते हैं - जैसे प्रोग्राम चलाने पर विंडोज और लिनक्स की तरह ही। यह एक या/या के बजाय एक निरंतरता की तरह है।
फ्रीआरटीओएस सिस्टम एक ओपन-सोर्स आरटीओएस है जो आरटीओएस स्पेस के छोटे छोर की तरफ है; यदि आप अधिक रुचि रखते हैं तो वे इनमें से कुछ को देखने के लिए एक अच्छी जगह हो सकते हैं। उनके पास x86 अनुप्रयोगों के कुछ उदाहरण हैं, जो आपको एक विचार देंगे कि किस तरह के x86 सिस्टम एक नंगे धातु या आरटीओएस-आधारित प्रोग्राम चलाएंगे और आप किसी पर चलाने के लिए कुछ कैसे संकलित करेंगे; यहां लिंक करें: http://www.freertos.org/a00090.html#186।
इंटेल कंपाइलर जो आप सोचते हैं वह नहीं है - यह इंटेल द्वारा लिखा जाने वाला एक और विंडोज (या लिनक्स; वे दोनों बनाते हैं) कंपाइलर है। यह EXEs या मानक लिनक्स बाइनरी बनाता है। –