यह पहला बूटस्ट्रैप कैसे बना?
बूटस्ट्रैप प्रोग्राम का निर्माण (लेखन और क्रॉस-संकलन) उतना कठिन नहीं है जितना कि आप सुझाव देते हैं।
मुझे यह इंगित करना चाहिए कि मैं वास्तव में एआरएम उपकरणों के बारे में बात कर रहा हूं, मुझे एक विशिष्ट मशीन पर BIOS के माध्यम से लोड करने की मूल बातें मिलती हैं, लेकिन हम कहते हैं कि हम एक कस्टम डिवाइस के बारे में बात कर रहे हैं?
आपके द्वारा संदर्भित BIOS अनिवार्य रूप से एक पीसी सम्मेलन है। (सीपी / एम में भी एक BIOS था, लेकिन गैर-वाष्पशील मेमोरी में जरूरी नहीं है।) एआरएम सीपीयू में आमतौर पर एक BIOS नहीं होता है या इसका उपयोग नहीं होता है।
आज उपयोग में आने वाला विशिष्ट ARM प्रोसेसर एक चिप पर एक SoC नामक एक सिस्टम पर बाह्य उपकरणों के साथ एकीकृत है । मुख्य मेमोरी, जैसे DRAM, और गैर-वाष्पशील भंडारण, जैसे NAND फ़्लैश, आमतौर पर अधिकतम डिज़ाइन लचीलेपन के लिए SoC के बाहरी होते हैं। लेकिन आमतौर पर बूटस्ट्रैप ऑपरेशन शुरू करने के लिए न्यूनतम सिस्टम घटकों को इनिशियलाइज़ करने के लिए एक छोटा (शायद 128KB) एम्बेडेड ROM (रीड-ओनली मेमोरी) होता है। एक प्रोसेसर रीसेट हमेशा बूट बूट के निष्पादन का कारण होगा। (यह ROM वास्तव में केवल पढ़ने योग्य है, और इसे संशोधित नहीं किया जा सकता है। कोड को चिप फैब्रिक के दौरान सिलिकॉन में मास्क किया जाता है।)
प्रत्येक एसओसी विक्रेता के पास ओएस लोड करने और निष्पादित करने के लिए अपना स्वयं का बूटस्ट्रैप तरीका है। कुछ बूटस्ट्रैप अनुक्रम के अगले चरण के स्रोत को निर्धारित करने के लिए GPIO पिन के माध्यम से पढ़े जाने वाले हार्डवेयर स्ट्रैपिंग का उपयोग करते हैं। एक अन्य विक्रेता बूटस्ट्रैप प्रोग्राम की जांच के लिए यादों और उपकरणों की एक आदेशित सूची का उपयोग कर सकता है। एक और तकनीक, NOR फ्लैश में फर्मवेयर के लिए शाखा है, जिसे सीधे निष्पादित किया जा सकता है (यानी एक्सआईपी, जगह में निष्पादित)।
मुख्य स्मृति के लिए DRAM का उपयोग करने वाली प्रणाली बूटस्ट्रैपिंग की समस्याओं में से एक इसकी हार्डवेयर आरंभीकरण है। कोड को DRAM में लोड करने और निष्पादित करने से पहले DRAM मेमोरी कंट्रोलर को इनिशियलाइज़ करना होता है। तो यह आरंभीकरण कोड कहाँ रहता है, क्योंकि यह मुख्य मेमोरी में नहीं हो सकता है?
प्रत्येक विक्रेता का अपना समाधान है। कुछ की आवश्यकता होती है स्मृति विन्यास डेटा को बूट ROM के उपयोग के लिए गैर-वाष्पशील स्मृति में संग्रहीत किया जाना चाहिए। कुछ SoCs ने एक छोटे बूटस्ट्रैप प्रोग्राम को निष्पादित करने के लिए SRAM (जिसमें DRAM जैसे इनिशियलाइज़ेशन की आवश्यकता नहीं है) को एकीकृत किया है। कुछ SoCs XIP बूटस्ट्रैप प्रोग्राम को होल्ड करने के लिए NOR फ़्लैश का उपयोग करते हैं।
एक बार बूटस्ट्रैप प्रोग्राम ने DRAM को इनिशियलाइज़ कर दिया है, फिर बूटिंग के अगले चरण को लोड करने के लिए मुख्य मेमोरी का उपयोग किया जा सकता है। लिनक्स बूट के रूप में एक परिष्कृत बूट उपयोगिता हो सकती है, या (यदि बूटस्ट्रैप प्रोग्राम सक्षम है) लिनक्स कर्नेल। ध्यान दें कि कई बूटस्ट्रैप प्रोग्राम या चरण हो सकते हैं जो ओएस के निष्पादन के लिए प्रोसेसर रीसेट के बीच किए गए हैं।
लिनक्स एआरएम कर्नेल को बूट करने की आवश्यकताओं को निम्नलिखित दस्तावेज़ में लिखा गया है: http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html
लिनक्स एआरएम के पुराने संस्करणों ने बुनियादी विन्यास को पारित करने के लिए ATAGI सूची का उपयोग किया। कर्नेल को जानकारी। आधुनिक संस्करण डिवाइस ट्री के संकलित बाइनरी का उपयोग करके एक पूर्ण बोर्ड कॉन्फ़िगरेशन प्रदान करते हैं।
जाहिर है "आप बूटस्ट्रैप कैसे बनाते हैं?" कुछ योग्यताओं के बिना उत्तर नहीं दिया जा सकता है।
पीसी BIOS की तरह, SoCs का बूट ROM मालिकाना है और जारी नहीं किया जाता है (जब तक कि आप NDA पर हस्ताक्षर नहीं करते हैं, यदि सभी पर)। लेकिन अधिकांश अन्य बूट कोड GPL या इसी तरह के लाइसेंस के तहत जारी किए जाते हैं, और आसानी से प्राप्य होते हैं।
परिशिष्ट
चूंकि अब आप उल्लेख करते हैं कि आप एक Zynq 7000 (जो एक Xilinx SoC का उपयोग करता है) का उपयोग कर रहे हैं, Xilinx के पास एक बूट बूट छवि बनाने के लिए एक वीडियो ट्यूटोरियल है ।
वह वीडियो इस बात की पुष्टि करता है कि मैंने पहले से क्या लिखा है:
1. Xilinx SoC में एक एम्बेडेड बूट ROM है (जो तकनीकी रूप से पहला चरण है, लेकिन इसे अक्सर अनदेखा किया जाता है या चरण शून्य के रूप में वर्णित किया जाता है)।
2. अगले चरण के लिए बूटस्ट्रैप प्रोग्राम के स्रोत को निर्दिष्ट करने के लिए "मोड पिन" हैं।
3. बूट ROM एक बूटस्ट्रैप प्रोग्राम को लोड करता है (जो तकनीकी रूप से दूसरा चरण है, लेकिन अक्सर "प्रथम" चरण के रूप में वर्णित है), एम्बेडेड SRAM को FSBL कहा जाता है। यह प्रोग्राम DRAM को इनिशियलाइज़ करता है और अगले चरण, U-Boot को लोड करता है।
4. यू-बूट डीआरएएम से बाहर निकलता है, और लिनक्स कर्नेल को लोड करता है।
वीडियो दर्शाता है कि FSBL स्रोत कोड को Xilinx साइट से डाउनलोड किया जा सकता है और कुछ चरणों में क्रॉस-संकलित किया जा सकता है। जैसा कि आप आरोप लगाते हैं , कोई "ट्रिक" नहीं है । बिल्ड एक सीधा-आगे कॉन्फ़िगर और क्रॉस-संकलन है, जो मुझे विशिष्ट एप्लिकेशन पैकेज की तुलना में सरल / आसान लगता है।
शायद आपका भ्रम बूट माध्यम की अस्पष्टता पर आधारित है, यानी बूट छवियों के स्रोत (ओं) को निर्दिष्ट नहीं किया गया है। वीडियो में संभव बूट उपकरणों के रूप में नंद फ्लैश और एसडीकार्ड का उल्लेख है।
बूट ROM को एक स्रोत माध्यम से FSBL छवि को पढ़ने के लिए निर्देशित किया जाता है, जैसा कि मोड पिन द्वारा कॉन्फ़िगर किया गया है।
एफएसबीएल (यदि यह अन्य बूटस्ट्रैप्स की तरह है जो मैंने उपयोग किया है) को एक कॉन्फ़िगर स्रोत माध्यम से यू-बूट पढ़ने के लिए बनाया गया है। कोई रनटाइम विकल्प नहीं है।
यू-बूट अपने नाम ("सार्वभौमिक") को जीने की कोशिश करता है, और विभिन्न उपकरणों से छवियों (और लिपियों) को लोड करने के लिए (पर्यावरण चर का उपयोग करके) कॉन्फ़िगर किया जा सकता है। इंटरेक्टिव विकल्प भी है।
ज़ीनक लिनक्स पर ज़िलिनक्स विकी को भी देखें , जो घोषित करता है कि "ज़ीनक के बूटिंग की पूरी जानकारी तकनीकी संदर्भ मैनुअल में पाई जा सकती है "।