由于一些节点有权限限制,如果写入会提示PERMISSION DEFINED,一般情况下可以解决avc,但是如果不过GMS认证,可以考虑关闭SELINUX,一劳永逸。

1、判断selinux是否打开

adb shell下getenforce查看权限为Enforcing,说明selinux是打开状态;查看权限为Permissive,说明selinux是关闭状态

2、如何关闭selinux

project/device/rockchip/rk356x/xxxx/BoardConfig.mk 

在这个文件中关闭SELINUX,, BOARD_SELINUX_ENFORCING := false;

修改OK后,编译userdebug模式,Selinux已经关闭,但是切换到USER模式后Selinux还是打开状态。

查看代码发现system/core/init/selinux.cpp 有个isEnforcing()方法,

bool IsEnforcing() {
    if (ALLOW_PERMISSIVE_SELINUX) {
        return StatusFromCmdline() == SELINUX_ENFORCING;
    }
    return true;
}

Android.go 定义ALLOW_PERMISSIVE_SELINUX,默认值是0,debug模式下ALLOW_PERMISSIVE_SELINUX值是1,所以userdebug模式有效果,user模式没有效果,修改下默认值,如下补丁

Index: Android.bp
===================================================================
--- Android.bp    (revision 572)
+++ Android.bp    (revision 573)
@@ -109,7 +109,7 @@
         "-Wthread-safety",
         "-DALLOW_FIRST_STAGE_CONSOLE=0",
         "-DALLOW_LOCAL_PROP_OVERRIDE=0",
-        "-DALLOW_PERMISSIVE_SELINUX=0",
+        "-DALLOW_PERMISSIVE_SELINUX=1",
         "-DREBOOT_BOOTLOADER_ON_PANIC=0",
         "-DWORLD_WRITABLE_KMSG=0",
         "-DDUMP_ON_UMOUNT_FAILURE=0",

编译android后,关闭Selinux成功。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