डायरेक्ट्री, नियम, और sepolicy

इस पेज पर, Android 8.0 और इसके बाद के वर्शन वाले डिवाइसों के लिए डायरेक्ट्री लेआउट, VNDK के नियमों, और उससे जुड़ी sepolicy के बारे में बताया गया है.

डायरेक्ट्री का लेआउट

डीग्रेडेड डायरेक्ट्री लेआउट में ये डायरेक्ट्री शामिल हैं:

  • /system/lib[64] में फ़्रेमवर्क की सभी शेयर की गई लाइब्रेरी शामिल हैं. इनमें LL-NDK, VNDK, और सिर्फ़ फ़्रेमवर्क के लिए लाइब्रेरी शामिल हैं. इनमें LL-NDK-Private और कुछ ऐसी लाइब्रेरी शामिल हैं जिनके नाम VNDK-SP में मौजूद लाइब्रेरी के नाम से मेल खाते हैं.
  • /system/lib[64]/vndk-sp में, एक ही प्रोसेस वाले एचएएल के लिए VNDK-SP लाइब्रेरी शामिल होती हैं.
  • /vendor/lib[64] में वेंडर की ओर से जोड़ी गई VNDK लाइब्रेरी (DXUA या DXUX VNDK लाइब्रेरी), एक ही प्रोसेस वाले एचएएल लागू करने की सुविधा, और वेंडर की अन्य शेयर की गई लाइब्रेरी शामिल होती हैं.
  • /vendor/lib[64]/vndk-sp में वे VNDK-SP लाइब्रेरी शामिल हो सकती हैं जिन्हें वेंडर ने जोड़ा है.

वेंडर मॉड्यूल, /system/lib[64] से VNDK लाइब्रेरी लोड करते हैं.

VNDK के नियम

इस सेक्शन में, VNDK के नियमों की पूरी सूची दी गई है:

  • फ़्रेमवर्क प्रोसेस को वेंडर के सेगमेंट से, SP-HAL के अलावा शेयर की गई लाइब्रेरी लोड नहीं करनी चाहिए. यह शर्त Android 8.1 से लागू है.
  • वेंडर प्रोसेस को सिस्टम पार्टीशन से, नॉन-एलएल-एनडीके, नॉन-वीएनडीके-एसपी, और नॉन-वीएनडीके लाइब्रेरी लोड नहीं करनी चाहिए. (Android O में सख्ती से लागू नहीं किया गया है, लेकिन आने वाले वर्शन में लागू किया जाएगा).
  • इंस्टॉल की गई VNDK लाइब्रेरी, Google की तय की गई ज़रूरी शर्तें पूरी करने वाली VNDK लाइब्रेरी का सबसेट होनी चाहिए.
  • SP-HAL और SP-HAL-Dep की बाहरी डिपेंडेंसी, LL-NDK या Google की तय की गई VNDK-SP लाइब्रेरी तक सीमित होनी चाहिए.
    • SP-HAL शेयर की गई लाइब्रेरी की डिपेंडेंसी, LL-NDK लाइब्रेरी, Google की तय की गई VNDK-SP लाइब्रेरी, अन्य SP-HAL लाइब्रेरी, और/या वेंडर की अन्य शेयर की गई लाइब्रेरी पर ही होनी चाहिए. इन लाइब्रेरी को SP-HAL-Dep लाइब्रेरी के तौर पर लेबल किया जा सकता है.
    • वेंडर की शेयर की गई लाइब्रेरी को SP-HAL-Dep लाइब्रेरी के तौर पर सिर्फ़ तब लेबल किया जा सकता है, जब वह AOSP लाइब्रेरी न हो और उसकी डिपेंडेंसी, LL-NDK लाइब्रेरी, Google की तय की गई VNDK-SP लाइब्रेरी, SP-HAL लाइब्रेरी, और/या अन्य SP-HAL-Dep लाइब्रेरी तक सीमित हों.
  • VNDK-SP को खुद से काम करना चाहिए. Android 8.0 में libRS_internal.so को खास प्राथमिकता दी गई है. हालांकि, आने वाले वर्शन में इस पर फिर से विचार किया जाएगा.
  • फ़्रेमवर्क-वेंडर के बीच, HIDL इंटरफ़ेस के अलावा किसी अन्य इंटरफ़ेस का इस्तेमाल करके कोई भी कम्यूनिकेशन नहीं होना चाहिए. इसमें बाइंडर, सॉकेट, शेयर की गई यादें, फ़ाइलें वगैरह शामिल हैं. हालांकि, इनके अलावा और भी चीज़ें शामिल हो सकती हैं.
  • सिस्टम पार्टीशन का साइज़ इतना बड़ा होना चाहिए कि उसमें ज़रूरी शर्तें पूरी करने वाली सभी VNDK लाइब्रेरी की दो कॉपी और ज़रूरी शर्तें पूरी न करने वाले फ़्रेमवर्क की शेयर की गई लाइब्रेरी की एक कॉपी शामिल की जा सके.

sepolicy

इस सेक्शन में बताई गई फ़्रेमवर्क प्रोसेस, sepolicies में coredomain से जुड़ी होती हैं. वहीं, वेंडर प्रोसेस, 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
सिर्फ़ वियतनामीज़ डोंग वेंडर नहीं Y

LL-NDK-Private और VNDK-SP-Private को दोनों डोमेन से ऐक्सेस किया जा सकता है, क्योंकि coredomain के अलावा अन्य लोग इनका ऐक्सेस अप्रत्यक्ष तौर पर पाएंगे. इसी तरह, SP-HAL-Dep को coredomain से ऐक्सेस किया जा सकता है, क्योंकि SP-HAL उस पर निर्भर करता है.

same_process_hal_file लेबल

ये लाइब्रेरी, वेंडर पार्टीशन में मौजूद होती हैं. इन लाइब्रेरी को coredomain और coredomain, दोनों से ऐक्सेस किया जा सकता है.

  • /vendor/lib[64]/vndk-sp में VNDK-SP-Ext
  • /vendor/lib[64] या /vendor/lib[64]/hw में SP-HAL
  • /vendor/lib[64] या /vendor/lib[64]/hw में SP-HAL-Dep

इन फ़ाइलों को साफ़ तौर पर same_process_hal_file के तौर पर लेबल करें, क्योंकि vendor सेक्शन में मौजूद किसी भी फ़ाइल को डिफ़ॉल्ट रूप से coredomain ऐक्सेस नहीं कर सकता. वेंडर के हिसाब से बनाई गई 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