Binder IPC'yi kullanma

Bu sayfada Android 8'de ciltleyici sürücüsünde yapılan değişiklikler açıklanmakta, ciltleyici IPC'nin kullanımına ilişkin ayrıntılar sağlanmakta ve gerekli SELinux politikası listelenmektedir.

Bağlayıcı sürücüsündeki değişiklikler

Android 8'den başlayarak, Android çerçevesi ve HAL'ler artık ciltleyici kullanarak birbirleriyle iletişim kurar. Bu iletişim ciltleyici trafiğini önemli ölçüde artırdığından, Android 8, ciltleyici IPC'yi hızlı tutmak için tasarlanmış çeşitli iyileştirmeler içerir. SoC satıcıları ve OEM'ler, doğrudan çekirdek/ortak projenin ilgili android-4.4, android-4.9 ve daha yüksek dallarından birleştirilmelidir.

Çoklu bağlayıcı etki alanları (bağlamlar)

Ortak-4.4 ve üstü, yukarı akış dahil

Bağlayıcı trafiğini çerçeve (cihazdan bağımsız) ve satıcı (cihaza özel) kodu arasında temiz bir şekilde bölmek için Android 8, bir bağlayıcı bağlamı kavramını tanıttı. Her bağlayıcı içeriğinin kendi aygıt düğümü ve kendi bağlam (hizmet) yöneticisi vardır. Bağlam yöneticisine yalnızca ait olduğu cihaz düğümü aracılığıyla erişebilirsiniz ve bir bağlayıcı düğümü belirli bir bağlamdan geçirirken, aynı bağlamdan yalnızca başka bir işlem tarafından erişilebilir, böylece etki alanlarını birbirinden tamamen izole eder. Kullanımla ilgili ayrıntılar için bkz. vndbinder ve vndservicemanager .

dağıt-topla

Ortak-4.4 ve üstü, yukarı akış dahil

Android'in önceki sürümlerinde, bir ciltleme çağrısındaki her veri parçası üç kez kopyalanıyordu:

  • Çağırma sürecinde onu bir Parcel halinde seri hale getirmek için bir kez
  • Parcel hedef işleme kopyalamak için çekirdek sürücüsüne girdikten sonra
  • Hedef Parcel Paketi seri hale getirmek için bir kez

Android 8, kopya sayısını 3'ten 1'e düşürmek için dağınık toplama optimizasyonunu kullanır. Verileri önce bir Parcel içinde seri hale getirmek yerine, veriler orijinal yapısında ve bellek düzeninde kalır ve sürücü onu hemen hedef işleme kopyalar. Veriler hedef prosese girdikten sonra yapı ve hafıza düzeni aynıdır ve tekrar kopya gerektirmeden veri okunabilir.

İnce taneli kilitleme

Ortak-4.4 ve üstü, yukarı akış dahil

Önceki Android sürümlerinde, ciltleyici sürücüsü, kritik veri yapılarına eşzamanlı erişime karşı koruma sağlamak için küresel bir kilit kullanıyordu. Kilit için çok az çekişme olsa da, asıl sorun, düşük öncelikli bir iş parçacığının kilidi ele geçirmesi ve ardından önceden alınması durumunda, aynı kilidi elde etmesi gereken daha yüksek öncelikli iş parçacıklarını ciddi şekilde geciktirebilmesiydi. Bu, platformda sarsıntıya neden oldu.

Bu sorunu çözmeye yönelik ilk girişimler, küresel kilidi tutarken önlemenin devre dışı bırakılmasını içeriyordu. Ancak bu, gerçek bir çözümden çok bir saldırıydı ve sonunda yukarı akış tarafından reddedildi ve atıldı. Sonraki girişimler, Ocak 2017'den beri Pixel cihazlarda çalışan bir sürümü olan kilitlemeyi daha ayrıntılı hale getirmeye odaklandı. Bu değişikliklerin çoğu halka açıklanırken, sonraki sürümlerde önemli iyileştirmeler yapıldı.

