พาร์ติชั่น ODM

Android 10 รองรับการสร้างพาร์ติชั่น odm โดยใช้ระบบบิลด์ของ Android

เกี่ยวกับพาร์ติชั่น ODM

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

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

การใช้พาร์ติชันผลิตภัณฑ์และ ODM

Android 9 เพิ่มการสนับสนุนสำหรับการสร้าง พาร์ติชัน product ทำให้สามารถใช้อิมเมจระบบเดียวสำหรับ SKU ซอฟต์แวร์หลายตัวที่จัดหาโดยอิมเมจ product.img ที่แตกต่างกัน แม้ว่าพาร์ติชั่น product มีไว้สำหรับ SKU ของซอฟต์แวร์ แต่พาร์ติชั่น odm นั้นมีไว้สำหรับ SKU ของฮาร์ดแวร์

ด้วยผลิตภัณฑ์เฉพาะและพาร์ติชั่น ODM คุณสามารถใช้พาร์ติชั่น system เพื่อโฮสต์โค้ดทั่วไปสำหรับการแชร์ระหว่างซอฟต์แวร์ SKU จำนวนมาก และพาร์ติชั่น vendor เพื่อโฮสต์โค้ด BSP เฉพาะ SoC เพื่อแชร์ระหว่างอุปกรณ์หลายเครื่องตาม SoC ที่กำหนด

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

ส่วนประกอบ ODM

พาร์ติชัน odm มีส่วนประกอบเฉพาะ ODM ต่อไปนี้ (คล้ายกับพาร์ติชันของ vendor ) ซึ่งแสดงอยู่ในตารางต่อไปนี้

ส่วนประกอบเฉพาะ ODM ที่ตั้ง
โมดูลเคอร์เนลที่โหลดได้ (LKMs) /odm/lib/modules/*.ko
ห้องสมุดพื้นเมือง /odm/lib[64]
HALs /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
ข้อมูลวัตถุ VinTF /odm/etc/vintf
ไฟล์ init.rc /odm/etc/init
คุณสมบัติของระบบ /odm/build.prop
โอเวอร์เลย์ทรัพยากรรันไทม์ (RRO) /odm/overlay/*.apk
แอพ /odm/app/*.apk
Priv-แอพ /odm/priv-app/*.apk
ไลบรารี Java /odm/framework/*.jar
การกำหนดค่าระบบ Android Framework /odm/etc/sysconfig/* และ /odm/etc/permissions/*

ไม่มีภาพที่กำหนดเอง

อย่าใช้ รูปภาพที่กำหนดเอง เนื่องจากไม่มีการสนับสนุนสิ่งต่อไปนี้:

  • การติดตั้งโมดูลไปยังเป้าหมายเฉพาะ อิมเมจแบบกำหนดเองรองรับการคัดลอกอาร์ติแฟกต์ลงในอิมเมจ แต่ไม่สามารถติดตั้งโมดูลลงในพาร์ติชั่นเฉพาะได้โดยการระบุพาร์ติชั่นเป้าหมายเป็นส่วนหนึ่งของกฎบิลด์
  • ซุง. ไม่สามารถสร้าง custom_images โดยใช้ระบบบิลด์ Soong
  • อัปเดต OTA รูปภาพที่กำหนดเองใช้เป็นอิมเมจ ROM จากโรงงานซึ่งไม่สามารถ OTA-ed ได้

การรักษา ABI ระหว่างพาร์ติชั่น

พาร์ติชัน odm เป็นส่วนขยายของพาร์ติชัน vendor เมื่อพิจารณาความเสถียรของแอปพลิเคชันไบนารีอินเทอร์เฟซ (ABI) ให้คำนึงถึงสถาปัตยกรรมต่อไปนี้

การรักษา ABI ระหว่างพาร์ติชั่น
รูปที่ 1. การรักษา ABI ระหว่างพาร์ติชั่น
  • ไม่มีความเสถียรของ ABI ระหว่างพาร์ติชัน odm และ vendor พาร์ติชันทั้งสองต้องได้รับการอัพเกรดพร้อมกัน
  • พาร์ติชัน odm และ vendor สามารถพึ่งพาซึ่งกันและกันได้ แต่พาร์ติชันของ vendor ต้อง ทำงานโดยไม่มีพาร์ติชัน odm
  • ABI ระหว่าง odm และ system จะเหมือนกับ ABI ระหว่าง vendor และ system

ไม่อนุญาตให้ มีการโต้ตอบโดยตรงระหว่างพาร์ติชัน product และ vendor หรือพาร์ติชัน odm (สิ่งนี้บังคับใช้โดย SEpolicy)

การนำพาร์ติชัน ODM ไปใช้

ก่อนนำพาร์ติชันใหม่ไปใช้ ให้ตรวจสอบการ เปลี่ยนแปลง AOSP ที่เกี่ยวข้อง

การตั้งค่าพาร์ติชัน ODM

ในการตั้งค่าพาร์ติชัน odm ให้รวมแฟล็กบิลด์เหล่านี้:

  • BOARD_ODMIMAGE_PARTITION_SIZE สำหรับขนาดพาร์ติชั่นคงที่
  • PRODUCT_USE_DYNAMIC_PARTITIONS และ BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE สำหรับขนาด พาร์ติชันแบบไดนามิก
  • BOARD_ODMIMAGE_FILE_SYSTEM_TYPE ประเภทระบบไฟล์ที่ใช้สำหรับอิมเมจ ODM
  • PRODUCT_ODM_PROPERTIES สำหรับ /odm/build.prop สำหรับใช้ภายใน $(call inherit-product path/to/device.mk) เช่นเดียวกับใน PRODUCT_ODM_PROPERTIES += product.abc=ok

การติดตั้งโมดูลกับพาร์ติชัน ODM

ใช้แฟล็กบิลด์เหล่านี้เพื่อติดตั้งโมดูลในพาร์ติชัน odm :

  • device_specific: true ใน Android.bp
  • LOCAL_ODM_MODULE := true ใน Android.mk

การเปิดใช้งาน Verified Boot

เพื่อป้องกันไม่ให้ซอฟต์แวร์ที่เป็นอันตรายยุ่งเกี่ยวกับพาร์ติชั่น odm ให้เปิดใช้งาน Android Verified Boot (AVB) สำหรับพาร์ติชั่นเหล่านั้น (เช่นเดียวกับที่คุณทำกับ vendor และพาร์ติชั่น system )

ในการเปิดใช้งาน AVB ให้รวมแฟ BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS สำหรับรายละเอียดเกี่ยวกับการกำหนดค่า AVB บนพาร์ติชันแบบไดนามิก โปรดดูที่ การเปลี่ยนแปลงการกำหนดค่า AVB

ถือว่า /odm เป็นพาร์ติชั่นอื่น /vendor

เพื่อให้แน่ใจว่าระบบจัดการพาร์ติชัน odm เป็นพาร์ติชันของ vendor ให้แทนที่การอ้างอิง vendor แบบฮาร์ดโค้ดด้วยชุดของพาร์ติชันที่เน้นฮาร์ดแวร์ (ปัจจุบันคือ odm และ vendor ) ตำแหน่งอ้างอิง vendor ที่โดดเด่นในแพลตฟอร์ม ได้แก่ dynamic linker , package manager และ shell/libc