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 ระหว่างพาร์ติชัน
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