बूट चित्र शीर्षलेख

Android 9 के बूट इमेज में वर्शन फ़ील्ड दिखाया गया हेडर की मदद से, पुराने सिस्टम के साथ काम करने की सुविधा को बनाए रखते हुए, हेडर के अपडेट चालू किए जा सकते हैं. बूटलोडर को हेडर वर्शन फ़ील्ड की जांच करनी होगी और हेडर को पार्स करना होगा उसी के हिसाब से. इन डिवाइसों के साथ लॉन्च होने वाले डिवाइस:

Android 9 या उसके बाद के वर्शन वाले सभी डिवाइसों में, विक्रेता टेस्ट सुइट (वीटीएस) boot/recovery इमेज, ताकि यह पक्का किया जा सके कि बूट इमेज के हेडर में सही वर्शन है. एओएसपी के साथ काम करने वाले सभी बूट और वेंडर बूट की जानकारी देखने के लिए चित्र शीर्षलेख, देखें system/tools/mkbootimg/include/bootimg/bootimg.h.

बूट इमेज हेडर वर्शन को लागू करें

mkbootimg टूल में ये आर्ग्युमेंट स्वीकार किए जाते हैं.

आर्ग्यूमेंट ब्यौरा
header_version बूट इमेज हेडर वर्शन को सेट करता है. हेडर वर्शन वाली बूट इमेज:
  • वैल्यू 1 या 2, रिकवरी डीटीबीओ इमेज या रिकवरी एसीपीआईओ इमेज के साथ काम करती है.
  • 3 में, रिकवरी इमेज का इस्तेमाल नहीं किया जा सकता.
recovery_dtbo इसका इस्तेमाल DTB का इस्तेमाल करने वाले आर्किटेक्चर के लिए किया जाता है. रिकवरी का पाथ बताता है DTBO इमेज. A/B डिवाइसों के लिए ज़रूरी नहीं है. इनमें रिकवरी इमेज की ज़रूरत नहीं होती. header_version का इस्तेमाल करने वाले नॉन-A/B डिवाइस:
  • 1 या 2 इस पाथ के बारे में बता सकता है या recovery_acpio का इस्तेमाल कर सकता है सेक्शन पर जाएं.
  • 3, रिकवरी DTBO इमेज के बारे में नहीं बता सकता.
recovery_acpio इसका इस्तेमाल ऐसे आर्किटेक्चर के लिए किया जाता है जो DTB के बजाय ACPI का इस्तेमाल करते हैं. पाथ बताता है जोड़ दिया जाएगा. A/B डिवाइसों के लिए ज़रूरी नहीं है. इन्हें इस्तेमाल करने के लिए रिकवरी इमेज. header_version का इस्तेमाल करने वाले नॉन-A/B डिवाइस:
  • 1 या 2 इस पाथ के बारे में बता सकता है या recovery_dtbo का इस्तेमाल कर सकता है सेक्शन पर जाएं.
  • 3, रिकवरी एसीपीआईओ इमेज के बारे में नहीं बताता.
dtb बूट/रिकवरी इमेज में शामिल डीटीबी इमेज का पाथ.
dtb_offset base आर्ग्युमेंट में जोड़ने पर, फ़िज़िकल लोड मिलता है पता डालें. उदाहरण के लिए, अगर base तर्क 0x10000000 और dtb_offset तर्क है 0x01000000 है, बूट इमेज में dtb_addr_field हेडर, 0x11000000 के रूप में पॉप्युलेट होता है.

डिवाइस जोड़ने के लिए, BoardConfig.mk कॉन्फ़िगरेशन BOARD_MKBOOTIMG_ARGS का इस्तेमाल करता है header version. mkbootimg के लिए, बोर्ड के अन्य आर्ग्युमेंट की तुलना में. इसके लिए उदाहरण:

BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

