GBL डिप्लॉय करना

इस पेज पर, सामान्य बूटलोडर (जीबीएल) बाइनरी को डिप्लॉय करने का तरीका बताया गया है.

बूट फ़र्मवेयर से जुड़ी ज़रूरी शर्तें

GBL का इस्तेमाल करने के लिए, बूट फ़र्मवेयर को ये ज़रूरी शर्तें पूरी करनी होंगी:

  • यूनिफ़ाइड एक्सटेंसिबल फ़र्मवेयर इंटरफ़ेस (यूईएफ़आई) के साथ काम करता हो. फ़र्मवेयर को ज़रूरी UEFI प्रोटोकॉल लागू करने और उनका इस्तेमाल करने की अनुमति होनी चाहिए. फ़र्मवेयर में, वेंडर के हिसाब से एक्सटेंशन की अनुमति भी होनी चाहिए. इसके लिए, तय किए गए यूईएफ़आई प्रोटोकॉल का इस्तेमाल किया जाना चाहिए.

  • सुरक्षा. फ़र्मवेयर को Android Verified Boot (AVB) की सभी ज़रूरी शर्तों को पूरा करना होगा, ताकि GBL, बूट इमेज की पुष्टि कर सके.

  • बूट मोड. बाइनरी में, बूट करने के अलग-अलग मोड को हैंडल करने की सुविधा होनी चाहिए. जैसे, नॉर्मल बूट, रिकवरी बूट, और फ़ास्टबूट.

  • डाइनैमिक पार्टिशनिंग. बूट फ़र्मवेयर में स्लॉट चुनने का लॉजिक लागू होना चाहिए, ताकि यह सही A/B बूट स्लॉट को पढ़ सके. साथ ही, यह सुपर पार्टीशन में मौजूद डाइनैमिक पार्टीशन और userdata के साथ काम कर सके.

  • ओएस कॉन्फ़िगरेशन. फ़र्मवेयर में, कर्नल कमांड लाइन, डिवाइस ट्री (डीटीबी), और बूटकॉन्फ़िग में बदलाव करने की सुविधा होनी चाहिए. साथ ही, डिवाइस को बूट करने के लिए ओईएम के हिसाब से ज़रूरी बदलाव करने की सुविधा भी होनी चाहिए.

  • Protected VM लोड हो रहा है. सुरक्षित वीएम मौजूद होने पर, बाइनरी को Android कर्नल से पहले, पुष्टि किए गए सुरक्षित वीएम फ़र्मवेयर को सही तरीके से लोड करना चाहिए. ज़्यादा जानकारी के लिए, Microdroid का बूट सीक्वेंस देखें.

  • मेमोरी मैनेज करना. बूट फ़र्मवेयर में, यूईएफ़आई मेमोरी ऐलोकेशन एपीआई काम करना चाहिए.

लागू करने से जुड़ी ज़रूरी शर्तें

आपके डिवाइस पर GBL को सही तरीके से लागू करने के लिए, आपको ये ज़रूरी शर्तें पूरी करनी होंगी:

  • आपके डिवाइस में दो FAT32 पार्टीशन होने चाहिए. इनका साइज़ 4 एमबी या इससे ज़्यादा होना चाहिए. साथ ही, इन्हें android_esp_a और android_esp_b नाम दिया गया हो. ये ऐसे ब्लॉक डिवाइस पर होने चाहिए जिन्हें एसओसी ऐक्सेस कर सकता हो.

    • ब्लॉक डिवाइस, एक स्टोरेज डिवाइस होता है. इसमें डेटा को ब्लॉक के तौर पर सेव किया जाता है और ब्लॉक के तौर पर ही पढ़ा जाता है. उदाहरण के लिए, यूएफ़एस, ईएमएमसी, और एसडी कार्ड डिवाइस.
    • FAT32 का इस्तेमाल इसलिए किया जाता है, क्योंकि यह एक सामान्य और आसान फ़ाइल सिस्टम है.
    • इस Android वर्शन के लिए, ओवर-द-एयर (OTA) अपडेट और रोलबैक की सुविधा पाने के लिए, दोनों पार्टिशन ज़रूरी हैं.
    • GBL का साइज़, बिना कंप्रेस किए करीब 2 एमबी होता है. अगले सात सालों में, अतिरिक्त सुविधाओं की वजह से होने वाली किसी भी तरह की बढ़ोतरी के लिए 4 एमबी काफ़ी है.
    • GBL अपडेट होने पर, आपको पूरा android_esp_${SLOT_SUFFIX} पार्टीशन अपडेट करना होगा. Android OTA, सिर्फ़ GBL अपडेट करने की सुविधा नहीं देता.
  • तैनात किए गए GBL का वर्शन, GBL की रिलीज़ ब्रांच से सर्टिफ़ाइड किया गया सबसे नया प्रोडक्शन बिल्ड होना चाहिए. हमारा सुझाव है कि आप अपने पसंदीदा हस्ताक्षर समाधान का इस्तेमाल करके, GBL की Google से सर्टिफ़ाइड कॉपी पर हस्ताक्षर करें. साथ ही, जनरेट किए गए बिल्ड और हस्ताक्षर के मेटाडेटा को android_esp_${SLOT_SUFFIX} पार्टीशन में सेव करें.

    • OEM के हस्ताक्षर से GBL सर्टिफ़िकेट में कोई बदलाव नहीं होना चाहिए. साथ ही, बाइनरी पर कोई हेडर लागू नहीं होना चाहिए.
    • डेवलपर GBL बिल्ड का इस्तेमाल सिर्फ़ डेवलपमेंट और डीबग करने के लिए किया जाता है. इस बिल्ड को शिप नहीं किया जा सकता. साथ ही, Google इसे सर्टिफ़ाई नहीं करेगा.
  • GBL को FAT32 पार्टिशन में /EFI/BOOT/BOOTAA64.EFI पाथ पर सेव किया जाना चाहिए.

  • GBL के साथ काम करने के लिए, ज़रूरी UEFI और Android UEFI प्रोटोकॉल लागू करें. अगर ये इंटरफ़ेस काम नहीं करते हैं, तो GBL का प्रोडक्शन बिल्ड बूट नहीं हो पाता.

    • EFI_BLOCK_IO_PROTOCOL या EFI_BLOCK_IO2_PROTOCOL, डिस्क से बूट इमेज और pvmfw इमेज फ़ेच करता है
    • EFI_RNG_PROTOCOL का इस्तेमाल स्टैक कैनरी, KASLR सीड, और RNG सीड के लिए किया जाता है
    • AVB और DICE कंप्यूटेशन के लिए स्क्रैच मेमोरी को असाइन करने वाली मेमोरी असाइनमेंट सेवाएं
    • EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL नो-ऑप लागू करने का विकल्प देता है, लेकिन GBL इस प्रोटोकॉल के ज़रिए डिफ़ॉल्ट रूप से लॉग करता है
    • GBL_EFI_AVB_PROTOCOL बूट इमेज की पुष्टि करने के लिए, सार्वजनिक पासकोड और रोलबैक इंडेक्स ऐक्सेस करता है
    • GBL_EFI_BOOT_CONTROL_PROTOCOL, फ़र्मवेयर से स्लॉट मेटाडेटा और बूट होने की वजहों की जानकारी इकट्ठा करता है
    • GBL_EFI_AVF_PROTOCOL, DICE चेन से AVF कॉन्फ़िगरेशन डेटा जनरेट करता है
  • GBL को इंटिग्रेट करते समय, UEFI प्रोटोकॉल इस्तेमाल करने का सुझाव दिया जाता है. इनके बारे में GBL UEFI प्रोटोकॉल में बताया गया है.

