मान लें कि आप एक Linux सिस्टम में सीधे बूट नहीं कर सकते, तो आप बूटस्ट्रैप कैसे बनाते हैं?


0

वास्तविक चरण क्या हैं, मान लें कि आपके पास सी हेडर फ़ाइलों का एक सेट है, जो आपके सिस्टम में मेमोरी मैप्ड डिवाइस का वर्णन करता है, जिससे शुरुआती रनिंग कर्नेल बनाया जा सके? मुझे पता है कि हर कोई एक लाइव सीडी / यूएसबी थम्ब ड्राइव आदि को बंद कर देता है, लेकिन यह पहला बूटस्ट्रैप कैसे बना?

संपादित करें: मुझे इंगित करना चाहिए कि मैं वास्तव में एआरएम उपकरणों के बारे में बात कर रहा हूं, मुझे एक विशिष्ट मशीन पर BIOS के माध्यम से लोड करने की मूल बातें मिलती हैं, लेकिन हम कहते हैं कि हम एक कस्टम डिवाइस के बारे में बात कर रहे हैं?


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

वास्तव में मैं एक Zynq 7000 श्रृंखला FPGA के साथ काम कर रहा हूँ। कोई BIOS नहीं है, और nw मैंने इस पर थोड़ा अधिक पढ़ा है, इसमें एक कोर बूटलोडर है, जो एक फ्लैशेड फर्स्ट स्टेज बूट लोडर को खोजने की उम्मीद करता है, जो नाटक में एक दूसरे चरण लोडर को लोड करता है और इसे निष्पादित करता है। यहाँ चाल है कि FSBL और एक क्रॉस संकलित कर्नेल बूट करने के लिए पर्याप्त जानकारी होने।
MrMowgli

जवाबों:


1

यह पहला बूटस्ट्रैप कैसे बना?

बूटस्ट्रैप प्रोग्राम का निर्माण (लेखन और क्रॉस-संकलन) उतना कठिन नहीं है जितना कि आप सुझाव देते हैं।

मुझे यह इंगित करना चाहिए कि मैं वास्तव में एआरएम उपकरणों के बारे में बात कर रहा हूं, मुझे एक विशिष्ट मशीन पर 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 छवि को पढ़ने के लिए निर्देशित किया जाता है, जैसा कि मोड पिन द्वारा कॉन्फ़िगर किया गया है।

एफएसबीएल (यदि यह अन्य बूटस्ट्रैप्स की तरह है जो मैंने उपयोग किया है) को एक कॉन्फ़िगर स्रोत माध्यम से यू-बूट पढ़ने के लिए बनाया गया है। कोई रनटाइम विकल्प नहीं है।

यू-बूट अपने नाम ("सार्वभौमिक") को जीने की कोशिश करता है, और विभिन्न उपकरणों से छवियों (और लिपियों) को लोड करने के लिए (पर्यावरण चर का उपयोग करके) कॉन्फ़िगर किया जा सकता है। इंटरेक्टिव विकल्प भी है।

ज़ीनक लिनक्स पर ज़िलिनक्स विकी को भी देखें , जो घोषित करता है कि "ज़ीनक के बूटिंग की पूरी जानकारी तकनीकी संदर्भ मैनुअल में पाई जा सकती है "।


ठीक है, लिंक बहुत जानकारीपूर्ण था, धन्यवाद! निश्चित रूप से समझाया गया है कि कैसे उस छवि को एक स्मृति पते पर मैप किया जाता है जो असम्पीडित है और चलता है। इसलिए ट्रिक उचित मेमोरी लोकेशन के साथ बूट इमेज को क्रॉस कर रही है, पूरी इमेज में खींचने के लिए पर्याप्त हार्डवेयर सपोर्ट बूटस्ट्रैप कर रही है।
MrMowgli

भ्रम वास्तव में इस तथ्य के साथ करना है कि इस मामले में एक FPGA यह स्वयं के हार्डवेयर उपकरणों को परिभाषित कर सकता है, और प्रोग्रामेबल लॉजिक के लिए विशिष्ट मेमोरी मैप फ़ाइल है। मूल प्रश्न यह विचार करना है कि एक सामान्य थर्ड पार्टी बोर्ड पर आधारित, विभिन्न प्रकार के घटकों और मेमोरी डिवाइसों के साथ, यह कैसे क्रॉस कंपाइल पहली बार में होता है। मुझे लगता है कि आपका लिंक इसे समझाने का अच्छा काम करता है। हालांकि Zynq बोर्डों के लिए आपको प्रोग्राम की परत के लिए DTB फ़ाइलों और बिट फ़ाइलों की भी आवश्यकता होती है।
श्रीमान मोगली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.