Android का बिल्ड सिस्टम, BoardConfig वैरिएबल का इस्तेमाल करता है इस पैरामीटर का recovery_dtbo आर्ग्युमेंट सेट करने के लिए, BOARD_PREBUILT_DTBOIMAGE mkbootimg टूल का इस्तेमाल किया गया है. इस पर जानकारी के लिए Android ओपन सोर्स प्रोजेक्ट (AOSP) में किए गए बदलाव, इससे जुड़ी बदलाव सूचियों की समीक्षा करें बूट इमेज हेडर के लिए वर्शन के हिसाब से सही वर्शन चुनना.

बूट इमेज हेडर, वर्शन 4

Android 12 की बूट इमेज में boot_signature दिखता है हेडर वर्शन 4 का इस्तेमाल किया जा सकता है, जिसका इस्तेमाल कर्नेल और रैम डिस्क. जांच इतने समय में पूरी होगी VtsSecurityAvbTest ऐसा करना ज़रूरी है. यह जीकेआई आर्किटेक्चर का इस्तेमाल करने वाले डिवाइसों के लिए ज़रूरी है. हालांकि, boot_signature, डिवाइस के हिसाब से, पुष्टि की गई बूट प्रोसेस में शामिल नहीं है इसे सिर्फ़ वीटीएस में इस्तेमाल किया जाता है. GKIboo.img बोर्ड कॉन्फ़िगरेशन और GKI वेरिफ़ाइड बूट सेटिंग देखें.

वेंडर की बूट इमेज हेडर वर्शन 4, एक से ज़्यादा वेंडर के रैम डिस्क फ़्रैगमेंट के साथ काम करता है.

बूट इमेज हेडर वर्शन का वर्शन 4 नीचे दिए गए फ़ॉर्मैट का इस्तेमाल करता है.

struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
    uint8_t magic[BOOT_MAGIC_SIZE];

    uint32_t kernel_size;    /* size in bytes */
    uint32_t ramdisk_size;   /* size in bytes */

    uint32_t os_version;

    uint32_t header_size;    /* size of boot image header in bytes */
    uint32_t reserved[4];
    uint32_t header_version; /* offset remains constant for version check */

#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
    uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];

    uint32_t signature_size; /* size in bytes */
};

बूट इमेज हेडर, वर्शन 3

Android 11, बूट इमेज हेडर को वर्शन 3 में अपडेट करता है, जो इस डेटा को हटा देता है:

  • दूसरे चरण का बूटलोडर. second_size और second_addr फ़ील्ड में कोई नहीं बूट इमेज हेडर में लंबे समय तक दिखाई देते हैं. सेकंड-स्टेज बूटलोडर वाले डिवाइस को उस बूटलोडर को उसके अपने पार्टीशन में सेव करना होगा.

  • रिकवरी इमेज. रिकवरी इमेज तय करने की ज़रूरी शर्त और recovery_dtbo_size, recovery_dtbo_offset, recovery_acpio_size और recovery_acpio_offset फ़ील्ड अब इसमें नहीं दिखते बूट इमेज हेडर.

    • A/B डिवाइसों में, अपडेट और रिकवरी स्कीम का इस्तेमाल किया जाता है. इस वजह से, रिकवरी के लिए DTBO या ACPIO इमेज तय करें.

    • बिना A/B डिवाइस, जो रिकवरी इमेज की जानकारी देना चाहते हैं (DTBO या एसीआईओ) को बूट इमेज हेडर वर्शन 1 या 2 का इस्तेमाल करना चाहिए.

  • डिवाइस ट्री ब्लॉब (डीटीबी). DTB को वेंडर बूट में सेव किया जाता है बंटवारा, इसलिए dtb_size और dtb_addr फ़ील्ड अब बूट इमेज में नहीं दिखते हेडर (हालांकि, ये वेंडर बूट इमेज हेडर में मौजूद होते हैं).

