ภาพรวม

อุปกรณ์ Android มีพาร์ติชันหลายรายการที่ทำหน้าที่ต่างกันในกระบวนการบูต

พาร์ติชันมาตรฐาน

  • พาร์ติชัน boot พาร์ติชันนี้มีอิมเมจเคอร์เนลและสร้างขึ้นโดยใช้ mkbootimg คุณสามารถใช้พาร์ติชันเสมือนเพื่อแฟลชรูปภาพใดรูปภาพหนึ่งโดยตรงโดยไม่ต้องแฟลชพาร์ติชันการบูตใหม่ พาร์ติชันนี้ยังมี RAMdisk ทั่วไปในอุปกรณ์ที่เปิดตัวก่อน Android 13 ด้วย

    • kernel. พาร์ติชัน kernel เสมือนจะเขียนทับเคอร์เนล (zImage, zImage-dtb, Image.gz-dtb) โดยการเขียนอิมเมจเคอร์เนลใหม่ทับอิมเมจเคอร์เนลเก่า หากเคอร์เนลสำหรับการพัฒนาซอฟต์แวร์ที่ระบุเข้ากันไม่ได้ คุณอาจต้องอัปเดตพาร์ติชัน vendor, system หรือ dtb (หากมี) ด้วยโมดูลเคอร์เนลที่เกี่ยวข้อง

    • ramdisk พาร์ติชันเสมือน ramdisk จะแทนที่ RAM ด้วยการเขียนอิมเมจ RAM ใหม่เหนืออิมเมจ RAM เดิม

    การดำเนินการเขียนทับจะกำหนดตำแหน่งเริ่มต้นของรูปภาพที่มีอยู่ใน eMMC และคัดลอกรูปภาพใหม่ไปยังตำแหน่งนั้น อิมเมจใหม่ (เคอร์เนลหรือแรมดิสก์) อาจใหญ่กว่าอิมเมจที่มีอยู่ บูตโหลดเดอร์จึงอาจย้ายข้อมูลตามอิมเมจหรือยกเลิกการดำเนินการโดยแสดงข้อผิดพลาดเพื่อให้มีพื้นที่ว่าง

  • พาร์ติชัน init_boot พาร์ติชันนี้มี RAMdisk ทั่วไปสำหรับอุปกรณ์ที่เปิดตัวด้วย Android 13 ขึ้นไป

  • พาร์ติชัน system พาร์ติชันนี้มีเฟรมเวิร์ก Android

  • พาร์ติชัน odm พาร์ติชันนี้มีการปรับแต่งจากผู้ผลิตดั้งเดิม (ODM) เป็นแพ็กเกจการสนับสนุนบอร์ดสำหรับผู้ให้บริการ (SoC) ของระบบบนชิป (SoC) การปรับแต่งดังกล่าวช่วยให้ ODM เปลี่ยนหรือปรับแต่งคอมโพเนนต์ SoC รวมถึงติดตั้งใช้งานโมดูลเคอร์เนลสำหรับคอมโพเนนต์เฉพาะบอร์ดและเดมอน รวมถึงฟีเจอร์เฉพาะ ODM ในเลเยอร์การแยกแยะฮาร์ดแวร์ (HAL) ได้ พาร์ติชันนี้ไม่บังคับ โดยปกติแล้วจะใช้เพื่อเก็บข้อมูลการปรับแต่งเพื่อให้อุปกรณ์ใช้ภาพจากผู้ให้บริการรายเดียวสำหรับ SKU ฮาร์ดแวร์หลายรายการได้ โปรดดูรายละเอียดที่หัวข้อพาร์ติชัน ODM

  • พาร์ติชัน odm_dlkm พาร์ติชันนี้มีไว้เพื่อจัดเก็บโมดูลเคอร์เนล ODM โดยเฉพาะ การจัดเก็บโมดูลเคอร์เนล ODM ในพาร์ติชัน odm_dlkm (ซึ่งตรงข้ามกับพาร์ติชัน odm) ทำให้อัปเดตโมดูลเคอร์เนล ODM ได้โดยไม่ต้องอัปเดตพาร์ติชัน odm

  • พาร์ติชัน recovery พาร์ติชันนี้จะจัดเก็บอิมเมจการกู้คืน ซึ่งจะบูตในระหว่างกระบวนการ OTA อุปกรณ์ที่รองรับการอัปเดตแบบราบรื่นจะจัดเก็บรูปภาพการกู้คืนเป็นแรมดิสก์ที่อยู่ในรูปภาพ boot หรือ init_boot ได้ (แทนที่จะเป็นรูปภาพแยกต่างหาก)

  • พาร์ติชัน cache พาร์ติชันนี้จะจัดเก็บข้อมูลชั่วคราวและคุณเลือกได้หากอุปกรณ์ใช้การอัปเดตแบบราบรื่น พาร์ติชันแคชไม่จำเป็นต้องเขียนจากบูตโหลดเดอร์ได้ แต่ต้องลบได้ ขนาดของพาร์ติชันจะขึ้นอยู่กับประเภทอุปกรณ์และพื้นที่ว่างใน userdata โดยปกติแล้ว 50-100 MB ก็เพียงพอแล้ว

  • พาร์ติชัน misc พาร์ติชันนี้ใช้โดยพาร์ติชันการกู้คืนและมีขนาดใหญ่กว่าหรือเท่ากับ 256 KB

  • พาร์ติชัน userdata พาร์ติชันนี้มีแอปและข้อมูลที่ผู้ใช้ติดตั้ง รวมถึงข้อมูลการปรับแต่ง

  • พาร์ติชัน metadata พาร์ติชันนี้ใช้เพื่อจัดเก็บคีย์การเข้ารหัสข้อมูลเมตาเมื่ออุปกรณ์ใช้การเข้ารหัสข้อมูลเมตา ไฟล์มีขนาดอย่างน้อย 16 MB โดยระบบไม่ได้เข้ารหัสและไม่ได้เก็บสแนปชอตข้อมูล ระบบจะลบข้อมูลดังกล่าวออกเมื่อรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้น การใช้งานพาร์ติชันนี้มีข้อจำกัดอย่างมาก

  • พาร์ติชัน vendor พาร์ติชันนี้มีไบนารีที่กระจายไปยัง AOSP ไม่ได้ หากอุปกรณ์ไม่มีข้อมูลที่เป็นกรรมสิทธิ์ คุณก็ข้ามพาร์ติชันนี้ได้

  • พาร์ติชัน vendor_dlkm พาร์ติชันนี้มีไว้สำหรับจัดเก็บข้อบังคับของเคอร์เนลของผู้ให้บริการโดยเฉพาะ การจัดเก็บโมดูลเคอร์เนลของผู้ให้บริการไว้ในพาร์ติชัน vendor_dlkm (ไม่ใช่พาร์ติชัน vendor) จะช่วยให้อัปเดตโมดูลเคอร์เนลได้โดยไม่ต้องอัปเดตพาร์ติชัน vendor

  • พาร์ติชัน radio พาร์ติชันนี้มีรูปภาพวิทยุและจำเป็นสำหรับอุปกรณ์ที่มีวิทยุที่มีซอฟต์แวร์เฉพาะวิทยุในพาร์ติชันเฉพาะเท่านั้น

  • พาร์ติชัน tos พาร์ติชันนี้จะจัดเก็บอิมเมจไบนารีของระบบปฏิบัติการ Trusty และจะใช้งานได้ก็ต่อเมื่ออุปกรณ์มี Trusty เท่านั้น โปรดดูรายละเอียดที่ข้อกำหนดในการให้บริการ พาร์ติชัน

  • พาร์ติชัน pvmfw พาร์ติชันนี้จะจัดเก็บเฟิร์มแวร์ของ Virtual Machine ที่ได้รับการปกป้อง (pvmfw) ซึ่งเป็นโค้ดแรกที่ทำงานใน VM ที่ได้รับการปกป้อง ดูรายละเอียดเพิ่มเติมได้ที่เฟิร์มแวร์ของ Virtual Machine ที่ป้องกัน

