Dizinler, kurallar ve sepolicy

Bu sayfada, Android 8.0 ve sonraki sürümleri çalıştıran cihazların dizin düzeni, VNDK kuralları ve ilişkili sepolicy açıklanmaktadır.

Dizin düzeni

Degenerated Directory Layout (Dönüştürülmüş Dizin Düzeni) aşağıdaki dizinlerden oluşur:

  • /system/lib[64], LL-NDK, VNDK ve yalnızca çerçeve kitaplıkları (LL-NDK-Private ve VNDK-SP'dekilerle aynı ada sahip bazı kitaplıklar dahil) dahil olmak üzere tüm çerçeve paylaşılan kitaplıklarını içerir.
  • /system/lib[64]/vndk-sp, aynı işlem HAL'leri için VNDK-SP kitaplıklarını içerir.
  • /vendor/lib[64], tedarikçi firma tarafından genişletilen VNDK kitaplıklarını (DXUA veya DXUX VNDK kitaplıkları), aynı işlem HAL uygulamalarını ve tedarikçi firmanın diğer paylaşılan kitaplıklarını içerir.
  • /vendor/lib[64]/vndk-sp, tedarikçi firma tarafından genişletilen VNDK-SP kitaplıklarını içerebilir.

Tedarikçi modülleri, VNDK kitaplıklarını /system/lib[64] adresinden yükler.

VNDK kuralları

Bu bölümde VNDK kurallarının kapsamlı bir listesi yer almaktadır:

  • Çerçeve işlemleri, SP-HAL olmayan paylaşılan kitaplıkları tedarikçi bölümlerinden yüklememelidir (Android 8.1'den itibaren katı bir şekilde uygulanır).
  • Tedarikçi firma işlemleri, sistem bölümünden LL-NDK, VNDK-SP ve VNDK dışındaki kitaplıkları yüklememelidir. (Android O'da katı bir şekilde uygulanmaz ancak gelecekteki bir sürümde uygulanacaktır).
  • Yüklenen VNDK kitaplıkları, Google tarafından tanımlanan uygun VNDK kitaplıklarının bir alt kümesi olmalıdır.
  • SP-HAL ve SP-HAL-Dep'nin dış bağımlılıkları LL-NDK veya Google tarafından tanımlanan VNDK-SP kitaplıklarıyla sınırlı olmalıdır.
    • SP-HAL paylaşılan kitaplığının bağımlılıkları, LL-NDK kitaplıkları, Google tarafından tanımlanan VNDK-SP kitaplıkları, diğer SP-HAL kitaplıkları ve/veya SP-HAL-Dep kitaplıkları olarak etiketlenebilecek diğer tedarikçi paylaşılan kitaplıklarıyla kısıtlanmalıdır.
    • Tedarikçi firma paylaşılan kitaplığı yalnızca AOSP kitaplığı değilse ve bağımlılıkları LL-NDK kitaplıkları, Google tarafından tanımlanan VNDK-SP kitaplıkları, SP-HAL kitaplıkları ve/veya diğer SP-HAL-Dep kitaplıklarıyla sınırlıysa SP-HAL-Dep kitaplığı olarak etiketlenebilir.
  • VNDK-SP bağımsız olmalıdır. libRS_internal.so, Android 8.0'da özel bir işleme tabi tutulur ancak gelecekteki bir sürümde bu konu tekrar ele alınacaktır.
  • Binder, soket, paylaşılan anılar, dosyalar vb. dahil ancak bunlarla sınırlı olmamak üzere HIDL dışı arayüzler üzerinden çerçeve-tedarikçi iletişimi yapılamaz.
  • Sistem bölümünün boyutu, uygun tüm VNDK kitaplıklarının iki kopyasını ve uygun olmayan çerçeve paylaşılan kitaplıklarının bir kopyasını barındıracak kadar büyük olmalıdır.

sepolicy

Bu bölümde açıklanan çerçeve süreçleri, sepolicies içindeki coredomain'e, satıcı süreçleri ise non-coredomain'a karşılık gelir. Örneğin, /dev/binder yalnızca coredomain'te, /dev/vndbinder ise yalnızca coredomain dışındaki yerlerde erişilebilir.

Benzer politikalar, sistem ve tedarikçi firma bölümlerindeki paylaşılan kitaplıklara erişimi kısıtlar. Aşağıdaki tabloda, farklı kategorilerdeki paylaşılan kitaplıklara erişim hakları gösterilmektedir:

Kategori Bölüm
coredomain adresinden erişilebilir

non-coredomain adresinden erişilebilir
LL-NDK Sistem Y Y
LL-NDK-Private Sistem Y Y
VNDK-SP/VNDK-SP-Private Sistem Y Y
VNDK-SP-Ext Satıcı Y Y
VNDK Sistem Y Y
VNDK-Ext Satıcı H Y
FWK-ONLY Sistem Y H
FWK-ONLY-RS Sistem Y H
SP-HAL Satıcı Y Y
SP-HAL-Dep Satıcı Y Y
VND-ONLY Satıcı H Y

coredomain olmayanlar bunlara dolaylı olarak erişeceğinden LL-NDK-Private ve VNDK-SP-Private'e her iki alandan da erişilebilmelidir. Benzer şekilde, SP-HAL-Dep'ye SP-HAL'den erişilebildiği için coredomain'ten erişilebilmelidir.

same_process_hal_file etiketi

Tedarikçi firma bölümünde aşağıdaki kitaplıklar bulunur. Bu kitaplıklara hem coredomain hem de coredomain olmayan kullanıcılardan erişilebilmesini sağlayın.

  • /vendor/lib[64]/vndk-sp'te VNDK-SP-Ext
  • /vendor/lib[64] veya /vendor/lib[64]/hw'te SP-HAL
  • /vendor/lib[64] veya /vendor/lib[64]/hw'da SP-HAL-Dep

vendor bölümündeki hiçbir şeye varsayılan olarak coredomain erişemediğinden bu dosyaları açıkça same_process_hal_file olarak etiketleyin. Tedarikçiye özgü file_contexts dosyasına aşağıdakine benzer satırlar ekleyin.

/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