Android7.1update.zip升级在system/bin下新增可执行文件没有可执行权限问题

外出的设备,只能通过update.zip方式升级,比如要在设备/system/bin目录下增加login,在需要时执行login,升级后发现login文件没有可执行权限

msm8937_64:/ # ls -l system/bin/login

-rw-r--r-- 1 root root 1256440 2008-08-0120:00 system/bin/login

第1个root是指UID(文件的owner),第2个root是指GID(Group ID)

但我们需要有可执行文件,怎么解决呢,下面给出解决过程的尝试及解决方法

1.    device\qcom\common\rootdir\etc\init.qcom.rc增加chmod来修改---无效

on boot

chmod 0755/system/bin/login

2.    updater-script调用set_perm()设置权限---无效

更新失败,/cache/recovery/last_log提示

提示line 15 col 48: unknown function"set_perm",原因未知

这是因为bootable\recovery\updater\updater.cpp的没有实现set_perm(),下面给出android4.4版本下相关代码:

// Maybe, at some future point, we candelete these functions? They have been// replaced by perm_set and perm_set_recursive.RegisterFunction("set_perm", SetPermFn);
RegisterFunction("set_perm_recursive",SetPermFn);

我们代码是android7.1的,取而代之的是set_metadata_recursive和set_metadata命令,主要是修改文件或目录权限和属组等信息

比如:set_metadata("/system/bin/login","uid", 0, "gid", 0, "mode", 0755,"capabilities", 0x0, "selabel", "u:object_r:system_file:s0");-----------此方法可以解决此问题(推荐)

第1个0表示ROOT,上帝用户: ROOT, 他的UID= 0; 上帝用户永远属于任何UID

Uid和gid的值system\core\include\private\android_filesystem_config.h定义,比如:

/* This is the master Users and Groupsconfig for the platform.* DONOT EVER RENUMBER*/#define AID_ROOT             0 /* traditional unix root user */#define AID_SYSTEM        1000 /* system server */#define AID_RADIO         1001 /* telephony subsystem, RIL */
#define AID_BLUETOOTH     1002 /* bluetooth subsystem */
#define AID_GRAPHICS      1003 /* graphics devices */
#define AID_INPUT         1004 /* input devices */
#define AID_AUDIO         1005 /* audio devices */
…

set_metadata(filenamekey1value1[, key2 value2,...])

Sets the keys ofthe given filename to values. For example: set_metadata("/system/bin/netcfg","uid", 0, "gid", 3003, "mode", 02750,"selabel", "u:object_r:system_file:s0","capabilities", 0x0).

set_metadata_recursive(dirnamekey1value1[, key2value2,...])

Recursively setsthe keys of the given dirname and all its children to values.For example:set_metadata_recursive("/system","uid", 0, "gid", 0, "fmode", 0644,"dmode", 0755, "selabel","u:object_r:system_file:s0", "capabilities", 0x0).

3.    另一种解决方法(但不推荐)

package_extract_dir()对应的PackageExtractDirFn()调用mzExtractRecursive(),此函数bootable\recovery\minzip\Zip.c在中实现

把UNZIP_FILEMODE的值由0644改为0755即可,但是如果之前用0644方式的升级包升级过,在此基础上再升级,login权限还是0644其他,为了解决此问题,还需要在updater-script文件增加了delete("/system/bin/login");配合才能解决,但这种解决方法不是很合理,不推荐。

参考链接:

Android 5.x OTA Update官方文档(四、OTA更新包解读)

http://blog.csdn.net/huangyabin001/article/details/44873753

Flashing CM 11, I get`set_metadata_recursive: some changes failed`:

https://android.stackexchange.com/questions/62982/flashing-cm-11-i-get-set-metadata-recursive-some-changes-failed

