หน้านี้อธิบายเลย์เอาต์ไดเรกทอรีสำหรับอุปกรณ์ที่ใช้ Android 8.0 ขึ้นไป กฎ VNDK และ sepolicy ที่เกี่ยวข้อง
เลย์เอาต์ไดเรกทอรี
เลย์เอาต์ไดเรกทอรีที่เปลี่ยนรูปแบบประกอบด้วยไดเรกทอรีต่อไปนี้
/system/lib[64]
มีไลบรารีที่ใช้ร่วมกันทั้งหมดของเฟรมเวิร์ก ซึ่งรวมถึง LL-NDK, VNDK และไลบรารีสำหรับเฟรมเวิร์กเท่านั้น (รวมถึง LL-NDK-Private และไลบรารีบางรายการที่มีชื่อเหมือนกับใน VNDK-SP)/system/lib[64]/vndk-sp
มีไลบรารี VNDK-SP สำหรับ HAL ในกระบวนการเดียวกัน/vendor/lib[64]
มีไลบรารี VNDK ที่ผู้ให้บริการขยาย (ไลบรารี VNDK ของ DXUA หรือ DXUX) การใช้งาน HAL ในกระบวนการเดียวกัน และไลบรารีที่ผู้ให้บริการรายอื่นแชร์/vendor/lib[64]/vndk-sp
อาจมีไลบรารี VNDK-SP ที่ขยายโดยผู้ให้บริการ
โมดูลของผู้ให้บริการจะโหลดไลบรารี VNDK จาก /system/lib[64]
กฎ VNDK
ส่วนนี้จะแสดงรายการกฎ VNDK ที่ครอบคลุม
- กระบวนการเฟรมเวิร์กต้องไม่โหลดไลบรารีที่ใช้ร่วมกันที่ไม่ใช่ SP-HAL จากพาร์ติชันของผู้ให้บริการ (บังคับใช้อย่างเข้มงวดตั้งแต่ Android 8.1 เป็นต้นไป)
- กระบวนการของผู้ให้บริการต้องไม่โหลดไลบรารีที่ไม่ใช่ LL-NDK, ไม่ใช่ VNDK-SP และไม่ใช่ VNDK จากพาร์ติชันระบบ (ไม่ได้บังคับใช้อย่างเข้มงวดใน Android แต่จะบังคับใช้ในรุ่นต่อๆ ไป)
- ไลบรารี VNDK ที่ติดตั้งต้องเป็นชุดย่อยของไลบรารี VNDK ที่มีสิทธิ์ซึ่ง Google กำหนด
- การอ้างอิงภายนอกของ SP-HAL และ SP-HAL-Dep ต้องจํากัดไว้เฉพาะไลบรารี LL-NDK หรือ VNDK-SP ที่ Google กำหนด
- ไลบรารีที่ใช้ร่วมกันของ SP-HAL ต้องจำกัดไว้เฉพาะไลบรารี LL-NDK, ไลบรารี VNDK-SP ที่ Google กำหนด, ไลบรารี SP-HAL อื่นๆ และ/หรือไลบรารีที่ใช้ร่วมกันของผู้ให้บริการรายอื่นๆ ที่สามารถติดป้ายกำกับเป็นไลบรารี SP-HAL-Dep ได้
- ไลบรารีที่แชร์ของผู้ให้บริการจะได้รับป้ายกำกับเป็นไลบรารี SP-HAL-Dep เฉพาะในกรณีที่ไม่ใช่ไลบรารี AOSP และทรัพยากร Dependency ของไลบรารีดังกล่าวจำกัดไว้เฉพาะไลบรารี LL-NDK, ไลบรารี VNDK-SP ที่ Google กำหนด, ไลบรารี SP-HAL และ/หรือไลบรารี SP-HAL-Dep อื่นๆ
- VNDK-SP ต้องทำงานได้ด้วยตัวเอง
libRS_internal.so
ได้รับการประมวลผลพิเศษใน Android 8.0 แต่เราจะกลับมาดูเรื่องนี้ในรุ่นที่จะออกในอนาคต - ไม่มีการสื่อสารระหว่างเฟรมเวิร์กกับผู้ให้บริการผ่านอินเทอร์เฟซที่ไม่ใช่ HIDL ซึ่งรวมถึง (แต่ไม่จำกัดเพียง) Binder, ซ็อกเก็ต, หน่วยความจำที่แชร์, ไฟล์ ฯลฯ
- ขนาดของพาร์ติชันระบบต้องใหญ่พอที่จะเก็บสำเนาของไลบรารี VNDK ที่มีสิทธิ์ทั้งหมด 2 รายการและสำเนาของไลบรารีที่แชร์เฟรมเวิร์กที่ไม่มีสิทธิ์ 1 รายการ
sepolicy
กระบวนการของเฟรมเวิร์กที่อธิบายในส่วนนี้สอดคล้องกับ
coredomain
ใน sepolicies ส่วนกระบวนการของผู้ให้บริการสอดคล้องกับ
non-coredomain
เช่น /dev/binder
เข้าถึงได้เฉพาะใน coredomain
และ /dev/vndbinder
เข้าถึงได้เฉพาะในไม่ใช่ coredomain
นโยบายที่คล้ายกันจะจํากัดการเข้าถึงคลังที่ใช้ร่วมกันในพาร์ติชันระบบและพาร์ติชันของผู้ให้บริการ ตารางต่อไปนี้แสดงสิทธิ์ในการเข้าถึงคลังภาพที่แชร์ของหมวดหมู่ต่างๆ
หมวดหมู่ | พาร์ติชัน | เข้าถึงได้จาก coredomain |
เข้าถึงได้จาก โดเมนที่ไม่ใช่โดเมนหลัก |
---|---|---|---|
LL-NDK | ระบบ | Y | Y |
LL-NDK-Private | ระบบ | Y | Y |
VNDK-SP/VNDK-SP-Private | ระบบ | Y | Y |
VNDK-SP-Ext | ตัวแทนจำหน่ายรายย่อย | Y | Y |
VNDK | ระบบ | Y | Y |
VNDK-Ext | ตัวแทนจำหน่ายรายย่อย | ไม่ใช่ | Y |
FWK-ONLY | ระบบ | Y | ไม่ใช่ |
FWK-ONLY-RS | ระบบ | Y | ไม่ใช่ |
SP-HAL | ตัวแทนจำหน่ายรายย่อย | Y | Y |
SP-HAL-Dep | ตัวแทนจำหน่ายรายย่อย | Y | Y |
VND เท่านั้น | ตัวแทนจำหน่ายรายย่อย | ไม่ใช่ | Y |
LL-NDK-Private และ VNDK-SP-Private ต้องเข้าถึงได้จากทั้ง 2 โดเมน เนื่องจากโดเมนที่ไม่ใช่ coredomain
จะเข้าถึงโดเมนเหล่านี้ได้แบบอ้อม ในทํานองเดียวกัน SP-HAL-Dep ต้องเข้าถึงได้จาก coredomain
เนื่องจาก SP-HAL ต้องใช้ SP-HAL-Dep
ป้ายกำกับ same_process_hal_file
ไลบรารีต่อไปนี้อยู่ในพาร์ติชันของผู้ให้บริการ ทำให้เข้าถึงไลบรารีเหล่านี้ได้จากทั้งcoredomain
และไม่ใช่coredomain
- VNDK-SP-Ext ใน
/vendor/lib[64]/vndk-sp
- SP-HAL ใน
/vendor/lib[64]
หรือ/vendor/lib[64]/hw
- SP-HAL-Dep ใน
/vendor/lib[64]
หรือ/vendor/lib[64]/hw
ติดป้ายกำกับไฟล์เหล่านี้เป็น same_process_hal_file
อย่างชัดเจน เนื่องจากcoredomain
จะเข้าถึงไฟล์ในพาร์ติชัน vendor
ไม่ได้โดยค่าเริ่มต้น เพิ่มบรรทัดคล้ายกับต่อไปนี้ลงในไฟล์ file_contexts
เฉพาะผู้ให้บริการ
/vendor/lib(64)?/hw/libMySpHal\.so u:object_r:same_process_hal_file:s0 /vendor/lib(64)?/vndk-sp/libBase\.so u:object_r:same_process_hal_file:s0 /vendor/lib(64)?/libBaseInternal\.so u:object_r:same_process_hal_file:s0