2012-10-16 6 views
14

के साथ एक ओएस लिखना मैं स्कूल के कारण हाल ही में कोडिंग नहीं कर रहा हूं लेकिन मैंने फैसला किया है कि मैं फिर से ओएस विकास पर काम करना शुरू करना चाहता हूं। हाल ही में मैंने बीआईओएस के प्रतिस्थापन के रूप में ईएफआई के बारे में सामान सुना है। मैं एक मंच के लिए एक ओएस विकसित करना चाहता हूं जो BIOS के बजाय ईएफआई का उपयोग करता है। मुझे यह पता लगाने में परेशानी हो रही है कि कहां से शुरू करना है। क्या कोई मुझे सही दिशा दिखा सकता है? हो सकता है कि ईएफआई का मतलब ओएस विकास के लिए क्या हो और शायद मुझे बताएं कि परीक्षण वातावरण (अधिमानतः आभासी) मैं क्या उपयोग कर सकता हूं। काफी स्पष्ट रूप से, मुझे सच में यकीन नहीं है कि वास्तव में ईएफआई क्या है। क्या मुझे एआरएम असेंबली में समय तलाशने का समय भी निवेश करना चाहिए? मैं x86 असेंबली जानता हूं लेकिन मुझे लगता है कि यह भी पुराना हो रहा है। मैं वास्तव में खो गया हूं और मुझे आपका इनपुट सुनना अच्छा लगेगा।यूईएफआई

धन्यवाद

उत्तर

22

EFI, UEFI, जो कि लोगों को वास्तव में क्या उपयोग करने के लिए अग्रदूत है हालांकि वे अभी भी कभी कभी EFI के रूप में बात का संदर्भ लें। आप uefi.org पर शामिल विनिर्देश प्राप्त कर सकते हैं।

यूईएफआई विशिष्टता सब कुछ बूट लोडर को परिभाषित करने की आवश्यकता हो सकती है। पीआई निर्दिष्टीकरण सिलिकॉन विक्रेताओं के लिए उद्योग में उनके कोड की पोर्टेबिलिटी के लिए उपयोग करने के लिए इंटरफेस परिभाषित करता है। तो आप Win8 की तरह एक ओएस के बारे में सुनेंगे, यूईएफआई विशिष्टता के एक निश्चित संस्करण के साथ अनुपालन की आवश्यकता है, जैसे कुछ सुविधाओं के लिए 2.3.1 सी, सुरक्षित बूट की तरह। यह सब कहने के लिए जाता है कि ईएफआई बीआईओएस को इतना मानक नहीं बनता है कि बीआईओएस को कुछ ऑपरेटिंग सिस्टम का समर्थन करने के लिए पालन करना चाहिए।

आरंभ करने के लिए जाने वाली जगह (विनिर्देशों की एक प्रति प्राप्त करने के बाद) the TianoCore project on SourceForge है। परियोजनाओं में से एक OVMF है, जो यूईएफआई के लिए वर्चुअल मशीन लक्ष्य है। आप विंडोज़ के तहत कमांड प्रॉम्प्ट चलाने के लिए NT32 लक्ष्य भी देखना चाह सकते हैं। जब आप बूट लोडर की तरह किसी अनुप्रयोग को डिज़ाइन करना चाहते हैं, तो यह उपयोग करने के लिए वास्तव में बहुत बढ़िया टूल हैं, जो यूईएफआई इंटरफेस के शीर्ष पर बैठते हैं।

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

6

इस सवाल का एक जवाब देर से, लेकिन अगर आप उन्हें मतलब समय में पता नहीं लगाया मैं निम्नलिखित बातों जोड़ सकते हैं:

यह बताएं कि क्या EFI ओएस विकास का मतलब

असल में, बहुत कुछ नहीं। शायद थोड़ा सा। ठीक है, चलो समझाओ। यूईएफआई प्री-बूट चरण के लिए फर्मवेयर पर्यावरण प्रदान करता है। यह ऑपरेटिंग सिस्टम को कुछ रनटाइम सेवाएं भी प्रदान करता है, हालांकि, यह उम्मीद की जाती है कि ऑपरेटिंग सिस्टम, यूईएफआई फर्मवेयर नहीं, अंततः सिस्टम को चलाएगा - ये सेवाएं आपको विभिन्न बूट-कॉन्फ़िगरेशन से संबंधित गतिविधि - example करने की अनुमति देती हैं।

उल्टा है कि यदि आप एक बूटलोडर कि कहने के लिए multiboot 2 आप वास्तव में UEFI बारे में कुछ पता करने की जरूरत नहीं अनुरूप उपयोग करने के लिए तैयार कर रहे हैं - बूटलोडर आप मल्टीबूट कल्पना के अनुसार लोड होगा, तो ExitBootServices() फोन है, जिसमें यूईएफआई शब्द फर्मवेयर पर्यावरण को नष्ट कर देता है।

एक लिनक्स कर्नेल का उत्पादन करना संभव है जिसमें एक ईएफआई स्टब है और इसलिए बूट लोडर के बिना "0" बूट करता है - this blog shows you how। आप इसे अपने कर्नेल के लिए कर सकते हैं - आपको फर्मवेयर बैथर से मेल खाने वाले पीई/सीओएफएफ कर्नेल का उत्पादन करने की आवश्यकता है।

और हो सकता है मुझे बताओ कि परीक्षण वातावरण (अधिमानतः आभासी) मैं हमें

आप VMWare Workstation खर्च कर सकते हैं, तो यह आपके बड़े पैमाने पर मदद मिलेगी कर सकते हैं। साथ ही एक gdb ठूंठ ऐसी है कि आप कुछ भी के किसी भी हिस्से डीबग कर सकते हैं, जिसमें आप भी आभासी मशीन परिभाषा फ़ाइलों को संपादित कर सकते हैं (* .vmx)

firmware="efi" 

को रोकने के लिए और देखा, VMWare एक पूरी तरह से काम कर रहा UEFI बूट होगा वातावरण। लिनक्स और विंडोज के साथ काम करता है।

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

क्या मुझे एआरएम असेंबली में समय देखने का समय भी निवेश करना चाहिए?

यह आपके उद्देश्यों पर निर्भर करता है। असेंबली के सवाल पर, मुझे लगता है कि आपको इसे ओएस लिखने के बारे में पता होना चाहिए। मुझे नहीं लगता कि यह आपके लिए कौन सा मंच लिखता है - वास्तव में, मुझे लगता है कि एकाधिक के लिए लेखन आपको मशीनों के बीच मतभेदों की अधिक सराहना करता है।

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

0

आप कुछ यूईएफआई अनुप्रयोग विकास/परीक्षण करने के लिए क्यूमु का उपयोग कर सकते हैं। अधिक जानकारी के लिए this देखें

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

मेरा कहना है, लेकिन उपरोक्त टिप्पणियां ध्यान में रखना अच्छा है।

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

  • कोई संबंधित समस्या नहीं^_^