user版本开启root权限,其中有一个步骤是需要关闭Selinux安全检查,但是在Android U MTK平台直接关闭selinux会直接进入fastboot模式,解决这个问题,我这里不采用直接关闭的方案,而是返回userdebug的策略模式,这样既可以成功让user版本开启root权限,也避免了会开机直接进入fastboot模式
具体配置:
1、/system/system/sepolicy/Android.bp
将userdebug版本的策略文件 “:userdebug_plat_sepolicy.conf” 文件命令为userdebug_plat_sepolicy_cil
// BEGIN <Android> <2023/10/13> <add for user root version>
se_policy_cil {
name: "userdebug_plat_sepolicy_cil",
src: ":userdebug_plat_sepolicy.conf",
additional_cil_files: [":sepolicy_technical_debt{.plat_private}"],
dist: {
targets: ["droidcore"],
},
}
// END <Android> <2023/10/13> <add for user root version>
2、/system/system/sepolicy/Android.mk
在ifeq判断是userroot版本(你想做的版本),则将刚才命名的userdebug_plat_sepolicy_cil加入到LOCAL_REQUIRED_MODULES中,指定依赖关系
# BEGIN <Android> <2023/10/13> <add for user root version>
ifeq ($(strip $(是userroot版本)),true)
LOCAL_REQUIRED_MODULES += \
userdebug_plat_sepolicy_cil
endif
# END <Android> <2023/10/13> <add for user root version>
3、/system/system/core/init/selinux.cpp
在GetUserdebugPlatformPolicyFile判断是userroot版本,则返回此策略文件
std::optional<const char*> GetUserdebugPlatformPolicyFile() {
// BEGIN <Android> <2023/10/13> <add for user root version>
#ifdef 是userroot版本
return "/system/etc/selinux/userdebug_plat_sepolicy_cil";
#endif
// END <Android> <2023/10/13> <add for user root version>
// See if we need to load userdebug_plat_sepolicy.cil instead of plat_sepolicy.cil.
const char* force_debuggable_env = getenv("INIT_FORCE_DEBUGGABLE");
...
...
介绍:
userdebug_plat_sepolicy.conf是Android系统中的一个策略文件,用于定义平台级别的安全策略。在Android中,安全策略是通过SELinux(安全增强的Linux)实现的,它控制着Android系统中各个进程和组件的访问权限。userdebug_plat_sepolicy.conf文件包含了一系列的规则和策略,用于定义userdebug版本的系统在开发和调试过程中的安全策略。这些策略可以包括允许特定的调试功能、允许特定的权限和访问等。