Hassas kilitleme uygulamasındaki küçük sorunları belirledikten sonra, farklı bir kilitleme mimarisiyle geliştirilmiş bir çözüm tasarladık ve tüm genel çekirdek dallarındaki değişiklikleri sunduk. Bu uygulamayı çok sayıda farklı cihazda test etmeye devam ediyoruz; Çözülmemiş herhangi bir sorunun farkında olmadığımız için bu, Android 8 ile gönderilen cihazlar için önerilen uygulamadır.

Gerçek zamanlı öncelik devralma

Common-4.4 ve common-4.9 (yukarı akış çok yakında)

Bağlayıcı sürücüsü her zaman güzel öncelikli kalıtımı desteklemiştir. Android'de artan sayıda işlem gerçek zamanlı öncelikte çalıştığından, bazı durumlarda gerçek zamanlı bir iş parçacığının bir ciltleme çağrısı yapması durumunda, işlemdeki bu çağrıyı işleyen iş parçacığının da gerçek zamanlı olarak çalışması mantıklıdır. . Bu kullanım durumlarını desteklemek için, Android 8 artık ciltleyici sürücüsünde gerçek zamanlı öncelik devralma uygulamaktadır.

İşlem düzeyinde öncelik devralmaya ek olarak, düğüm önceliği devralma , bir düğümün (bağlayıcı hizmet nesnesi), bu düğüme yapılan çağrıların yürütülmesi gereken minimum önceliği belirlemesine olanak tanır. Android'in önceki sürümleri, güzel değerlerle düğüm önceliği devralmayı zaten destekliyordu, ancak Android 8, gerçek zamanlı zamanlama ilkeleri düğüm devralma için destek ekliyor.

Kullanıcı alanı değişiklikleri

Android 8, ortak çekirdekte mevcut ciltleyici sürücüsüyle çalışmak için gereken tüm kullanıcı alanı değişikliklerini bir istisna dışında içerir: /dev/binder için gerçek zamanlı öncelik devralmayı devre dışı bırakan orijinal uygulama, bir ioctl kullandı. Sonraki geliştirme, öncelikli kalıtımın kontrolünü cilt modu başına (bağlam başına değil) olan daha ayrıntılı bir yönteme çevirdi. Bu nedenle, ioctl Android ortak dalında değildir ve bunun yerine ortak çekirdeklerimizde sunulur .

Bu değişikliğin etkisi, gerçek zamanlı öncelik devralmanın her düğüm için varsayılan olarak devre dışı bırakılmasıdır. Android performans ekibi, hwbinder etki alanındaki tüm düğümler için gerçek zamanlı öncelik devralmayı etkinleştirmeyi faydalı buldu. Aynı etkiyi elde etmek için, kullanıcı alanındaki bu değişikliği özenle seçin.

Ortak çekirdekler için SHA'lar

Bağlayıcı sürücüsünde gerekli değişiklikleri elde etmek için uygun SHA ile eşitleyin:

  • Ortak-3.18
    cc8b90c121de ANDROID: ciltleyici: geri yükleme sırasında ön izinleri kontrol etmeyin.
  • Ortak-4.4
    76b376eac7a2 ANDROID: ciltleyici: geri yükleme sırasında ön izinleri kontrol etmeyin.
  • Ortak-4.9
    ecd972d4f9b5 ANDROID: ciltleyici: geri yükleme sırasında ön izinleri kontrol etmeyin.

Bağlayıcı IPC'yi kullanma

Tarihsel olarak, satıcı işlemleri iletişim için ciltleyici işlemler arası iletişimi (IPC) kullanmıştır. Android 8'de, /dev/binder cihaz düğümü, çerçeve işlemlerine özel hale gelir, yani satıcı işlemlerinin artık ona erişimi yoktur. Satıcı işlemleri /dev/hwbinder , ancak HIDL'yi kullanmak için AIDL arabirimlerini dönüştürmeleri gerekir. Satıcı işlemleri arasında AIDL arayüzlerini kullanmaya devam etmek isteyen satıcılar için Android, aşağıda açıklandığı gibi bağlayıcı IPC'yi destekler. Android 10'da Kararlı AIDL, tüm işlemlerin /dev/binder kullanmasına izin verirken aynı zamanda HIDL ve /dev/hwbinder çözdüğü kararlılık garantilerini de çözüyor. Kararlı AIDL'nin nasıl kullanılacağı hakkında HAL'ler için AIDL'ye bakın.

