ネイティブサービスの追加については、次のブログを参照してください。
https://blog.csdn.net/weixin_41028555/article/details/130322366?spm=1001.2014.3001.5502
halサービスの追加については、以下を参照してください。
https://blog.csdn.net/weixin_41028555/article/details/130424627?spm=1001.2014.3001.5502
さらに、seLinux 権限をノードに追加する場合は、対応する selinux をノードのすべてのハイパーリンク ディレクトリに追加する必要があります。
ノードはこのディレクトリに定義を追加します: genfs_contexts
この権限は、customizemanagerserver ネイティブ サービスが hal サービスのcustomizehidlにアクセスし、system_server と通信するためのものです。
この権限追加サービスは自動起動することも可能であり、例えば、該当する権限を自動起動すれば、独自にフィルタリングすることも可能である。
// サービスのサービスラベル定義
ジェネリック/プライベート/サービスコンテキスト
カスタマイズマネージャーサーバー u:object_r:customizemanager_service:s0
//サービスサービスステートメント
ジェネリック/プライベート/service.te
タイプcustomizemanager_service、app_api_service、service_manager_type;
//サービス実行ファイルのタグ定義
ジェネリック/プライベート/ファイルコンテキスト
/system/bin/customizemanagerserver u:object_r:customizemanager_exec:s0
/system_ext/lib(64)?/vendor\.qti\.hardware\.customizehidl@1\.0\.so u:object_r:system_lib_file:s0//これは、customizemanager がドメインの hal サービスにアクセスする必要があるだけでなく、coredomain の system_server にもアクセスする必要があるためです。
ジェネリック/パブリック/カスタマイズマネージャー.te
「customizemanager」、「domain」、「coredomain」と入力します。
//これは hal サービスのドメイン宣言です
ジェネリック/パブリック/hal_customizehidl .te
タイプ hal_customizehidl、ドメイン;
//ここには、customizemanager サービスのすべての権限が含まれています。
ジェネリック/プライベート/カスタマイズマネージャー.te
タイプ属性カスタマイズマネージャーコアドメイン;
//customizemanager サービス実行可能ファイルのドメイン宣言
タイプカスタマイズマネージャー_exec、exec_type、system_file_type、file_type;
// ドメイン変換
init_daemon_domain(カスタマイズマネージャー)
//customizemanager が Custommanager_service を検索して追加できるようにします
add_service(カスタマイズマネージャー、カスタマイズマネージャー_サービス)
//主に、Manager をカスタマイズするための ServiceManager の一部の権限に使用されます
バインダー_使用(カスタマイズマネージャー);
//system_server 用customizemanager
binding_call(system_server,customizemanager)バインダー_サービス(カスタマイズマネージャー)
//customizemanager 用 system_server
binding_call(customizemanager, system_server)
get_prop(customizemanager, hwservicemanager_prop);// hal サービスと通信するための権限
hwbinder_use(customizemanager);
allowed Customizemanager Same_process_hal_file:file { open read getattr 実行マップ };
allowed Customizemanager system_lib_file:file { open read getattr 実行マップ };
allowed Customizemanager hal_customizeh idl_hwservice:hwservice_manager { find } ;
カスタマイズマネージャー hal_customizehidl:binder { 呼び出し } を許可します。//system_server との通信には権限を追加する必要があります
システムサーバーのカスタマイズマネージャーサービスを許可します:service_manager { 検索 };
binding_use は次のように定義されます。
# バインダー_使用(ドメイン) # ドメインがバインダー IPC を使用できるようにします。 定義(`バインダー_使用', ` # サービスマネージャーを呼び出して、そこへの参照を転送します。 $1 servicemanager:binder {通話転送};を許可します。 # サービスマネージャーがコールバックを送信できるようにする サービスマネージャー $1:binder { 通話転送 }; # servicemanager はクライアントで getpidcon を実行します。 servicemanager $1:dir 検索を許可します。 サービスマネージャーを許可 $1:file { 読み取りオープン }; サービスマネージャー $1:プロセス getattr を許可します。 # /dev/binderおよび/dev/ashmemへの rw アクセスが現在許可されています # domain.te 内のすべてのドメイン。 ')
binding_service は次のように定義されます。
# バインダー_サービス(ドメイン) # ドメインを Binder サービス ドメインとしてマークします。 # バインダー IPC をさまざまなシステム サービスに許可するために使用されます。 定義(`バインダー_サービス', ` typeattribute $1 バインダーサービスドメイン; ')
binding_call は次のように定義されます
# binding_call(クライアントドメイン, サーバードメイン) # クライアントドメインがサーバードメインに対してバインダー IPC を実行できるようにします。 定義(`binder_call', ` # サーバー ドメインを呼び出し、オプションでそのサーバー ドメインへの参照を転送します。 $1 $2:binder {通話転送}を許可します。 # サーバードメインが応答時に参照をクライアントに転送できるようにします。 $2 $1:バインダー転送を許可します。 # サーバーから開いているファイルを受信して使用します。 $1 $2:fd の使用を許可します。 ')
hwbinder_use は次のように定義されます
# hwbinder_use(ドメイン) # ドメインが HwBinder IPC を使用できるようにします。 定義(`hwbinder_use', ` # hwservicemanager を呼び出して、そこへの参照を転送します。 $1 hwservicemanager:binder {通話転送};を許可します。 # hwservicemanager がコールバックを送信できるようにする hwservicemanager $1:binder {通話転送}; # hwservicemanager はクライアントで getpidcon を実行します。 hwservicemanager $1:dir 検索を許可します。 allowed hwservicemanager $1:file { 開いたマップを読み取る }; hwservicemanager $1:プロセス getattr; を許可します。# /dev/hwbinderおよび/dev/ashmem への rw アクセスは現在許可されています # domain.te 内のすべてのドメイン。 ')