ภาพรวม

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

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

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

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

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

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

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

  • พาร์ติชัน system พาร์ติชันนี้มีกรอบงาน Android

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

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

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

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

  • พาร์ทิชัน misc พาร์ติชั่นการกู้คืนใช้พาร์ติชั่นนี้ และมีขนาด 4 KB ขึ้นไป

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

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

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

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

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

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

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

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

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

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

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

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

เค้าโครงพาร์ติชัน Android

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

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

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

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

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

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

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

VNDK เปลี่ยนแปลง

Vendor Native Development Kit (VNDK) คือชุดของไลบรารีที่ติดตั้งในพาร์ติชั่น system และได้รับการออกแบบมาโดยเฉพาะสำหรับผู้จำหน่ายเพื่อใช้ HAL ของตน

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

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

ตัวเลือกสินค้า Soon

ระบบ บิลด์ Soong ใช้รูปแบบรูปภาพเพื่อแยกการพึ่งพาบิลด์ โมดูลเนทีฟ ( /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 ไม่พร้อมใช้งานสำหรับโมดูลผลิตภัณฑ์