Direktori, aturan, dan kebijakan

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

Tata letak direktori

Tata Letak Direktori yang Tidak Dibuat terdiri dari hal berikut direktori:

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

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

Aturan VNDK

Bagian ini memberikan daftar lengkap aturan VNDK:

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

Sepolicy

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

Kebijakan serupa membatasi akses ke pustaka bersama pada sistem dan partisi vendor. Tabel berikut menampilkan hak untuk mengakses file yang dibagikan {i>library<i} dari berbagai kategori:

Kategori Partisi Dapat diakses dari
coredomain
Dapat diakses dari
non-domain inti
LL-NDK Sistem Y Y
LL-NDK-Pribadi Sistem Y Y
VNDK-SP/VNDK-SP-Pribadi Sistem Y Y
VNDK-SP-Ext Vendor Y Y
VNDK Sistem Y Y
VNDK-Ext Vendor N Y
KHUSUS FWK Sistem Y N
Khusus FWK Sistem Y N
SP-HAL Vendor Y Y
SP-HAL-Dep Vendor Y Y
KHUSUS VND Vendor N Y

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

Label same_process_hal_file

Library berikut ada di partisi vendor. Buat library ini dapat diakses dari keduanya 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 same_process_hal_file pada file ini secara eksplisit, karena apa pun dalam partisi vendor secara default tidak dapat diakses oleh coredomain. Tambahkan baris yang mirip dengan baris 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