बूट फ़र्मवेयर सपोर्ट

पिछले सेक्शन में बताई गई ज़रूरी शर्तों को पूरा करने के लिए, यहां दिए गए UEFI फ़र्मवेयर के ये वर्शन, GBL के साथ काम करते हैं:

  • EDK2 (Tianocore). EDK2, UEFI को लागू करने वाला एक लोकप्रिय ओपन-सोर्स है. EDK2 पर आधारित बूटलोडर के लिए, GBL की सुविधा ज़रूरी है. हालांकि, UEFI की सुविधा पहले से मौजूद है.
  • U-Boot. यह एक फ़्लेक्सिबल और बड़े पैमाने पर इस्तेमाल किया जाने वाला ओपन-सोर्स बूटलोडर प्रोजेक्ट है. यह GBL के इस्तेमाल के लिए, UEFI के साथ काम करने की सुविधा हासिल कर रहा है.
  • LittleKernel (LK). यह एक ओपन-सोर्स बूटलोडर है. इसका इस्तेमाल कुछ वेंडर करते हैं.

GBL चलाएं

आपके पास GBL का पहले से बना बाइनरी फ़ाइल पाने का विकल्प है. इसके अलावा, आपके पास अपनी बाइनरी फ़ाइल बनाने और उसे चलाने का विकल्प भी है.

GBL बाइनरी हासिल करना और उसे चलाना

GBL को एक ही UEFI ऐप्लिकेशन बाइनरी के तौर पर डिस्ट्रिब्यूट किया जाता है. Android के स्टैंडर्ड अपडेट मैकेनिज़्म का इस्तेमाल करके, इस बाइनरी को डिवाइस के बेस फ़र्मवेयर से अलग अपडेट किया जा सकता है.

Android 16 से, अगर आपको ARM-64 चिपसेट पर आधारित कोई डिवाइस शिप करना है, तो हमारा सुझाव है कि आप GBL के Google से सर्टिफ़ाइड नए वर्शन को डिप्लॉय करें और इसे अपनी बूट चेन में इंटिग्रेट करें.

GBL बनाएं

GBL बनाने के लिए:

  1. पुष्टि करें कि आपने repo टूल और Bazel बूटस्ट्रैप इंस्टॉल किया हो:

    sudo apt install repo bazel-bootstrap
    
  2. uefi-gbl-mainline मेनिफ़ेस्ट फ़ाइल का इस्तेमाल करके, सोर्स कंट्रोल के लिए अपनी मौजूदा डायरेक्ट्री शुरू करें:

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. UEFI ऐप्लिकेशन बनाएं:

    tools/bazel run //bootable/libbootloader:gbl_efi_dist
    

Android वर्चुअल डिवाइस पर GBL की जांच करना

  1. Cuttlefish में GBL चलाएं:

    cvd start --android_efi_loader=path_to_the_UEFI_app ...
    

    Android को सीधे बूट करने के बजाय, यह cvd start कमांड Android को बूट करने के लिए UEFI ऐप्लिकेशन का इस्तेमाल करती है.

गड़बड़ियों की रिपोर्ट करना और बूटलोडर टीम से संपर्क करना

GBL में मौजूद किसी गड़बड़ी की शिकायत करने के लिए, Buganizer में Android Generic Bootloader कॉम्पोनेंट पर जाएं.

अगर आपका कोई सवाल है, तो GBL टीम से संपर्क करें. इसके लिए, android-gbl@google.com पर ईमेल भेजें.