मैं विज़ुअल सी ++ का उपयोग कर x86 मशीन के लिए एक एम्बेडेड कर्नेल बनाना चाहता हूं। मेरे पास संकलन करने के लिए कुछ सी और असेंबली कोड फ़ाइलें हैं और मैं उन सभी को एक साथ लिंक करना चाहता हूं जो एक बहुउद्देशीय बूटलोडर जैसे GRUB के साथ संगत है।विजुअल स्टूडियो का उपयोग करके मैं कर्नेल छवि कैसे बना सकता हूं?
उत्तर
OSDev एक wiki entry on Visual Studio, कि विशेष रूप से कौशिक Srenevasan के blogentries मल्टीबूट आधारित bootloaders (GRUB की तरह) से लोड करने के लिए तैयार किया गया है पीई कर्नेल के विषय पर के लिंक के साथ, कुछ अंतर्दृष्टि प्रदान कर सकता है।
बड़े, व्यापक स्ट्रोक योग्य कुछ बातें आपको पता होना चाहिए:
- मल्टीबूट हैडर में, आप Aout kludge का उपयोग करने की जरूरत है।
- आपको लिंकर को/BASE: 0x100000 तर्क निर्दिष्ट करने की आवश्यकता है, इसलिए अंतिम बाइनरी कोड उस स्थान पर आधारित है जहां बूटलोडर इसे डालने जा रहा है।
- आपके कर्नेल के प्रवेश बिंदु (आमतौर पर '
kmain
' कहा जाता है) पर__declspec(noreturn)
होने की आवश्यकता है, और आपको लौटने की बजाय__asm { hlt }
करने की आवश्यकता होगी।
कॉपी-एंड-पेस्ट यहां काम नहीं करता है, या तो गलती को इंगित करता है: ऐसा लगता है कि "... कर्नेल-% 5F03.html का उपयोग कर रहा है", लेकिन "... कर्नल-उपयोग_03.html" होना चाहिए। –
मुझे नहीं पता क्यों, लेकिन मैं इसे एड्रेस बार से कॉपी और पेस्ट कर रहा हूं, और जब मैं संपादित करता हूं तो इसका शाब्दिक '_' होता है - ऐसा लगता है कि किसी भी कारण से इसे बदलना प्रतीत होता है। –
ठीक है, मैंने एसओ टीम को एक ईमेल भेजा, और उन्होंने बताया कि एक लिंक बनाने के अन्य तरीके हैं, इसलिए मैंने इसे काम करने के लिए स्विच किया। –
क्या आप वाकई सुनिश्चित हैं कि आप एमएसवीसी पथ को नीचे जाना चाहते हैं? यह एक महान संकलक है लेकिन मुझे लगता है कि यह जीसीसी/मिंगडब्ल्यू –
के साथ बहुत आसान होगा, मुझे लगता है कि जीसीसी/मिनजीडब्ल्यू पीई एक्जिक्यूटिव भी उत्पन्न करेगा। मुझे पर्यावरण में पीई से ईएलएफ के लिए आवश्यक परिवर्तन करना होगा। वीएस का उपयोग करने में इतनी खुशी है, मुझे लगता है कि मैं इसे पसंद करूंगा। –