vndbinder

Android 8, satıcı hizmetleri tarafından kullanılmak üzere /dev/binder yerine /dev/binder /dev/vndbinder kullanılarak erişilen yeni bir bağlayıcı etki alanını destekler. /dev/vndbinder , Android artık aşağıdaki üç IPC etki alanına sahiptir:

IPC Etki Alanı Tanım
/dev/binder AIDL arabirimleriyle çerçeve/uygulama işlemleri arasında IPC
/dev/hwbinder HIDL arabirimleriyle çerçeve/satıcı işlemleri arasında IPC
HIDL arabirimleri ile satıcı işlemleri arasında IPC
/dev/vndbinder AIDL Arabirimleri ile satıcı/satıcı süreçleri arasındaki IPC

/dev/vndbinder görünmesi için, CONFIG_ANDROID_BINDER_DEVICES çekirdek yapılandırma öğesinin "binder,hwbinder,vndbinder" olarak ayarlandığından emin olun (bu, Android'in ortak çekirdek ağaçlarında varsayılandır).

Normalde satıcı işlemleri ciltleyici sürücüsünü doğrudan açmaz ve bunun yerine ciltleyici sürücüsünü açan libbinder kullanıcı alanı kitaplığına bağlanır. ::android::ProcessState() için bir yöntem eklemek, libbinder için ciltleyici sürücüsünü seçer. Satıcı işlemleri, ProcessState, IPCThreadState çağrılmadan veya genel olarak herhangi bir bağlayıcı çağrı yapılmadan önce bu yöntemi çağırmalıdır. Kullanmak için, bir satıcı işleminin (istemci ve sunucu) main() öğesinden sonra aşağıdaki aramayı yapın:

ProcessState::initWithDriver("/dev/vndbinder");

vndservis yöneticisi

Önceden, ciltleme hizmetleri, diğer işlemler tarafından alınabilecekleri servicemanager kaydedilmişti. Android 8'de, servicemanager artık yalnızca çerçeve ve uygulama işlemleri tarafından kullanılıyor ve satıcı işlemleri artık buna erişemiyor.

Ancak, satıcı hizmetleri artık /dev/ /dev/binder yerine /dev/vndbinder kullanan ve çerçeve servicemanager ile aynı kaynaklardan oluşturulmuş yeni bir servicemanager örneği olan vndservicemanager kullanabilir. Satıcı işlemlerinin vndservicemanager ile konuşmak için değişiklik yapması gerekmez; bir satıcı işlemi / dev/vndbinder , hizmet aramaları otomatik olarak vndservicemanager .

vndservicemanager ikili dosyası, Android'in varsayılan cihaz makefile dosyalarına dahil edilmiştir.

SELinux politikası

Birbiriyle iletişim kurmak için ciltleyici işlevini kullanmak isteyen satıcı işlemleri aşağıdakilere ihtiyaç duyar:

  1. /dev/vndbinder .
  2. Bağlayıcı {transfer, call} , vndservicemanager .
  3. satıcı ciltleme arabirimi üzerinden satıcı etki alanı B'ye çağrı yapmak isteyen herhangi bir satıcı etki alanı A için binder_call(A, B) .
  4. vndservicemanager hizmet {add, find} izni.

1. ve 2. gereksinimleri karşılamak için vndbinder_use() makrosunu kullanın:

vndbinder_use(some_vendor_process_domain);

Gereksinim 3'ü yerine getirmek için, ciltleyici hakkında konuşması gereken A ve B satıcı işlemleri için binder_call(A, B) yerinde kalabilir ve yeniden adlandırılması gerekmez.

4. gereksinimi karşılamak için hizmet adlarının, hizmet etiketlerinin ve kuralların işlenme biçiminde değişiklikler yapmanız gerekir.

SELinux ile ilgili ayrıntılar için bkz . Android'de Gelişmiş Güvenlikli Linux . Android 8.0'daki SELinux ile ilgili ayrıntılar için bkz. Android 8.0 için SELinux .

hizmet adları

Önceden satıcı, kayıtlı hizmet adlarını bir service_contexts dosyasında işler ve bu dosyaya erişim için ilgili kuralları eklerdi. device/google/marlin/sepolicy service_contexts

AtCmdFwd                              u:object_r:atfwd_service:s0
cneservice                            u:object_r:cne_service:s0
qti.ims.connectionmanagerservice      u:object_r:imscm_service:s0
rcs                                   u:object_r:radio_service:s0
uce                                   u:object_r:uce_service:s0
vendor.qcom.PeripheralManager         u:object_r:per_mgr_service:s0

Android 8'de vndservicemanager bunun yerine vndservice_contexts dosyasını yükler. vndservicemanager (ve zaten eski service_contexts dosyasında bulunan) satıcı hizmetleri yeni vndservice_contexts dosyasına eklenmelidir.

servis etiketleri

Önceden u:object_r:atfwd_service:s0 gibi hizmet etiketleri bir service.te dosyasında tanımlanıyordu. Örnek:

type atfwd_service,      service_manager_type;

Android 8'de türü vndservice_manager_type olarak değiştirmeniz ve kuralı vndservice.te dosyasına taşımanız gerekir. Örnek:

type atfwd_service,      vndservice_manager_type;

Servis yöneticisi kuralları

Daha önce kurallar, etki alanlarına servicemanager hizmet ekleme veya bulma erişimi veriyordu. Örnek:

allow atfwd atfwd_service:service_manager find;
allow some_vendor_app atfwd_service:service_manager add;

Android 8'de bu tür kurallar yerinde kalabilir ve aynı sınıfı kullanabilir. Örnek:

allow atfwd atfwd_service:service_manager find;
allow some_vendor_app atfwd_service:service_manager add;
,

Bu sayfada Android 8'de ciltleyici sürücüsünde yapılan değişiklikler açıklanmakta, ciltleyici IPC'nin kullanımına ilişkin ayrıntılar sağlanmakta ve gerekli SELinux politikası listelenmektedir.

Bağlayıcı sürücüsündeki değişiklikler

Android 8'den başlayarak, Android çerçevesi ve HAL'ler artık ciltleyici kullanarak birbirleriyle iletişim kurar. Bu iletişim ciltleyici trafiğini önemli ölçüde artırdığından, Android 8, ciltleyici IPC'yi hızlı tutmak için tasarlanmış çeşitli iyileştirmeler içerir. SoC satıcıları ve OEM'ler, doğrudan çekirdek/ortak projenin ilgili android-4.4, android-4.9 ve daha yüksek dallarından birleştirilmelidir.

Çoklu bağlayıcı etki alanları (bağlamlar)

Ortak-4.4 ve üstü, yukarı akış dahil

Bağlayıcı trafiğini çerçeve (cihazdan bağımsız) ve satıcı (cihaza özel) kodu arasında temiz bir şekilde bölmek için Android 8, bir bağlayıcı bağlamı kavramını tanıttı. Her bağlayıcı içeriğinin kendi aygıt düğümü ve kendi bağlam (hizmet) yöneticisi vardır. Bağlam yöneticisine yalnızca ait olduğu cihaz düğümü aracılığıyla erişebilirsiniz ve bir bağlayıcı düğümü belirli bir bağlamdan geçirirken, aynı bağlamdan yalnızca başka bir işlem tarafından erişilebilir, böylece etki alanlarını birbirinden tamamen izole eder. Kullanımla ilgili ayrıntılar için bkz. vndbinder ve vndservicemanager .

dağıt-topla

Ortak-4.4 ve üstü, yukarı akış dahil

Android'in önceki sürümlerinde, bir ciltleme çağrısındaki her veri parçası üç kez kopyalanıyordu:

  • Çağırma sürecinde onu bir Parcel halinde seri hale getirmek için bir kez
  • Parcel hedef işleme kopyalamak için çekirdek sürücüsüne girdikten sonra
  • Hedef Parcel Paketi seri hale getirmek için bir kez

Android 8, kopya sayısını 3'ten 1'e düşürmek için dağınık toplama optimizasyonunu kullanır. Verileri önce bir Parcel içinde seri hale getirmek yerine, veriler orijinal yapısında ve bellek düzeninde kalır ve sürücü onu hemen hedef işleme kopyalar. Veriler hedef prosese girdikten sonra yapı ve hafıza düzeni aynıdır ve tekrar kopya gerektirmeden veri okunabilir.

İnce taneli kilitleme

Ortak-4.4 ve üstü, yukarı akış dahil

Önceki Android sürümlerinde, ciltleyici sürücüsü, kritik veri yapılarına eşzamanlı erişime karşı koruma sağlamak için küresel bir kilit kullanıyordu. Kilit için çok az çekişme olsa da, asıl sorun, düşük öncelikli bir iş parçacığının kilidi ele geçirmesi ve ardından önceden alınması durumunda, aynı kilidi elde etmesi gereken daha yüksek öncelikli iş parçacıklarını ciddi şekilde geciktirebilmesiydi. Bu, platformda sarsıntıya neden oldu.

Bu sorunu çözmeye yönelik ilk girişimler, küresel kilidi tutarken önlemenin devre dışı bırakılmasını içeriyordu. Ancak bu, gerçek bir çözümden çok bir saldırıydı ve sonunda yukarı akış tarafından reddedildi ve atıldı. Sonraki girişimler, Ocak 2017'den beri Pixel cihazlarda çalışan bir sürümü olan kilitlemeyi daha ayrıntılı hale getirmeye odaklandı. Bu değişikliklerin çoğu halka açıklanırken, sonraki sürümlerde önemli iyileştirmeler yapıldı.

Hassas kilitleme uygulamasındaki küçük sorunları belirledikten sonra, farklı bir kilitleme mimarisiyle geliştirilmiş bir çözüm tasarladık ve tüm genel çekirdek dallarındaki değişiklikleri sunduk. Bu uygulamayı çok sayıda farklı cihazda test etmeye devam ediyoruz; Çözülmemiş herhangi bir sorunun farkında olmadığımız için bu, Android 8 ile gönderilen cihazlar için önerilen uygulamadır.

Gerçek zamanlı öncelik devralma

Common-4.4 ve common-4.9 (yukarı akış çok yakında)

Bağlayıcı sürücüsü her zaman güzel öncelikli kalıtımı desteklemiştir. Android'de artan sayıda işlem gerçek zamanlı öncelikte çalıştığından, bazı durumlarda gerçek zamanlı bir iş parçacığının bir ciltleme çağrısı yapması durumunda, işlemdeki bu çağrıyı işleyen iş parçacığının da gerçek zamanlı olarak çalışması mantıklıdır. . Bu kullanım durumlarını desteklemek için, Android 8 artık ciltleyici sürücüsünde gerçek zamanlı öncelik devralma uygulamaktadır.

İşlem düzeyinde öncelik devralmaya ek olarak, düğüm önceliği devralma , bir düğümün (bağlayıcı hizmet nesnesi), bu düğüme yapılan çağrıların yürütülmesi gereken minimum önceliği belirlemesine olanak tanır. Android'in önceki sürümleri, güzel değerlerle düğüm önceliği devralmayı zaten destekliyordu, ancak Android 8, gerçek zamanlı zamanlama ilkeleri düğüm devralma için destek ekliyor.

Kullanıcı alanı değişiklikleri

Android 8, ortak çekirdekte mevcut ciltleyici sürücüsüyle çalışmak için gereken tüm kullanıcı alanı değişikliklerini bir istisna dışında içerir: /dev/binder için gerçek zamanlı öncelik devralmayı devre dışı bırakan orijinal uygulama, bir ioctl kullandı. Sonraki geliştirme, öncelikli kalıtımın kontrolünü cilt modu başına (bağlam başına değil) olan daha ayrıntılı bir yönteme çevirdi. Bu nedenle, ioctl Android ortak dalında değildir ve bunun yerine ortak çekirdeklerimizde sunulur .

Bu değişikliğin etkisi, gerçek zamanlı öncelik devralmanın her düğüm için varsayılan olarak devre dışı bırakılmasıdır. Android performans ekibi, hwbinder etki alanındaki tüm düğümler için gerçek zamanlı öncelik devralmayı etkinleştirmeyi faydalı buldu. Aynı etkiyi elde etmek için, kullanıcı alanındaki bu değişikliği özenle seçin.

Ortak çekirdekler için SHA'lar

Bağlayıcı sürücüsünde gerekli değişiklikleri elde etmek için uygun SHA ile eşitleyin:

  • Ortak-3.18
    cc8b90c121de ANDROID: ciltleyici: geri yükleme sırasında ön izinleri kontrol etmeyin.
  • Ortak-4.4
    76b376eac7a2 ANDROID: ciltleyici: geri yükleme sırasında ön izinleri kontrol etmeyin.
  • Ortak-4.9
    ecd972d4f9b5 ANDROID: ciltleyici: geri yükleme sırasında ön izinleri kontrol etmeyin.

Bağlayıcı IPC'yi kullanma

Tarihsel olarak, satıcı işlemleri iletişim için ciltleyici işlemler arası iletişimi (IPC) kullanmıştır. Android 8'de, /dev/binder cihaz düğümü, çerçeve işlemlerine özel hale gelir, yani satıcı işlemlerinin artık ona erişimi yoktur. Satıcı işlemleri /dev/hwbinder , ancak HIDL'yi kullanmak için AIDL arabirimlerini dönüştürmeleri gerekir. Satıcı işlemleri arasında AIDL arayüzlerini kullanmaya devam etmek isteyen satıcılar için Android, aşağıda açıklandığı gibi bağlayıcı IPC'yi destekler. Android 10'da Kararlı AIDL, tüm işlemlerin /dev/binder kullanmasına izin verirken aynı zamanda HIDL ve /dev/hwbinder çözdüğü kararlılık garantilerini de çözüyor. Kararlı AIDL'nin nasıl kullanılacağı hakkında HAL'ler için AIDL'ye bakın.

vndbinder

Android 8, satıcı hizmetleri tarafından kullanılmak üzere /dev/binder yerine /dev/binder /dev/vndbinder kullanılarak erişilen yeni bir bağlayıcı etki alanını destekler. /dev/vndbinder , Android artık aşağıdaki üç IPC etki alanına sahiptir:

IPC Etki Alanı Tanım
/dev/binder AIDL arabirimleriyle çerçeve/uygulama işlemleri arasında IPC
/dev/hwbinder HIDL arabirimleriyle çerçeve/satıcı işlemleri arasında IPC
HIDL arabirimleri ile satıcı işlemleri arasında IPC
/dev/vndbinder AIDL Arabirimleri ile satıcı/satıcı süreçleri arasındaki IPC

/dev/vndbinder görünmesi için, CONFIG_ANDROID_BINDER_DEVICES çekirdek yapılandırma öğesinin "binder,hwbinder,vndbinder" olarak ayarlandığından emin olun (bu, Android'in ortak çekirdek ağaçlarında varsayılandır).

Normalde satıcı işlemleri ciltleyici sürücüsünü doğrudan açmaz ve bunun yerine ciltleyici sürücüsünü açan libbinder kullanıcı alanı kitaplığına bağlanır. ::android::ProcessState() için bir yöntem eklemek, libbinder için ciltleyici sürücüsünü seçer. Satıcı işlemleri, ProcessState, IPCThreadState çağrılmadan veya genel olarak herhangi bir bağlayıcı çağrı yapılmadan önce bu yöntemi çağırmalıdır. Kullanmak için, bir satıcı işleminin (istemci ve sunucu) main() öğesinden sonra aşağıdaki aramayı yapın:

ProcessState::initWithDriver("/dev/vndbinder");

vndservis yöneticisi

Önceden, ciltleme hizmetleri, diğer işlemler tarafından alınabilecekleri servicemanager kaydedilmişti. Android 8'de, servicemanager artık yalnızca çerçeve ve uygulama işlemleri tarafından kullanılıyor ve satıcı işlemleri artık buna erişemiyor.

Ancak, satıcı hizmetleri artık /dev/ /dev/binder yerine /dev/vndbinder kullanan ve çerçeve servicemanager ile aynı kaynaklardan oluşturulmuş yeni bir servicemanager örneği olan vndservicemanager kullanabilir. Satıcı işlemlerinin vndservicemanager ile konuşmak için değişiklik yapması gerekmez; bir satıcı işlemi / dev/vndbinder , hizmet aramaları otomatik olarak vndservicemanager .

vndservicemanager ikili dosyası, Android'in varsayılan cihaz makefile dosyalarına dahil edilmiştir.

SELinux politikası

Birbiriyle iletişim kurmak için ciltleyici işlevini kullanmak isteyen satıcı işlemleri aşağıdakilere ihtiyaç duyar:

  1. /dev/vndbinder .
  2. Bağlayıcı {transfer, call} , vndservicemanager .
  3. satıcı ciltleme arabirimi üzerinden satıcı etki alanı B'ye çağrı yapmak isteyen herhangi bir satıcı etki alanı A için binder_call(A, B) .
  4. vndservicemanager hizmet {add, find} izni.

1. ve 2. gereksinimleri karşılamak için vndbinder_use() makrosunu kullanın:

vndbinder_use(some_vendor_process_domain);

Gereksinim 3'ü yerine getirmek için, ciltleyici hakkında konuşması gereken A ve B satıcı işlemleri için binder_call(A, B) yerinde kalabilir ve yeniden adlandırılması gerekmez.

4. gereksinimi karşılamak için hizmet adlarının, hizmet etiketlerinin ve kuralların işlenme biçiminde değişiklikler yapmanız gerekir.

SELinux ile ilgili ayrıntılar için bkz . Android'de Gelişmiş Güvenlikli Linux . Android 8.0'daki SELinux ile ilgili ayrıntılar için bkz. Android 8.0 için SELinux .

hizmet adları

Önceden satıcı, kayıtlı hizmet adlarını bir service_contexts dosyasında işler ve bu dosyaya erişim için ilgili kuralları eklerdi. device/google/marlin/sepolicy service_contexts

AtCmdFwd                              u:object_r:atfwd_service:s0
cneservice                            u:object_r:cne_service:s0
qti.ims.connectionmanagerservice      u:object_r:imscm_service:s0
rcs                                   u:object_r:radio_service:s0
uce                                   u:object_r:uce_service:s0
vendor.qcom.PeripheralManager         u:object_r:per_mgr_service:s0

Android 8'de vndservicemanager bunun yerine vndservice_contexts dosyasını yükler. vndservicemanager (ve zaten eski service_contexts dosyasında bulunan) satıcı hizmetleri yeni vndservice_contexts dosyasına eklenmelidir.

servis etiketleri

Önceden u:object_r:atfwd_service:s0 gibi hizmet etiketleri bir service.te dosyasında tanımlanıyordu. Örnek:

type atfwd_service,      service_manager_type;

Android 8'de türü vndservice_manager_type olarak değiştirmeniz ve kuralı vndservice.te dosyasına taşımanız gerekir. Örnek:

type atfwd_service,      vndservice_manager_type;

Servis yöneticisi kuralları

Daha önce kurallar, etki alanlarına servicemanager hizmet ekleme veya bulma erişimi veriyordu. Örnek:

allow atfwd atfwd_service:service_manager find;
allow some_vendor_app atfwd_service:service_manager add;

Android 8'de bu tür kurallar yerinde kalabilir ve aynı sınıfı kullanabilir. Örnek:

allow atfwd atfwd_service:service_manager find;
allow some_vendor_app atfwd_service:service_manager add;