พาร์ติชันแบบไดนามิก

อุปกรณ์ที่ใช้ Android 11 ขึ้นไปรองรับพาร์ติชันแบบไดนามิก ซึ่งเป็นระบบการแบ่งพาร์ติชันพื้นที่ผู้ใช้สำหรับ Android ที่ช่วยให้คุณสร้าง ปรับขนาด หรือลบพาร์ติชันในระหว่างการอัปเดตผ่านอากาศ (OTA) ได้ โปรดดูรายละเอียดที่หัวข้อพาร์ติชันแบบไดนามิก

กำหนดพาร์ติชันที่สำคัญ

หากอุปกรณ์ต้องใช้พาร์ติชันหรือข้อมูลเฉพาะในการทํางาน คุณต้องกําหนดพาร์ติชันหรือข้อมูลเหล่านั้นว่าได้รับการปกป้องอย่างเต็มรูปแบบหรือสามารถแฟลชอีกครั้ง ซึ่งหมายความว่าสามารถสร้างขึ้นใหม่ ระบุ หรือดึงข้อมูลได้โดยใช้คําสั่ง fastboot oem ซึ่งรวมถึงข้อมูลต่างๆ เช่น การตั้งค่าเฉพาะสำหรับโรงงานของแต่ละอุปกรณ์ หมายเลขซีเรียล ข้อมูลการปรับเทียบ และอื่นๆ

การเปลี่ยนแปลงใน Android 11

Android 11 มีการเปลี่ยนแปลงจำนวนมากในพาร์ติชัน รวมถึงข้อจำกัดในการลิงก์ไปยังไลบรารีและตัวแปรรูปภาพใหม่ของ Soong

เลย์เอาต์พาร์ติชัน Android

