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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • ब्लॉक डिवाइस, एक स्टोरेज डिवाइस होता है. इसमें ब्लॉक के हिसाब से डेटा पढ़ा या लिखा जा सकता है. उदाहरण के लिए, यूएफ़एस, ईएमएमसी, और एसडी कार्ड डिवाइस.
    • FAT का इस्तेमाल इसलिए किया जाता है, क्योंकि यह एक सामान्य और आसान फ़ाइल सिस्टम है.
    • हमारा सुझाव है कि आप FAT12, FAT16, और FAT32 में से, अपनी ज़रूरतों के हिसाब से FAT फ़ाइल सिस्टम चुनें.
    • इस Android वर्शन के लिए, ओटीए (ओवर-द-एयर) अपडेट और रोलबैक की सुविधा पाने के लिए, दोनों पार्टीशन ज़रूरी हैं.
    • GBL, बिना कंप्रेस किए करीब 2 एमबी का होता है. अगले सात सालों में, अतिरिक्त सुविधाओं की वजह से होने वाली किसी भी तरह की बढ़ोतरी के लिए 4 एमबी काफ़ी है.
    • GBL अपडेट होने पर, आपको पूरा android_esp_${SLOT_SUFFIX} पार्टीशन अपडेट करना होगा. Android OTA, सिर्फ़ GBL अपडेट करने की सुविधा नहीं देता.
    • दोनों FAT पार्टिशन के लिए इस्तेमाल किया गया पार्टिशन टाइप GUID, ईएफ़आई सिस्टम पार्टिशन GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B से मेल खाना चाहिए.
  • तैनात किए गए 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 सीड के लिए
    • एवीबी और डाइस कंप्यूटेशन के लिए स्क्रैच मेमोरी को असाइन करने वाली मेमोरी असाइनमेंट सेवाएं
    • 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 पर ईमेल भेजें.