转自:http://www.linuxidc.com/Linux/2011-04/35014.htm

通过property_set("ctl.start", service_xx);

来启动init.rc中的service是一个很方便方法来调用某个可执行程序或某个脚本程序

service service_xx  /system/bin/xx

disabled

oneshot

但在非AID_ROOT、AID_SYSTEM 用户的进程中调用ctl.start ctl.stop会碰到权限问题:

system/core/init/property_service.c

/*  
 * White list of UID that are allowed to start/stop services.  
 * Currently there are no user apps that require.  
 */  
struct {   
    const char *service;   
    unsigned int uid;   
    unsigned int gid;   
} control_perms[] = {   
    { "dumpstate",AID_SHELL, AID_LOG },   
     {NULL, 0, 0 }   
};   
  
/*  
 * Checks permissions for starting/stoping system services.  
 * AID_SYSTEM and AID_ROOT are always allowed.  
 *  
 * Returns 1 if uid allowed, 0 otherwise.  
 */  
static int check_control_perms(const char *name, int uid, int gid) {   
    int i;   
    if (uid == AID_SYSTEM || uid == AID_ROOT)   
        return 1;   
  
    /* Search the ACL */  
    for (i = 0; control_perms[i].service; i++) {   
        if (strcmp(control_perms[i].service, name) == 0) {   
            if ((uid && control_perms[i].uid == uid) ||   
                (gid && control_perms[i].gid == gid)) {   
                return 1;   
            }   
        }   
    }   
    return 0;   
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zmyde2010/archive/2011/04/09/6312615.aspx

只有uid == AID_SYSTEM || uid == AID_ROOT

或符合 control_perms[] = {
    { "dumpstate",AID_SHELL, AID_LOG },
     {NULL, 0, 0 }
}; 的uid进程才有权限star/stop services

因此,如果我们碰到了权限问题,根据log提示,在/system/core/include/private/Android_filesystem_config.h

中查到进程定义,添加到control_perms[]列表

比如,uid ==AID_WIFI的某个程序需要权限启动service_xx

control_perms[] = {
    { "dumpstate",AID_SHELL, AID_LOG },

+  { "service_xx ",AID_WIFI, AID_WIFI},
     {NULL, 0, 0 }
};

【作者】张昺华
【出处】http://www.cnblogs.com/sky-heaven/
【博客园】 http://www.cnblogs.com/sky-heaven/
【新浪博客】 http://blog.sina.com.cn/u/2049150530
【知乎】 http://www.zhihu.com/people/zhang-bing-hua
【我的作品---旋转倒立摆】 http://v.youku.com/v_show/id_XODM5NDAzNjQw.html?spm=a2hzp.8253869.0.0&from=y1.7-2
【我的作品---自平衡自动循迹车】 http://v.youku.com/v_show/id_XODM5MzYyNTIw.html?spm=a2hzp.8253869.0.0&from=y1.7-2
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

Android: 启动init.rc 中service的权限问题【转】相关推荐

  1. android 在init.rc中添加bootmusic,xboot-x4412开发板问题汇总-开发 - Powered by Discuz!

    Q1:编译android时,执行mk脚本提示如下错误信息: lqm@ubuntu:~/samba/x4412_ics_rtm_v10$ ./mk -s ./mk: 95: ./mk: source: ...

  2. Android如何配置init.rc中的开机启动进程(service)【转】

    本文转载自:http://blog.csdn.net/qq_28899635/article/details/56289063 开篇:为什么写这篇文章 先说下我自己的情况,我是个普通的大四学生,之前在 ...

  3. android init.rc中启动的service 默认是disable的,后续如何启动此服务

    如果 android init.rc中启动的service 默认是disable的,如何才能启动此服务呢? init.rc中可以直接启动service 附带的参数决定启动程序的状态,例如数据业务中配置 ...

  4. Android程序暂停sh,init进程 解析Android启动脚本init.rc 修改它使不启动android init.rc中启动一个sh文件...

    Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径: system/core/init,编 ...

  5. Android使用init.rc触发脚本实现隐藏内置应用

    [实现逻辑] 通过在property_service.c中设置标志位,在设置中实现接口改变标志位, 使用init.rc中声明的服务来侦听标志位的变化,显式启动声明的服务,执行对应的脚本,把应用后缀从a ...

  6. Android 的 init.rc 文件简介【转】

    转自:http://blog.csdn.net/yimiyangguang1314/article/details/6268177 init.rc由许多的Action和Service组成.每一个语句占 ...

  7. [Android6.0]App中调用init.rc中的服务,从而运行shell脚本

    Author: Younix Platform: RK3399 OS: Android 6.0 Kernel: 4.4 Version: v2017.07 需求:希望在 Android App 中添加 ...

  8. Android 9.0 在init.rc中启动一个服务

    现在有一个blink .bin文件,需要拷贝到/system/bin/目录下面去,然后再init.rc文件中启动该服务 一.init.rc文件中启动服务 1.在init.rc文件中启动服务 代码路径: ...

  9. Android 在线启动、停止 init.rc 中的服务

    在 aosp 源码中,可以在 init.xxx.rc 中添加一些服务(不是四大组件的Service),比如 service my_service /vendor/bin/sh /vendor/bin/ ...

最新文章

  1. ldconfig动态链接库管理以及修改ld.so.conf.d
  2. 计算机音乐是哪一个,哪种软件适合音乐编辑的计算机版本?
  3. [拓扑排序/强联通分量] [NOIP201402] 信息传递
  4. 【android-tips】installfailedinsufficientstorage解决方案
  5. Vista共享文件夹无法访问?
  6. 在php中如何便利字符串,php字符串可以遍历嘛
  7. idea 快捷键获取类的全限定类名(包名+类名)
  8. 非线性动力学_非线性科学中的现代数学方法:综述
  9. Linux学习笔记-调用pthead_create创建线程
  10. 漫天飞舞的蒲公英你是我的幸福吗
  11. java设置请求头_前端需要知道的 HTTP 安全头配置
  12. 【乐理学习笔记】音符时值和拍号
  13. windows简单命令
  14. 这么糟糕的代码,真的是我以前写的吗?
  15. Java高级特性 集合框架、泛型和Collection(一)(第二十三天)
  16. Js高级-函数的理解
  17. 【笔试题1】按输入的两个数进行幂级数求和,如s=2的0次方+2的一次方+2的n次方,编码实现
  18. python爬虫音乐犯法么_Python爬虫案例:爬取网易云音乐
  19. python 编写获取阿里巴巴行业分类数据代码
  20. 程序员需要具备的五个基本条件

热门文章

  1. Java微服务 vs Go微服务,究竟谁更强!?
  2. 为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?
  3. 面试造飞机这么能耐,对着调优实战更不能怂啊!
  4. 亿级流量系统架构之如何设计承载百亿流量的高性能架构【石杉的架构笔记】...
  5. 8月组队学习机器学习理论
  6. 兄弟俩都是院士!哥哥在南大,弟弟在复旦
  7. 用Windows电脑训练深度学习模型?超详细配置教程来了
  8. 什么是 CNN?Facebook 员工写给小白的机器学习入门贴彻底火了!
  9. 哈哈哈,这个教人写出烂代码的项目在 GitHub 上火了...
  10. 再来一个吊打百度网盘的开源神器,还是99年妹子开发的