Dinamik kapatma işlemi uygulamak için veri akışlarının kablolanması ve dinamik süreçlere yakından bakın.
HAL tanımlarındaki değişiklikler
Dinamik kapatma, hangi işlemlerin HAL ile hizmet verdiğine dair bilgi gerektirir başka bağlamlarda da faydalı olabilir (bu bilgiler daha sonra başka bağlamlarda da yararlı olabilir) başlatma sırasında işlem başlatılmaması ve yeniden başlatılmaması (tüm tekrar istekte bulunurlar.
# some init.rc script associated with the HAL service vendor.some-service-name /vendor/bin/hw/some-binary-service # init language extension, provides information of what service is served # if multiple interfaces are served, they can be specified one on each line interface android.hardware.light@2.0::ILight default # restarted if hwservicemanager dies # would also cause the hal to start early during boot if disabled wasn't set class hal # will not be restarted if it exits until it is requested to be restarted oneshot # will only be started when requested disabled # ... other properties
init ve hwservicemanager'daki değişiklikler
Dinamik kapanma sırasında hwservicemanager
, cihazın bunu bildirmesini de gerektirir.
İstenen hizmetleri başlatmak için init
. Android 9'da
init
, üç ek kontrol mesajı içerir (ör.
ctl.start
): ctl.interface_start
,
ctl.interface_stop
ve ctl.interface_restart
.
Bu mesajlar, init
adlı kullanıcının yukarı ve aşağı getirmesini bildirmek için kullanılabilir
özel donanım arayüzleridir. Bir hizmetin istenmesine rağmen istenmediğinde
kayıtlı, hwservicemanager
hizmetin
başladı. Bununla birlikte, dinamik HAL'ler için bunlardan herhangi birinin kullanılması gerekmez.
HAL çıkışını belirleme
Android 9'da HAL çıkışının manuel olarak yapılması gerekir belirler. Android 10 ve sonraki sürümlerde müzakere tekniklerini kullanarak otomatik yaşam döngüleri hakkında daha fazla bilgi edinin.
Dinamik kapatma işlemi, bir cihazın ne zaman başlatılacağına karar vermek için birden fazla
HAL ve HAL'nin ne zaman kapatılacağı. Bir HAL herhangi bir nedenle çıkmaya karar verirse
gereken durumlarda otomatik olarak yeniden başlatılacak.
HAL tanımında ve
init
ve hwservicemanager
. Bu beceri kapsamında
iki strateji vardır:
- Bir HAL, birisi kapanış veya görebilirsiniz. Bu davranış, ilgili HAL'de belirtilmelidir kullanır.
- HAL'ler, görevleri tamamlandığında kapatılabilir (HAL dosyası) ekleyebilirsiniz.
Otomatik yaşam döngüleri
Android 10, çekirdeğe daha fazla destek sağlıyor ve
hwservicemanager
, HAL'lerin otomatik olarak kapatılmasına olanak tanır.
. Bu özelliği kullanmak için aşağıdaki tüm adımları uygulayın:
HAL tanımlarındaki değişiklikler de
yön:
- Hizmeti C++ hizmetine
LazyServiceRegistrar
ile kaydettirin işlevi (registerAsService
) yerine örnek:// only one instance of LazyServiceRegistrar per process LazyServiceRegistrar registrar; registrar.registerAsService(myHidlService /* , "default" */);
- HAL istemcisinin üst düzey HAL (
arayüzü
hwservicemanager
üzerinde kayıtlıysa) yalnızca kullanım durumu. Bu referans bir hwbinder iş parçacığına bırakılırsa gecikmeleri önlemek için bir istek geliyorsa istemcinin, Bıraktıktan sonraIPCThreadState::self()->flushCommands()
bağlayıcı sürücüye, ilgili dosya ile ilgili referans sayısı değişiklikleridir.