พาร์ติชัน ODM

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) โปรดคำนึงถึงสถาปัตยกรรมต่อไปนี้

การดูแลรักษา 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/libcvendor