Android7.1update.zip升级在system/bin下新增可执行文件没有可执行权限问题相关推荐

  1. Linux系统下给.sh添加可执行权限并运行

    Linux系统下给.sh添加可执行权限并运行 1.添加可执行权限 chmod u+x xxx.sh 解释: chmod(change the permissions mode of a file)是权 ...

  2. android 版本更新原理,Android系统Recovery工作原理之使用update.zip升级过程分析(二)...

    Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的解决 在上一篇末尾提到的生成差分包时出现的问题,现已解决,由于最近比较忙,相 ...

  3. Android系统Recovery工作原理之使用update.zip升级过程分析(二)---u...

    2019独角兽企业重金招聘Python工程师标准>>>  Android系统Recovery工作原理之使用update.zip升级过程分析(二)---update.zip差分包问题的 ...

  4. Android系统Recovery工作原理之使用update.zip升级过程分析(一)

    这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是And ...

  5. Android系统Recovery工作原理之使用update.zip升级过程分析(一)---update.zip包的制作【转】...

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7399822 这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过 ...

  6. Android系统Recovery工作原理之使用update.zip升级过程分析(五)

    Android系统Recovery工作原理之使用update.zip升级过程分析(五)---update.zip包从上层进入Recovery服务文章开头我们就提到update.zip包来源有两种,一个 ...

  7. linux如何安装zip文件格式,如何在Linux下创建与解压,安装zip, tar, tar.gz和tar.bz2文件...

    zip可能是目前使用得最多的文档压缩格式.它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用.缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在 ...

  8. mac python2.7升级到3.7_Mac下python2.7 升级到3.7

    1. 前言 Mac系统自带python2.7,本文目的是将自带的python升级到3.6版本. 网上有本多的做法是让python2.7和python3.X两个版本共存,博主并不知道,是两版本共存好,还 ...

  9. mysql5.7.17.zip教程,Mysql学习win10下mysql 5.7.17 zip压缩包版安装教程

    搜索热词 <MysqL学习win10下MysqL 5.7.17 zip压缩包版安装教程>要点: 本文介绍了MysqL学习win10下MysqL 5.7.17 zip压缩包版安装教程,希望对 ...

最新文章

  1. vs2005不能找到ASP.NET网站之郁闷
  2. 使用阿里云对象存储OSS收藏老婆新垣结衣日常照
  3. 95-235-048-源码-task-数据交换策略
  4. 重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表...
  5. 20220522Python3.10安装教程
  6. 双曲余弦函数实现(C语言)
  7. 使用记事本完成第一个Java程序的开发遇到异常
  8. 2021-04-13
  9. wx.showToast() 在真机中一闪而过
  10. Cadence OrCAD Capture 在Excel中编辑所有元件属性然后导入设计图纸的方法
  11. 信息传输速率与传信率_波特率和数据传输速率的关系
  12. 论VM和Hyper-v虚拟机的使用场景
  13. linux slub分配器,Vi Linux内存 之 Slub分配器(六)
  14. java获取环境变量路径/java获取环境变量和系统属性
  15. 没想到钱多多的求职之路竟如此艰辛,求大佬指点
  16. 【新学期、新Flag】例文:我的新学期Flag
  17. 在线编辑器的基本实现原理
  18. JavaScript+react笔记
  19. nvm切换node版本基本操作篇
  20. 2015年年终总结----磕磕绊绊的一年

热门文章

  1. c 语言与试验系统,C/C++程序设计学习与实验系统
  2. 017_Upload上传
  3. 如何根据分页的当前页数查询数据_数据量很大的情况下,如何分页查询优化方案?...
  4. 负载均衡下ajax第二次请求,会话清除第二个AJAX电话
  5. mongo mysql 条件查询效率_mongodb查询条件对查询效率的影响
  6. es 查询语法_ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
  7. java 递归原理_Java中递归原理实例分析
  8. python大神的成长之路_Python大神成长之路: 第二次学习记录
  9. Java基础:基本数据类型包装类
  10. Android各大热补丁方案分析和比较