รูปที่ 1 เลย์เอาต์พาร์ติชันใน Android 11

  • Single System Image (SSI) รูปภาพเชิงแนวคิดใหม่ที่มีรูปภาพ system และ system_ext เมื่อพาร์ติชันเหล่านี้เหมือนกันสำหรับชุดอุปกรณ์เป้าหมาย อุปกรณ์เหล่านั้นจะแชร์ SSI และข้ามการสร้างรูปภาพ system และ system_ext ได้

  • พาร์ติชัน system_ext พาร์ติชันใหม่ที่สามารถใช้ทรัพยากร system และรวมโมดูลระบบต่อไปนี้ได้

    • ขยายโมดูลระบบ AOSP ในพาร์ติชัน system เราขอแนะนำให้ส่งต่อโมดูลดังกล่าวไปยัง AOSP เพื่อให้ติดตั้งลงในพาร์ติชัน system ได้ภายหลัง

    • แพ็กเกจโมดูลเฉพาะ OEM หรือ SoC เราขอแนะนำให้เลิกรวมกลุ่มโมดูลดังกล่าวเพื่อให้สามารถติดตั้งลงในพาร์ติชัน product หรือ vendor ได้

  • พาร์ติชัน system อิมเมจระบบทั่วไปที่ใช้สำหรับผลิตภัณฑ์ OEM เราขอแนะนำให้ย้ายโมดูลที่เป็นกรรมสิทธิ์ออกจากพาร์ติชัน system โดยการส่งไปยัง AOSP หรือย้ายไปยังพาร์ติชัน system_ext

  • พาร์ติชัน product ตอนนี้พาร์ติชันนี้สามารถใช้อินเทอร์เฟซที่ได้รับอนุญาตเพื่อติดตั้งโมดูลเฉพาะผลิตภัณฑ์ที่ไม่ได้รวมอยู่ในพาร์ติชันอื่นๆ

การเปลี่ยนแปลง VNDK

ชุดพัฒนาซอฟต์แวร์แบบเนทีฟสำหรับผู้ให้บริการ (VNDK) เป็นชุดไลบรารีที่ติดตั้งในพาร์ติชัน system และออกแบบมาเพื่อใช้ HAL ของผู้ให้บริการโดยเฉพาะ

  • ใน Android 10 และต่ำกว่า พาร์ติชัน vendor จะลิงก์กับไลบรารี VNDK ในพาร์ติชัน system ได้ แต่จะลิงก์กับไลบรารีอื่นๆ ในพาร์ติชัน system ไม่ได้ โมดูลเนทีฟในพาร์ติชัน product จะลิงก์กับไลบรารีใดก็ได้ในพาร์ติชัน system

  • ใน Android 11 ขึ้นไป พาร์ติชัน product และ vendor จะลิงก์กับไลบรารี VNDK ในพาร์ติชัน system ได้ แต่จะลิงก์กับไลบรารีอื่นๆ ในพาร์ติชัน system ไม่ได้

ผลิตภัณฑ์ย่อยของ Soong

ระบบการสร้างของ Soong ใช้ตัวแปรรูปภาพเพื่อแยก Dependency ของการสร้าง โมดูลเนทีฟ (/build/soong/cc) สามารถเปลี่ยนโมดูลการประมวลผลของระบบเป็นตัวแปรหลักและโมดูลการประมวลผลของผู้ให้บริการเป็นตัวแปรของผู้ให้บริการได้ โมดูลในตัวแปรรูปภาพหนึ่งจะลิงก์กับโมดูลอื่นๆ ในตัวแปรรูปภาพอื่นไม่ได้

  • ใน Android 10 หรือต่ำกว่า โมดูลระบบจะสร้างตัวแปรหลักโดยอัตโนมัติ นอกจากนี้ยังสามารถสร้างตัวแปรของผู้ให้บริการได้ด้วยการกำหนด vendor_available: true ในไฟล์ Android.bp ซึ่งจะช่วยให้โมดูลของผู้ให้บริการลิงก์กับโมดูลของระบบได้ ไลบรารี VNDK ซึ่งเป็นตัวแปรของผู้ให้บริการสำหรับไลบรารี system สามารถสร้างตัวแปรของผู้ให้บริการสำหรับโมดูลของผู้ให้บริการได้ด้วยการกำหนด vendor_available: true ในไฟล์ Android.bp (ดูตัวอย่าง)

  • ใน Android 11 โมดูลระบบยังสร้างผลิตภัณฑ์ย่อย (นอกเหนือจากผลิตภัณฑ์ย่อยหลักและผลิตภัณฑ์ย่อยของผู้ให้บริการ) ได้ด้วย โดยกำหนด vendor_available: true

  • ใน Android 12 ขึ้นไป โมดูลระบบที่มี vendor_available: true จะสร้างตัวแปรของผู้ให้บริการนอกเหนือจากตัวแปรหลัก หากต้องการสร้างผลิตภัณฑ์ย่อย คุณต้องกำหนด product_available: true ไลบรารี VNDK บางรายการที่ไม่มี product_available: true จะใช้กับโมดูลผลิตภัณฑ์ไม่ได้