जेनरिक कर्नेल इमेज के मुताबिक बनाने के लिए डिवाइस बूट इमेज हेडर वर्शन 3 का इस्तेमाल कर सकते हैं (जीकेआई) आर्किटेक्चर, जो कोर कर्नेल को एक साथ रखता है और उन वेंडर मॉड्यूल को ट्रांसफ़र करता है जिनकी ज़रूरत होती है vendor_boot पार्टिशन में बूट करें (इसका मतलब है कि बूट इमेज में सिर्फ़ GKI शामिल है कॉम्पोनेंट). ऐसे डिवाइस जो:

  • GKI का इस्तेमाल करें (इसके लिए android-4.19 या android-5.4 कर्नेल की ज़रूरत होती है) लेकिन इसका इस्तेमाल न करें A/B अपडेट रिकवरी इमेज के लिए इमेज को चालू करें और इमेज को चालू करें.

  • GKE (जीकेआई) का इस्तेमाल न करें और A/B अपडेट का इस्तेमाल न करें. इसका इस्तेमाल करके, रिकवरी इमेज तय की जा सकती है बूट और रिकवरी इमेज, दोनों के लिए इमेज वर्शन 1 या 2 को चालू करें.

बूट इमेज हेडर वर्शन का वर्शन 3 नीचे दिए गए फ़ॉर्मैट का इस्तेमाल करता है.

struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
    uint8_t magic[BOOT_MAGIC_SIZE];

    uint32_t kernel_size;    /* size in bytes */
    uint32_t ramdisk_size;   /* size in bytes */

    uint32_t os_version;

    uint32_t header_size;    /* size of boot image header in bytes */
    uint32_t reserved[4];
    uint32_t header_version; /* offset remains constant for version check */

#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
    uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
};

बूट इमेज हेडर, वर्शन 2

Android 10, बूट इमेज हेडर को वर्शन 2 में अपडेट करता है, जो डीटीबी को वापस पाने के लिए एक सेक्शन जोड़ता है इमेज के बारे में जानकारी (इमेज का साइज़ और फ़िज़िकल लोड पता).

बूट इमेज हेडर वर्शन का वर्शन 2 नीचे दिए गए फ़ॉर्मैट का इस्तेमाल करता है.

struct boot_img_hdr
{
    uint8_t magic[BOOT_MAGIC_SIZE];
    uint32_t kernel_size;               /* size in bytes */
    uint32_t kernel_addr;               /* physical load addr */

    uint32_t ramdisk_size;              /* size in bytes */
    uint32_t ramdisk_addr;              /* physical load addr */

    uint32_t second_size;               /* size in bytes */
    uint32_t second_addr;               /* physical load addr */

    uint32_t tags_addr;                 /* physical addr for kernel tags */
    uint32_t page_size;                 /* flash page size we assume */
    uint32_t header_version;
    uint32_t os_version;
    uint8_t name[BOOT_NAME_SIZE];       /* asciiz product name */
    uint8_t cmdline[BOOT_ARGS_SIZE];
    uint32_t id[8];                     /* timestamp / checksum / sha1 / etc */
    uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
    uint32_t recovery_[dtbo|acpio]_size;    /* size of recovery image */
    uint64_t recovery_[dtbo|acpio]_offset;  /* offset in boot image */
    uint32_t header_size;               /* size of boot image header in bytes */
    uint32_t dtb_size;                  /* size of dtb image */
    uint64_t dtb_addr;                  /* physical load address */
};

बूट इमेज हेडर, वर्शन 1

Android 9, बूट के unused फ़ील्ड को कन्वर्ट कर देता है हेडर वर्शन फ़ील्ड में इमेज के हेडर को दिखाता है. Android के साथ लॉन्च होने वाले डिवाइस 9 को हेडर के साथ बूट इमेज हेडर का इस्तेमाल करना होगा 1 या उसके बाद वाले वर्शन पर सेट हो (इसकी पुष्टि वीटीएस ने की है).

बूट इमेज हेडर वर्शन का वर्शन 1 नीचे दिए गए फ़ॉर्मैट का इस्तेमाल करता है.

