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ış dahilBağ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ış dahilAndroid'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:
-
/dev/vndbinder
. - Bağlayıcı
{transfer, call}
,vndservicemanager
. - 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)
. -
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ış dahilBağ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ış dahilAndroid'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:
-
/dev/vndbinder
. - Bağlayıcı
{transfer, call}
,vndservicemanager
. - 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)
. -
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;