बूटलोडर सिंहावलोकन

बूटलोडर एक विक्रेता-स्वामित्व वाली छवि है जो किसी डिवाइस पर कर्नेल लाने के लिए जिम्मेदार है। बूटलोडर डिवाइस की स्थिति की सुरक्षा करता है और ट्रस्टेड एक्ज़ीक्यूशन एनवायरनमेंट (टीईई) को आरंभ करने और इसके विश्वास की जड़ को बांधने के लिए जिम्मेदार है। बूटलोडर निष्पादन को कर्नेल में ले जाने से पहले boot और recovery विभाजन की अखंडता की भी पुष्टि करता है।

उदाहरण बूटलोडर प्रवाह

यहां बूटलोडर प्रवाह का एक उदाहरण दिया गया है:

  1. मेमोरी को लोड और आरंभ करें।

  2. सत्यापित बूट प्रवाह के अनुसार डिवाइस को सत्यापित करें।

  3. सत्यापित बूट प्रवाह के अनुसार, boot , dtbo , init_boot और recovery सहित बूट विभाजन को सत्यापित करें। इस चरण के भाग के रूप में, बूट छवि हेडर संस्करण की जाँच करें और तदनुसार हेडर को पार्स करें।

  4. यदि ए/बी अपडेट का उपयोग किया जाता है, तो बूट करने के लिए वर्तमान स्लॉट निर्धारित करें।

  5. निर्धारित करें कि पुनर्प्राप्ति मोड बूट किया जाना चाहिए या नहीं। अधिक जानकारी के लिए, सहायक ओटीए अपडेट देखें।

  6. बूट छवियाँ लोड करें, जैसे कि boot.img , vendor_boot.img , init_boot.img , और अन्य मालिकाना विक्रेता बूट छवियाँ। इन बूट छवियों में कर्नेल और रैमडिस्क छवियाँ हैं।

    1. कर्नेल को स्व-निष्पादन योग्य संपीड़ित बाइनरी के रूप में मेमोरी में लोड करें। कर्नेल स्वयं विघटित हो जाता है और मेमोरी में निष्पादित होना प्रारंभ कर देता है।

    2. initramfs बनाने के लिए रैमडिस्क और बूटकॉन्फिग सेक्शन को मेमोरी में लोड करें।

अतिरिक्त बूटलोडर-संबंधित सुविधाएँ

निम्नलिखित अतिरिक्त बूटलोडर-संबंधित सुविधाओं की एक सूची है जिन्हें आप कार्यान्वित कर सकते हैं:

  • डिवाइस ट्री ओवरले (डीटीओ)। एक डिवाइस ट्री ओवरले बूटलोडर को विभिन्न हार्डवेयर कॉन्फ़िगरेशन का समर्थन करने देता है। एक डीटीओ को डिवाइस ट्री ब्लॉब (डीटीबी) में संकलित किया जाता है जिसका उपयोग बूटलोडर द्वारा किया जाता है।

  • कर्नेल छवि आभासी पता यादृच्छिकीकरण। बूटलोडर उस वर्चुअल पते को यादृच्छिक बनाने का समर्थन करता है जिस पर कर्नेल छवि लोड की गई है। पते को यादृच्छिक बनाने के लिए, कर्नेल कॉन्फ़िगरेशन में RANDOMIZE_BASE को true पर सेट करें। बूटलोडर को /chosen/kaslr-seed डिवाइस ट्री नोड में एक यादृच्छिक u64 मान पास करके एन्ट्रापी प्रदान करनी होगी।

  • सत्यापित बूट. सत्यापित बूट बूटलोडर को यह सुनिश्चित करने की सुविधा देता है कि सभी निष्पादित कोड एक विश्वसनीय स्रोत से आए हैं।

  • बूट कॉन्फिग. बूट कॉन्फ़िगरेशन एंड्रॉइड 12 और उच्चतर में उपलब्ध है और बिल्ड और बूटलोडर से ऑपरेटिंग सिस्टम तक कॉन्फ़िगरेशन विवरण पास करने के लिए एक तंत्र है। Android 12 से पहले, androidboot उपसर्ग के साथ कर्नेल कमांड-लाइन पैरामीटर का उपयोग किया जाता है।

  • ओवर-द-एयर (ओटीए) अपडेट। फ़ील्ड में Android डिवाइस सिस्टम, ऐप सॉफ़्टवेयर और समय क्षेत्र नियमों के लिए OTA अपडेट प्राप्त और इंस्टॉल कर सकते हैं। इस सुविधा का आपके बूटलोडर कार्यान्वयन पर प्रभाव पड़ता है। ओटीए पर सामान्य जानकारी के लिए, ओटीए अपडेट देखें। बूटलोडर-विशिष्ट ओटीए कार्यान्वयन विवरण के लिए, सहायक ओटीए अपडेट देखें।

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

कर्नेल कमांड लाइन

निम्नलिखित स्थानों से कर्नेल कमांड लाइन को संयोजित करें:

  • बूटलोडर कमांड लाइन: बूटलोडर द्वारा निर्धारित स्थिर और गतिशील मापदंडों का सेट

  • डिवाइस ट्री: chosen/bootargs नोड से

  • defconfig : CONFIG_CMDLINE से

  • boot.img : कमांड लाइन से (ऑफ़सेट और आकार के लिए, system/core/mkbootimg/bootimg.h देखें)

एंड्रॉइड 12 के अनुसार, androidboot.* पैरामीटर के लिए जिन्हें हमें एंड्रॉइड यूजरस्पेस में पास करने की आवश्यकता है, हम कर्नेल कमांड लाइन के बजाय बूटकॉन्फिग का उपयोग कर सकते हैं।