在开机阶段创建文件夹不成功

xx项目双摄倾斜度校验功能需要在开机阶段创建/mnt/vendor/persist/camera目录,但一直创建不成功

解决过程:

1.在init.project.rc中on post-fs-data这个阶段增加这一行:mkdir /mnt/vendor/persist/camera 0744 cameraserver cameraserver

编译vendorimage,将out目录中的vendor/etc/init/hw/init.project.rc push到手机里开机依然没有在/mnt/vendor/persist下生成camera目录。

2.怀疑是权限问题,在mkdir之前加一行:chmod 0777 /mnt/vendor/persist,创建camera目录依然不成功。

3.怀疑是创建文件夹的阶段不对,将mkdir /mnt/vendor/persist/camera 0744 cameraserver cameraserver放在on fs阶段,创建camera目录依然不成功。

4.尝试在其他路径创建cameram目录,添加mkdir /mnt/vendor/camera 0744 cameraserver cameraserver,修改生效,可以在mnt/vendor下生成camera目录,说明还是persist目录下没有权限创建文件夹。

5.查看init.mt6765.rc中其他创建目录的代码,发现有些创建目录前有restorecon_recursive xxx这一行,于是也在mkdir前添加restorecon_recursive /mnt/vendor/persist,修改生效,/mnt/vendor下创建camera目录成功。

代码修改如下:

在init.project.rc中on post-fs-data这个部分增加:

       restorecon_recursive /mnt/vendor/persist

    mkdir /mnt/vendor/persist/camera 0744 cameraserver cameraserver

      

关于restorecon_recursive这个命令:

restorecon_recursive <path> [ <path> ]*  以递归的方式恢复指定目录到file_contexts配置中指定的安全上下文中,restoercon,全称应该是restore context:就是根据file_contexts中的内容给path目录打标签

下面截取一段网上找的文章介绍

 restorecon分析

[-->init.c::restorecon]

int restorecon(const char *pathname)

{

    char *secontext = NULL;

    struct stat sb;

    int i;

    if (is_selinux_enabled() <= 0 || !sehandle)

        return 0;

    if (lstat(pathname, &sb) < 0)   return -errno;

    //查找file_context文件中是否包含有pathname路径的控制选项

    if (selabel_lookup(sehandle, &secontext, pathname, sb.st_mode) < 0)

        return -errno;

   //设置patchname目录的security_contextlsetfilecon的实现非常简单,就是调用

    if (lsetfilecon(pathname, secontext) < 0) {

        freecon(secontext);

        return -errno;

    }

    freecon(secontext);

    return 0;

}


版权声明:本文为zhoumin090508原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。