Direktori, aturan, dan sepolicy

Halaman ini menjelaskan tata letak direktori untuk perangkat yang menjalankan Android 8.0 dan yang lebih tinggi, aturan VNDK, dan sepolicy terkait.

Tata letak direktori

Tata Letak Direktori yang Degenerasi terdiri dari direktori berikut:

  • /system/lib[64] berisi semua library bersama framework, termasuk LL-NDK, VNDK, dan library khusus framework (termasuk LL-NDK-Private dan beberapa library dengan nama yang sama seperti yang ada di VNDK-SP).
  • /system/lib[64]/vndk-sp berisi library VNDK-SP untuk HAL proses yang sama.
  • /vendor/lib[64] berisi library VNDK yang diperluas oleh vendor (library VNDK DXUA atau DXUX), implementasi HAL proses yang sama, dan library bersama vendor lainnya.
  • /vendor/lib[64]/vndk-sp dapat berisi library VNDK-SP yang diperluas oleh penyedia.

Modul vendor memuat library VNDK dari /system/lib[64].

Aturan VNDK

Bagian ini menyediakan daftar lengkap aturan VNDK:

  • Proses framework tidak boleh memuat library bersama non-SP-HAL dari partisi vendor (diberlakukan secara ketat mulai dari Android 8.1).
  • Proses vendor tidak boleh memuat library non-LL-NDK, non-VNDK-SP, dan non-VNDK dari partisi sistem. (tidak diterapkan secara ketat di Android O, tetapi akan diterapkan di rilis mendatang).
  • Library VNDK yang diinstal harus merupakan subkumpulan library VNDK yang memenuhi syarat dan ditentukan Google.
  • Dependensi luar SP-HAL dan SP-HAL-Dep harus dibatasi untuk library LL-NDK atau VNDK-SP yang ditentukan Google.
    • Dependensi library bersama SP-HAL harus dibatasi untuk library LL-NDK, library VNDK-SP yang ditentukan Google, library SP-HAL lainnya, dan/atau library bersama vendor lainnya yang dapat diberi label sebagai library SP-HAL-Dep.
    • Library bersama vendor hanya dapat diberi label sebagai library SP-HAL-Dep jika bukan library AOSP dan dependensinya dibatasi untuk library LL-NDK, library VNDK-SP yang ditentukan Google, library SP-HAL, dan/atau library SP-HAL-Dep lainnya.
  • VNDK-SP harus mandiri. libRS_internal.so mendapatkan perlakuan khusus di Android 8.0, tetapi akan ditinjau kembali dalam rilis mendatang.
  • Tidak ada komunikasi vendor framework melalui antarmuka non-HIDL, termasuk (tetapi tidak terbatas pada) binder, soket, memori bersama, file, dll.
  • Ukuran partisi sistem harus cukup besar untuk memuat dua salinan semua library VNDK yang memenuhi syarat dan salinan library bersama framework yang tidak memenuhi syarat.

sepolicy

Proses framework yang dijelaskan di bagian ini sesuai dengan coredomain di sepolicies, sedangkan proses vendor sesuai dengan non-coredomain. Misalnya, /dev/binder hanya dapat diakses di coredomain dan /dev/vndbinder hanya dapat diakses di non-coredomain.

Kebijakan serupa membatasi akses ke library bersama di partisi sistem dan vendor. Tabel berikut menunjukkan hak untuk mengakses library bersama dari berbagai kategori:

Kategori Partisi Dapat diakses dari
coredomain
Dapat diakses dari
domain non-inti
LL-NDK Sistem Y Y
LL-NDK-Private Sistem Y Y
VNDK-SP/VNDK-SP-Private Sistem Y Y
VNDK-SP-Ext Vendor Y Y
VNDK Sistem Y Y
VNDK-Ext Vendor T Y
FWK-ONLY Sistem Y T
FWK-ONLY-RS Sistem Y T
SP-HAL Vendor Y Y
SP-HAL-Dep Vendor Y Y
KHUSUS VND Vendor T Y

LL-NDK-Private dan VNDK-SP-Private harus dapat diakses dari kedua domain karena non-coredomain akan mengaksesnya secara tidak langsung. Demikian pula, SP-HAL-Dep harus dapat diakses dari coredomain karena SP-HAL mengandalkannya.

label same_process_hal_file

Library berikut ada di partisi vendor. Buat library ini dapat diakses dari coredomain dan non-coredomain.

  • VNDK-SP-Ext di /vendor/lib[64]/vndk-sp
  • SP-HAL di /vendor/lib[64] atau /vendor/lib[64]/hw
  • SP-HAL-Dep di /vendor/lib[64] atau /vendor/lib[64]/hw

Beri label file ini secara eksplisit sebagai same_process_hal_file, karena apa pun di partisi vendor secara default tidak dapat diakses oleh coredomain. Tambahkan baris yang mirip dengan berikut ke file file_contexts khusus vendor.

/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