カスタム hal サービスの追加については、Android 12 S 分析に基づく HIDL サービス作成プロセスを参照してください。
以下の部分の追加は必須であり、いずれもサービスの自動起動に失敗する可能性があります。
ジェネリック/ベンダー/共通/ファイルコンテキスト
/vendor/bin/hw/vendor\.qti\.hardware\.customizehidl@1\.0-service u:object_r:hal_customizehidl_exec:s0
ジェネリック/ベンダー/共通/hwservice_contexts
vendor.qti.hardware.customizehidl::ICustomizeHidl u:object_r:hal_customizehidl_hwservice:s0
ジェネリック/ベンダー/共通/サービスコンテキスト
vendor.qti.hardware.customizehidl.ICustomizeHidl/デフォルト u:object_r:hal_customizehidl_service:s0
ジェネリック/パブリック/file.te
タイプ hal_customizehidl_exec、exec_type、vendor_file_type、file_type;
ジェネリック/パブリック/hwservice.te
タイプ hal_customizehidl_hwservice、hwservice_manager_type、protected_hwservice;
ジェネリック/パブリック/サービス.te
タイプ hal_customizehidl_service、vendor_service、protected_service、service_manager_type;
以下の部分の追加は必須であり、いずれもサービスの自動起動に失敗する可能性があります。
ジェネリック/ベンダー/共通/hal_customizehidl.te
タイプ hal_customizehidl、ドメイン;
hwbinder_use(hal_customizehidl)
init_daemon_domain(hal_customizehidl);add_hwservice(hal_customizehidl, hal_customizehidl_hwservice)
get_prop(hal_customizehidl, hwservicemanager_prop)
hwbinder_use(hal_customizehidl)
add_service(hal_customizehidl, hal_customizehidl_service)
binding_use(hal_customizehidl)
次のエラーが発生した場合は、hwservice_contexts および hwservice.te に関連する定義と宣言を追加していない可能性があります。単に追加してください。
05-30 12:39:35.856 370 4561 I hwservicemanager:[email protected]::ICustomizeHidl/default を遅延サービスとして開始しようとしましたが、できませんでした。通常、これはサービスがインストールされていない場合に発生しますが、サービスが遅延サービスとして使用されることを目的としている場合は、正しく構成されていない可能性があります。
理解を容易にするために、上記の権限のいくつかの説明を以下に追加します。
hwbinder_use(hal_customizehidl) における hwbinder_use の定義は以下のとおりです。
define(`hwbinder_use', ` # hwservicemanager を呼び出し、それに参照を転送します。allow $1 hwservicemanager:binder { call transfer }; # hwservicemanager によるコールバックの送信を許可します 。allow hwservicemanager $1:binder { call transfer }; # hwservicemanager はクライアントで getpidcon を実行します。 .allow hwservicemanager $1:dir search; allowed hwservicemanager $1:file { read open map }; allowed hwservicemanager $1:process getattr; # /dev/hwbinderおよび/dev/ashmem への rw アクセスは # domain.te内のすべてのドメインに許可されています. ')
add_hwservice(hal_customizehidl, hal_customizehidl_hwservice) の Add_hwservice は次のように定義されています
定義(` add_hwservice ', ` allowed $1 $2:hwservice_manager { add find }; allowed $1 hidl_base_hwservice:hwservice_manager add; Neverallow { ドメイン -$1 } $2:hwservice_manager add; ')
get_prop(hal_customizehidl, hwservicemanager_prop) における get_prop の定義は次のとおりです。
define(` get_prop ', ` allow $1 $2:file { getattr open readmap }; ')
add_service(hal_customizehidl, hal_customizehidl_service) の add_service は次のように定義されます
define(` add_service ', ` allowed $1 $2:service_manager { add find }; Neverallow { ドメイン -$1 } $2:service_manager add; ')
binding_use(hal_customizehidl) の binding_use は次のように定義されます。
define(` binding_use ', ` # サービスマネージャーを呼び出し、それに参照を転送します。allow $1 servicemanager:binder { call transfer }; # servicemanager によるコールバックの送信を許可します 。allow servicemanager $1:binder { call transfer }; # servicemanager はクライアントで getpidcon を実行します。 .allowservicemanager $1:dirsearch; allowservicemanager$1:file{readopen}; allowservicemanager$1:processgetattr; # /dev/binderおよび/dev/ashmem への rw アクセスは、 # 現在、 domain.te 内のすべてのドメインに許可されています。 ')