พาร์ติชั่น ODM

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

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

ผู้ผลิตที่ออกแบบดั้งเดิม (ODM) ปรับแต่งแพ็คเกจการสนับสนุนบอร์ด (BSP) ของผู้จำหน่ายระบบบนชิป (SoC) ให้กับอุปกรณ์เฉพาะของตน (บอร์ดของตน) ซึ่งทำให้พวกเขาสามารถใช้โมดูลเคอร์เนลสำหรับส่วนประกอบเฉพาะของบอร์ด daemons เฉพาะของบอร์ด หรือคุณสมบัติของตนเองใน hardware abstraction layer (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 ต่อไปนี้ (คล้ายกับพาร์ติชัน vendor ) ซึ่งแสดงอยู่ในตารางต่อไปนี้

ส่วนประกอบเฉพาะของ ODM ที่ตั้ง
โมดูลเคอร์เนลที่โหลดได้ (LKM) /odm/lib/modules/*.ko
ห้องสมุดพื้นเมือง /odm/lib[64]
HAL /odm/lib[64]/hw
นโยบาย ก /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
ไลบรารีจาวา /odm/framework/*.jar
การกำหนดค่าระบบ Android Framework /odm/etc/sysconfig/* และ /odm/etc/permissions/*

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

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

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

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

พาร์ติชัน odm เป็นส่วนขยายของพาร์ติชัน vendor เมื่อพิจารณาความเสถียรของ Application binary Interface (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 ให้รวมแฟล็ก build เหล่านี้:

  • 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

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

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

การเปิดใช้งานการบูตที่ตรวจสอบแล้ว

เพื่อป้องกันไม่ให้ซอฟต์แวร์ที่เป็นอันตรายเข้าไปยุ่งเกี่ยวกับพาร์ติชั่น 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 ที่โดดเด่นในแพลตฟอร์ม ได้แก่ ตัวเชื่อมโยงแบบไดนามิก ตัวจัดการแพ็คเกจ และ shell/libc