struct boot_img_hdr
{
    uint8_t magic[BOOT_MAGIC_SIZE];
    uint32_t kernel_size;               /* size in bytes */
    uint32_t kernel_addr;               /* physical load addr */
    uint32_t ramdisk_size;              /* size in bytes */
    uint32_t ramdisk_addr;              /* physical load addr */

    uint32_t second_size;               /* size in bytes */
    uint32_t second_addr;               /* physical load addr */

    uint32_t tags_addr;                 /* physical addr for kernel tags */
    uint32_t page_size;                 /* flash page size we assume */
    uint32_t header_version;
    uint32_t os_version;
    uint8_t name[BOOT_NAME_SIZE];       /* asciiz product name */
    uint8_t cmdline[BOOT_ARGS_SIZE];
    uint32_t id[8];                     /* timestamp / checksum / sha1 / etc */
    uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
    uint32_t recovery_[dtbo|acpio]_size;    /* size of recovery image */
    uint64_t recovery_[dtbo|acpio]_offset;  /* offset in boot image */
    uint32_t header_size;               /* size of boot image header in bytes */
};

गैर-A/B डिवाइस रिकवरी के लिए टैप करें ओवर-द-एयर (ओटीए) अपडेट नहीं हो सका. (A/B डिवाइसों में यह समस्या नहीं है और ओवरले इमेज के बारे में बताने की ज़रूरत नहीं है.) आप कोई DTBO इमेज बता सकते हैं या एक ACPIO इमेज होनी चाहिए, लेकिन दोनों नहीं (क्योंकि उनका इस्तेमाल अलग-अलग आर्किटेक्चर में किया जाता है). बूट इमेज के हेडर को सही तरीके से कॉन्फ़िगर करने के लिए, इनका इस्तेमाल करें:

  • रिकवरी के लिए DTBO इमेज, जिसमें recovery_dtbo_size और recovery_dtbo_offset फ़ील्ड का इस्तेमाल करें (इनमें recovery_acpio_size और recovery_acpio_offset फ़ील्ड शामिल करें).

  • रिकवरी के लिए एसीपीआईओ इमेज, जिसमें recovery_acpio_size और recovery_acpio_offset फ़ील्ड का इस्तेमाल करें (इनमें recovery_dtbo_size और recovery_dtbo_offset फ़ील्ड शामिल करें).

header_size फ़ील्ड में, बूट इमेज के हेडर का साइज़ होता है. अगर बूट (बूट) इमेज हेडर वर्शन 1 पर सेट है, id फ़ील्ड में बूट इमेज के recovery_[dtbo|acpio] सेक्शन में kernel, ramdisk, और second sections. इस पर जानकारी के लिए recovery_[dtbo|acpio]_size और recovery_[dtbo|acpio]_offset फ़ील्ड: देखें खाता वापस पाने के लिए इमेज.

लेगसी बूट इमेज हेडर, वर्शन 0

Android 9 से पहले लॉन्च किए गए डिवाइस, जिनमें लेगसी वर्शन का इस्तेमाल किया जा रहा है बूट इमेज हेडर को 'बूट इमेज हेडर' वर्शन 0 का इस्तेमाल करने वाला माना जाता है.

struct boot_img_hdr
{
    uint8_t magic[BOOT_MAGIC_SIZE];
    uint32_t kernel_size;                /* size in bytes */
    uint32_t kernel_addr;                /* physical load addr */

    uint32_t ramdisk_size;               /* size in bytes */
    uint32_t ramdisk_addr;               /* physical load addr */

    uint32_t second_size;                /* size in bytes */
    uint32_t second_addr;                /* physical load addr */

    uint32_t tags_addr;                  /* physical addr for kernel tags */
    uint32_t page_size;                  /* flash page size we assume */
    uint32_t unused;
    uint32_t os_version;
    uint8_t name[BOOT_NAME_SIZE];        /* asciiz product name */
    uint8_t cmdline[BOOT_ARGS_SIZE];
    uint32_t id[8];                      /* timestamp / checksum / sha1 / etc */
    uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
};