बूट अनुक्रम क्या है?


35

मैं सोच रहा हूँ कि रास्पबेरी पाई का बूट अनुक्रम एक विशिष्ट सेटअप में है (NOOBS कहो), पावर एप्लिकेशन (या अगर यह अलग है तो वार्म रिसेट) से, कहो, लोगो की स्पष्टता; या जहां वर्णित है।

उस अनुक्रम की सबसे अधिक आवश्यक सामान्य तस्वीर के अलावा, मुझे शुरुआती चरणों में सबसे अधिक दिलचस्पी है:

  1. एआरएम सीपीयू के लिए रीसेट वेक्टर क्या है, और यह कैसे / कहां परिभाषित किया गया है?
  2. एआरएम सीपीयू निर्देश किस मेमोरी से प्राप्त किए जाते हैं? यह कोड कहां है, और इस कोड को संग्रहीत करने के लिए किस तकनीक का उपयोग किया जाता है?
  3. क्या वह ARM32 या थम्ब (या शायद जज़ले) कोड है? क्या यह रीसेट वेक्टर के कम क्रम बिट पर निर्भर करता है?
  4. क्या उस प्रारंभिक बूट कोड का स्रोत (या डिस्सेक्शन, या डंप) उपलब्ध है? यदि नहीं, तो क्या यह निर्धारित करने के लिए जेटीजी पोर्ट के उपयोग को रोकने के लिए कुछ भी तकनीकी है? कानूनी रूप से, मैं जहां मैं (फ्रांस) रहता हूं, वहां लागू कानून की मेरी समझ पर भरोसा करने के जोखिम के लिए तैयार हूं, जो यह है कि मुझे अपने कंप्यूटर का पूरी तरह से विश्लेषण करने की अनुमति है, कम से कम एक स्पष्ट अनुबंध के अभाव में ऐसा करने की आवश्यकता नहीं है।
  5. किस क्रम में परिधीयों को प्रारंभिक किया जाता है, और कोड के किस टुकड़े से?
  6. एआरएम सीपीयू के अलावा, बीसीएम 2835 में कुछ प्रोसेसर / ऑटोमेटा चल रहा है, और इस बात की पुष्टि में कि इसका बूट अनुक्रम एआरएम सीपीयू से कैसे संबंधित है?

मैं एआरएम सीपीयू के तकनीकी संदर्भ मैनुअल और बीसीएम 2835 एआरएम पेरिफेरल्स , या किसी अन्य डॉक्टर में गोता लगाने के लिए तैयार हूं ।

अपडेट: पोस्ट करने के बाद, मुझे यह और यह पता चला , BCM2835 का GPU बताते हुए, ARM के लिए एक मास्टर के रूप में कार्य कर रहा है, और बूट अनुक्रम में भारी रूप से शामिल है।


4
मैं केवल इतना कह सकता हूं कि अधिकांश जानकारी बंद स्रोत है, जैसे स्रोत कोड, बूटलोडर्स और SoC फर्मवेयर .. अभी के लिए अज्ञात है। आपको एक बात जाननी चाहिए। बीसीएम एक जीपीयू है ... सीपीयू नहीं। बूटलोडर जीपीयू सेक्शन में शुरू होता है, वहां रैम को इनिशियलाइज़ करता है और सीपीयू को सौंपता है, जहां पहली बार हमारे पास सोर्स कोड तक पहुंच है ... उर्फ ​​रास्पबियन। शुभ लाभ। यह प्रश्न बहुत व्यापक है और उत्तर देना कठिन है।
पायोत्र कुला

जवाबों:


38

रास्पबेरी पाई का बूट अनुक्रम मूल रूप से यह है:

  1. स्टेज 1 बूट ऑन-चिप रोम में है। एल 2 कैश में लोड स्टेज 2
  2. स्टेज 2 है bootcode.bin। SDRAM को सक्षम करता है और स्टेज 3 को लोड करता है
  3. स्टेज 3 है loader.bin। यह .elfप्रारूप और भार के बारे में जानता हैstart.elf
  4. start.elfलोड करता है kernel.img। यह तब भी पढ़ता है config.txt, cmdline.txtऔर bcm2835.dtb अगर dtb फ़ाइल मौजूद है, तो इसे 0×100& कर्नेल पर लोड किया जाता है @ 0×8000 यदि disable_commandline_tagsइसे सेट किया गया है तो यह कर्नेल को लोड करता है @ 0×0 अन्यथा यह कर्नेल को लोड करता है @ 0×8000और ATAGS पर0×100
  5. kernel.img फिर एआरएम पर चलाया जाता है।

kernel.imgएआरएम पर लोड होने तक सब कुछ GPU पर चलाया जाता है।

मुझे यह चित्र काफी उपयोगी लगा:

बूट अनुक्रम


2
उपयोगी। यह स्पष्ट किया जा सकता है कि यदि 2 जी चरण बूटलोडर bootcode.binजीपीयू, एआरएम (और फिर किस तरह का कोड) द्वारा संचालित कोड है, या इनमें से एक मिश्रण है? तीसरे चरण के लिए भी loader.bin(यदि यह नहीं चला गया है, जैसा कि यह प्रतीत होता है)।
fgrieu

3
@fgrieu मैंने स्पष्टीकरण शामिल करने के लिए उत्तर संपादित किया है। सब कुछ GPU kernel.imgपर चलाया जाता है जो ARM पर चलाया जाता है।
SG60 15

1
के अनुसार इस loader.bin का उपयोग नहीं किया जाता है। bootcode.binसीधे इस Git कमिट केstart.elf अनुसार लोड होता है
HeatfanJohn

@ SG60: क्या आप अपना जवाब HeatfanJohn की जानकारी से अपडेट कर सकते हैं?
पीटर मोर्टेंसन

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