Android 10 รองรับการสร้างพาร์ติชัน odm
โดยใช้ระบบการสร้างของ Android
เกี่ยวกับพาร์ติชัน ODM
ผู้ผลิตการออกแบบเดิม (ODM) จะปรับแต่งแพ็กเกจการสนับสนุนบอร์ดสําหรับระบบวงจรรวมบนชิป (SoC) ของผู้จัดจําหน่ายให้เหมาะกับอุปกรณ์ที่เฉพาะเจาะจง (บอร์ดสําหรับอุปกรณ์ของตน) ซึ่งช่วยให้สามารถติดตั้งใช้งานโมดูลเคอร์เนลสําหรับคอมโพเนนต์เฉพาะบอร์ดสําหรับเดรัมเฉพาะบอร์ดสําหรับฟีเจอร์ของตนเองในเลเยอร์การแยกแยะฮาร์ดแวร์ (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 จะช่วยลดปัญหาเกี่ยวกับดิสก์และทำให้แบ่งพาร์ติชันอุปกรณ์ใหม่ได้ในระหว่างการอัปเดตผ่านอากาศ (OTA)
คอมโพเนนต์ ODM
พาร์ติชัน odm
มีคอมโพเนนต์เฉพาะ ODM ต่อไปนี้ (คล้ายกับพาร์ติชัน vendor
) ซึ่งแสดงอยู่ในตารางต่อไปนี้
คอมโพเนนต์เฉพาะ ODM | ตำแหน่ง |
---|---|
โมดูลเคอร์เนลที่โหลดได้ (LKM) | /odm/lib/modules/*.ko |
ไลบรารีที่มาพร้อมเครื่อง | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
SEPolicy | /odm/etc/selinux |
ข้อมูลออบเจ็กต์ VINTF | /odm/etc/vintf |
init.rc
files |
/odm/etc/init |
พร็อพเพอร์ตี้ของระบบ | /odm/build.prop |
การซ้อนทับทรัพยากรรันไทม์ (RRO) | /odm/overlay/*.apk |
แอป | /odm/app/*.apk |
Priv-apps | /odm/priv-app/*.apk |
ไลบรารี Java | /odm/framework/*.jar |
การกําหนดค่าระบบเฟรมเวิร์ก Android | /odm/etc/sysconfig/* และ /odm/etc/permissions/* |
ไม่มีรูปภาพที่กำหนดเอง
อย่าใช้รูปภาพที่กำหนดเองเนื่องจากระบบไม่รองรับสิ่งต่อไปนี้
- การติดตั้งโมดูลไปยังเป้าหมายที่เฉพาะเจาะจง รูปภาพที่กำหนดเองรองรับการคัดลอกอาร์ติแฟกต์ลงในรูปภาพ แต่ไม่สามารถติดตั้งโมดูลลงในพาร์ติชันที่เฉพาะเจาะจงโดยระบุพาร์ติชันเป้าหมายเป็นส่วนหนึ่งของกฎการสร้าง
- Soong สร้าง
custom_images
โดยใช้ระบบการสร้าง Soong ไม่ได้ - การอัปเดต OTA ระบบจะใช้รูปภาพที่กำหนดเองเป็นรูปภาพ ROM ของโรงงานที่อัปเดตผ่าน OTA ไม่ได้
รักษา ABI ระหว่างพาร์ติชัน
พาร์ติชัน odm
เป็นส่วนขยายของพาร์ติชัน vendor
เมื่อพิจารณาความเสถียรของอินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) โปรดคำนึงถึงสถาปัตยกรรมต่อไปนี้

รูปที่ 1 การดูแลรักษา ABI ระหว่างพาร์ติชัน
- พาร์ติชัน
odm
และvendor
ไม่เสถียรตาม ABI ต้องอัปเกรดพาร์ติชันทั้ง 2 รายการพร้อมกัน - พาร์ติชัน
odm
และvendor
อาจใช้กันและกันได้ แต่พาร์ติชันvendor
ต้องทำงานได้โดยไม่ต้องมีพาร์ติชันodm
- ABI ระหว่าง
odm
ถึงsystem
เหมือนกับ ABI ระหว่างvendor
ถึงsystem
ไม่อนุญาตให้การโต้ตอบโดยตรงระหว่างพาร์ติชัน product
กับพาร์ติชัน vendor
หรือ odm
(SEpolicy จะบังคับใช้)
ใช้พาร์ติชัน ODM
ก่อนใช้พาร์ติชันใหม่ โปรดอ่านการเปลี่ยนแปลง AOSP ที่เกี่ยวข้อง
ตั้งค่าพาร์ติชัน ODM
หากต้องการตั้งค่าพาร์ติชัน odm
ให้ใส่ Flag การสร้างต่อไปนี้
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
เปิดใช้การเปิดเครื่องที่ได้รับการยืนยัน
หากต้องการป้องกันไม่ให้ซอฟต์แวร์ที่เป็นอันตรายแทรกแซงพาร์ติชัน odm
ให้เปิดใช้การบูตที่ยืนยันแล้วของ Android (AVB) สำหรับพาร์ติชันเหล่านั้น (เช่นเดียวกับพาร์ติชัน vendor
และ system
)
หากต้องการเปิดใช้ AVB ให้ใส่ Flag การสร้าง
BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
โปรดดูรายละเอียดเกี่ยวกับการกำหนดค่า AVB ในพาร์ติชันแบบไดนามิกที่หัวข้อการเปลี่ยนแปลงการกำหนดค่า AVB
ถือว่า /odm เป็นพาร์ติชัน /vendor อื่น
เพื่อให้ระบบจัดการพาร์ติชัน odm
เป็นพาร์ติชัน vendor
ให้แทนที่การอ้างอิง odm
แบบฮาร์ดโค้ดด้วยชุดพาร์ติชันที่มุ่งเน้นฮาร์ดแวร์ (ปัจจุบันคือ odm
และ vendor
) ตำแหน่งการอ้างอิง vendor
ที่ควรทราบในแพลตฟอร์ม ได้แก่ ตัวลิงก์แบบไดนามิก เครื่องมือจัดการแพ็กเกจ และ shell/libc
vendor