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.bpLOCAL_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/libcvendor