作为培训课程的一部分,我需要在AOSP中声明一个服务,并在引导时调用它。问题是训练已经过时了,我在一台物理机器上工作,而且这个项目是不同的。
规格: Android版本: 12 Android SDK: 31
无论如何,我已经在C中构建了一个名为"exd“的模块,它存储在/system/bin/中,并且在手动调用时工作正常。接下来,我想把它声明为服务。
我在init.product.rc文件中添加了:
service exd /system/bin/exd
oneshot
on boot
start exd但是当我构建并下载它到设备时,服务列表不会显示它。它不是从靴子开始的。
接下来,我将exd.te文件添加到sepolicy文件夹中:
type exd, domain;
type exd_exec, domain;
init_daemon_domain(exd)并将这一行添加到file_contexts中:
/system/bin/exd u:object_r:exd_exec:s0当我调用build时,它会失败,其中包含以下消息:
Error while expanding policy
[ 39% 60/151] //system/sepolicy:sepolicy.recovery Compiling cil files for sepolicy.recovery [common]
FAILED: out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy
out/host/linux-x86/bin/secilc -m -M true -G -c 30 out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil -o out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy_policy -f /dev/null && cp -f out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy_policy out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy && rm -f out/soong/.intermediates/system/sepolicy/sepolicy.recovery/android_common/sepolicy_policy # hash of input list: 187605db6ee3f7580bafd9adbd0101d2c2a0d02f423bb7efa74ee537c43d35ce
neverallow check failed at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:8770 from system/sepolicy/public/domain.te:1240
(neverallow base_typeattr_197 domain (file (execute execute_no_trans entrypoint)))
<root>
allow at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:28846
(allow init exd_exec (file (read getattr map execute open)))
<root>
allow at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:28848
(allow exd exd_exec (file (read getattr map execute open entrypoint)))
Failed to generate binary
Failed to build policydb
10:35:34 ninja failed with: exit status 1我试过在网上找到的所有东西都没有用。奇怪的是,还有另一个名为"bugreport“的服务,它几乎被声明为我的服务,但它列在”服务列表“命令之后。
在这一点上,即使指向一个好的方向对我来说也是很好的。
发布于 2022-11-01 14:08:19
你得到了“永不允许”,这基本上是安卓的意思,就是你试图做一些SEPolicy定义中不允许的事情。您需要为您的服务创建一个由.te规则组成的SEPolicy文件。
示例SEPolicy文件可以如下所示:
type myservice_exec, exec_type, file_type, system_file_type;
typeattribute myservice coredomain;
# myservice servicemanager and binder access
allow shell myservice:binder { call transfer };
allow servicemanager myservice:dir search;
allow servicemanager myservice:file { open read };
allow servicemanager myservice:process getattr;
allow myservice servicemanager:binder { call transfer};
allow myservice system_server:binder call;
init_daemon_domain(myservice)注意第二行。你错过了这一点,这很可能就是为什么你会遇到一个永远不允许的问题。
https://stackoverflow.com/questions/73218746
复制相似问题