دایرکتوری ها، قوانین، و سیاست

این صفحه طرح دایرکتوری دستگاه‌های دارای Android نسخه 8.0 و بالاتر، قوانین VNDK و سیاست‌های مرتبط را توضیح می‌دهد.

طرح دایرکتوری

چیدمان دایرکتوری Degenerated از دایرکتوری های زیر تشکیل شده است:

  • /system/lib[64] شامل تمام کتابخانه‌های مشترک چارچوب، از جمله LL-NDK، VNDK، و کتابخانه‌های فقط چارچوب (شامل LL-NDK-Private و برخی از کتابخانه‌هایی با نام‌های مشابه در VNDK-SP) است.
  • /system/lib[64]/vndk-sp حاوی کتابخانه‌های VNDK-SP برای HAL‌های یک فرآیند است.
  • /vendor/lib[64] حاوی کتابخانه‌های VNDK است که توسط فروشنده گسترش یافته است (کتابخانه‌های DXUA یا DXUX VNDK)، پیاده‌سازی‌های HAL با همان فرآیند و سایر کتابخانه‌های مشترک فروشنده.
  • /vendor/lib[64]/vndk-sp ممکن است حاوی کتابخانه‌های VNDK-SP باشد که توسط فروشنده گسترش یافته است.

ماژول‌های فروشنده کتابخانه‌های VNDK را از /system/lib[64] بارگیری می‌کنند.

قوانین VNDK

این بخش فهرست جامعی از قوانین VNDK را ارائه می دهد:

  • فرآیندهای چارچوب نباید کتابخانه‌های به اشتراک‌گذاشته‌شده غیر SP-HAL را از پارتیشن‌های فروشنده بارگیری کنند (از Android 8.1 به شدت اعمال می‌شوند).
  • فرآیندهای فروشنده نباید کتابخانه های غیر LL-NDK، non-VNDK-SP و غیر VNDK را از پارتیشن سیستم بارگیری کنند. (در Android O به شدت اعمال نمی شود اما در نسخه بعدی خواهد بود).
  • کتابخانه‌های 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 نباشد و وابستگی های آن به کتابخانه های LL-NDK، کتابخانه های VNDK-SP تعریف شده توسط Google، کتابخانه های SP-HAL و/یا محدود شود. سایر کتابخانه های SP-HAL-Dep.
  • VNDK-SP باید مستقل باشد. libRS_internal.so در اندروید 8.0 درمان ویژه ای دریافت می کند، اما در نسخه بعدی مورد بازبینی قرار خواهد گرفت.
  • بدون ارتباط فریمورک و فروشنده از طریق رابط های غیر HIDL، از جمله (اما نه محدود به) بایندر، سوکت ها، حافظه های مشترک، فایل ها و غیره.
  • اندازه پارتیشن سیستم باید به اندازه‌ای بزرگ باشد که شامل دو نسخه از تمام کتابخانه‌های VNDK واجد شرایط و یک نسخه از کتابخانه‌های مشترک چارچوب نامناسب باشد.

سیاست گذاری

فرآیندهای چارچوبی که در این بخش توضیح داده شده است با coredomain در سیاست‌گذاری‌ها مطابقت دارند در حالی که فرآیندهای فروشنده با non-coredomain مطابقت دارند. به عنوان مثال، /dev/binder فقط در coredomain قابل دسترسی است و /dev/vndbinder فقط در non- coredomain قابل دسترسی است.

سیاست های مشابه دسترسی به کتابخانه های مشترک در پارتیشن های سیستم و فروشنده را محدود می کند. جدول زیر حقوق دسترسی به کتابخانه های مشترک دسته های مختلف را نشان می دهد:

دسته بندی تقسیم بندی قابل دسترسی از
Coredomain
قابل دسترسی از
غیر هسته دامنه
LL-NDK سیستم Y Y
LL-NDK-خصوصی سیستم 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-ONLY فروشنده ن Y

LL-NDK-Private و VNDK-SP-Private باید از هر دو دامنه قابل دسترسی باشند زیرا غیر coredomain به طور غیر مستقیم به آنها دسترسی خواهد داشت. به طور مشابه، SP-HAL-Dep باید از coredomain قابل دسترسی باشد زیرا SP-HAL به آن متکی است.

برچسب same_process_hal_file

کتابخانه های زیر در پارتیشن فروشنده وجود دارد. این کتابخانه ها را هم از coredomain و هم از Non 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 برچسب گذاری کنید، زیرا هر چیزی در پارتیشن 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