ภาพรวม

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

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

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

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

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

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

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

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

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

  • พาร์ติชัน 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

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

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

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

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

หากอุปกรณ์ต้องการพาร์ติชั่นหรือข้อมูลเฉพาะเพื่อรัน คุณต้องกำหนดพาร์ติชั่น/ข้อมูลเหล่านั้นให้มีการป้องกันอย่างสมบูรณ์หรือแบบแฟลชใหม่ได้ ซึ่งหมายความว่าพาร์ติชั่นหรือข้อมูลเหล่านี้สามารถสร้างใหม่ได้ จัดเตรียม หรือแยกได้โดยใช้คำสั่ง 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 ได้ในภายหลัง

    • รวมโมดูล 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 ได้

ซูงผลิตภัณฑ์หลากหลายรูปแบบ

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