有个三星的平台,发现

Finding update package...

I:Update location: /sdcard/update.zip

Opening update package...

E:unknown volume for path [/sdcard/update.zip]

sysutil: Unable to open '/sdcard/update.zip': No such file or directory

E:failed to map file

三星经常碰到一些弱智的问题,看问题说是找不到 /sdcard/update.zip  ,明明自己放上去了呀,是不是权限有问题。

后来发现问题还是有,

首先找到 recovery_ramdisk 的 fstab看看

xxxxxx是你们设备的路径,lunch 的时候回lunch 到相应设备的vendorsetup.sh

vi device/xxxxxx/xxxxxx/recovery.fstab

/dev/block/platform/dw_mmc.2 /by-num/p1    /boot               ext4      defaults   defaults

/dev/block/platform/dw_mmc.2 /by-num/p2    /system               ext4      defaults   defaults

/dev/block/platform/dw_mmc.2 /by-num/p3    /cache               ext4      defaults   defaults

/dev/block/platform/dw_mmc.2 /by-num/p5    /misc               emmc      defaults   defaults

/dev/block/platform/dw_mmc.2 /by-num/p6    /recovery               emmc      defaults   defaults

/dev/block/platform/dw_mmc.2 /by-num/p7    /data               ext4      defaults   defaults

并没有找到 sdcard的挂载部分,那 /sdcard就是空的咯,这个fstab看上去我就不是很顺眼

然后看看recovery_ramdisk 的 init.rc

vi  bootable/recovery/etc/init.rc

14on init
15    export PATH /sbin:/system/bin
16    export ANDROID_ROOT /system
17    export ANDROID_DATA /data
18    export EXTERNAL_STORAGE /sdcard
19
20    symlink /system/etc /etc
21
22    mkdir /sdcard
23    mkdir /system
24    mkdir /data
25    mkdir /cache
26    mkdir /sideload
27    mount tmpfs tmpfs /tmp
28
29    chown root shell /tmp
30    chmod 0775 /tmp
31
32    write /proc/sys/kernel/panic_on_oops 1
33    write /proc/sys/vm/max_map_count 1000000

发现就做了这两个事情,傻逼葛,新建一个就可以了?什么都没有,空的

export EXTERNAL_STORAGE /sdcard
mkdir /sdcard

那就是/sdcard没有挂载咯, 那就去看看android_ramdisk

xxx是你自己设备名

看一下init.xxx.rc

vi  device/xxxx/xxxx/init.xxx.rc

10    export EXTERNAL_STORAGE /storage/emulated/legacy
11    export EMULATED_STORAGE_SOURCE /mnt/shell/emulated
12    export EMULATED_STORAGE_TARGET /storage/emulated
13
14    # Support legacy paths
15    symlink /storage/emulated/legacy /sdcard
16    symlink /storage/emulated/legacy /mnt/sdcard
17    symlink /storage/emulated/legacy /storage/sdcard0
18    symlink /mnt/shell/emulated/0 /storage/emulated/legacy

发现人家是link到/mnt/shell/emulated/0 去的,这个/mnt/shell/emulated/0 什么鬼,往下面看
100# virtual sdcard daemon running as media_rw (1023)
101service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated
102    class late_start

哦哦,原来是/data/media ,google把人家的data分区使劲虚拟,变成内部的sdcard,おかしい ,用来处理多用户数据虚拟出 0 1 2 3 .... 各种虚拟分区

那就是/data/media/0 咯,我记得是把update.zip放到 /sdcard上去, 其实就是放在/data/media/0,然后触发升级。

额,那,就是说东西在/data/media/0上面,recovery_ramdisk的init.rc新建的/sdcard又没有去虚拟挂载到/data/media/0 ,所以就是空的。

怎么解决呢?

有好几种方法

1、在Init.rc 中添加 代码将/sdcard  挂载到 /data/media/0  同时需要将 /system/bin/sdcard  拿过来

2、sdcard就算挂载了在 recovery_ramdisk出了升级都没有什么毛用 ,直接将路径改到/data/media/0

3、不在/data/media/0 内置存储升级了,自己同时修改 android_ramdisk 和 recovery_ramdisk 的外置存储 /sdcard1 上面去 同时挂载到外部的 sd卡进行升级

我选了第二种:

1078    if (update_package) {
1079        // For backwards compatibility on the cache partition only, if
1080        // we're given an old 'root' path "CACHE:foo", change it to
1081        // "/cache/foo".
1082        if (strncmp(update_package, "CACHE:", 6) == 0) {
1083            int len = strlen(update_package) + 10;
1084            char* modified_path = (char*)malloc(len);
1085            strlcpy(modified_path, "/cache/", len);
1086            strlcat(modified_path, update_package+6, len);
1087            printf("(replacing path \"%s\" with \"%s\")\n",
1088                   update_package, modified_path);
1089            update_package = modified_path;
1090        }
   +        else if(strncmp(update_package, "/sdcard/", 8) == 0){


1091    }
这样就OK了,如果其它不是data分区的话,比如添加的其它分区,recovery也会帮你mount上,不过记得

install_package(update_package, &wipe_cache,TEMPORARY_INSTALL_FILE, true);        第四个参数设置成为true
   +            int len = strlen(update_package) + 14;+            char* modified_path = (char*)malloc(len);+            strlcpy(modified_path, "/data/media/0/", len);+            strlcat(modified_path, update_package+8, len);+             printf("(replacing path \"%s\" with \"%s\")\n",+                update_package, modified_path);+             update_package = modified_path;+                }

Recover后升级失败,unknown volume for path相关推荐

  1. oracle drop user失败,升级失败后,在drop user时出现错误ORA-00600 kkpo_rcinfo_defstg:objnotfound...

    关于升级失败后,在drop user时出现错误ORA-00600的解决方案: 当前DB版本: SQL> select * from v$version where rownum<5; BA ...

  2. oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...

    升级失败后,数据库降级方案(flashback database) 环境:Oracle 11.2.0.1 rac on redhat 5.8 Flashback database 准备工作 查看是否f ...

  3. 苹果6s升级后显示无服务器,iphone6s升级失败变砖的解决方法【图文】

    自从ios10正式版推送出来后,有着苹果手机的小伙伴就在考虑要不要升级系统.这不,有的朋友就把iphone6s升级ios10正式版,但是给升级失败,不知道如何解决?今天,小编就给大家带来 iPhone ...

  4. Centos7 -- glibc 升级失败、意外删除、故意删除后的处理方法

    第一部分:测试(如果不是想测试效果,可以直接跳到第三部分) 鉴于不久前 glibc-2.29 升级失败导致一系列的工具无法正常使用,'' 本着研究精神的我决定删除 glibc及其库文件 ,测试影响范围 ...

  5. 荣耀升级android版本升级失败,王者荣耀安装包升级失败了可能发生模块错误请您重启手机后再打开游戏试试_游戏吧...

    王者荣耀今天进行了更新,有玩家出现了安装包升级失败的问题,想必大家都很想知道怎么解决吧.下面游戏吧小编就为各位玩家带来了王者荣耀安装包的升级失败解决方法. 安装失败解决方法 玩家尝试重启手机再次更新, ...

  6. 如何在映像更改后升级docker容器

    本文翻译自:How to upgrade docker container after its image changed Let's say I have pulled the official m ...

  7. 小米摄像机升级失败,小米摄像机黄灯常亮修复,全网最硬核修复

    小米摄像机升级失败,小米摄像机黄灯常亮修复,全网最硬核修复 背景 刷机方法 准备 相机拆机 修补固件 刷入固件 破解相机 背景 2020年买了个小米云台相机pro,后来搬家没怎么用,放家里吃灰一年多, ...

  8. Windows掉激活或重装后激活失败

    Windows重装后激活失败 注:本文提到的解决方法仅适用于之前是正版系统,突然不能激活了(Windows未激活),或者之前是正版系统,重装后激活密钥与微软服务器同步失败导致Windows未激活.本文 ...

  9. 刷机提示图像和设备不匹配_安卓5.0升级失败如何解决 安卓5.0刷机失败解决方法介绍【教程】...

    安卓5.0升级失败怎么办?安卓5.0刷机失败急救方法?谷歌发布了适用于Nexus系列的Android 5.0系统,但是,刷安卓5.0系统时遇到system.img系统镜像找不到的错误提示是怎么回事? ...

最新文章

  1. DataSet操作数据库
  2. 大鱼吃小鱼easyx_对于一个大一计科新生,有什么代码行数在 500~1000 的程序(C 语言)可以试着写来练手?...
  3. 2021山东科技大学计算机学院,2021年3月山东科技大学计算机等级考试报名工作通知...
  4. Regionals 2014 Asia - Dhaka H 暴力
  5. 随想录(qemu的学习)
  6. forEach、for...in、for...of
  7. 王云燕-永远好奇,一生求知
  8. (转)国外优秀区块链创业公司梳理
  9. mac版本 sadptool_EZParkTools下载-智慧停车维护工具 v1.0 官方版 - 安下载
  10. GNS3 VM 的安装使用和路由器的添加
  11. Piranha web 界面LVS DR 模式配置图文详解
  12. 【六袆 - Java】订单拆单记录一
  13. Android程序员的十大转型之路
  14. Ubuntu Intel显卡驱动安装 (Ubuntu 14.04--Ubuntu 16.10 + Intel® Graphics Update Tool)
  15. DCT 变换的一些思考
  16. 使用hMailServer搭建邮件服务器(windows邮件服务器)
  17. Camera拍摄时,预览会变成绿屏
  18. 电机与matlab突然,电机与MATLAB(第2版)简介,目录书摘
  19. [二进制学习笔记]Ubuntu20.04关闭开启ASLR
  20. 什么是服务器托管?为什么要托管服务器?

热门文章

  1. 赚钱的脚步永远跟不上房价上涨的幅度~
  2. 【5G/4G】128-bit AES算法源码介绍
  3. Java泛型与类型擦除--ImportNew
  4. 白银现货行情的影响因素
  5. DBA日记:上海的RAC宕机
  6. 2008年的各个节日
  7. 达芬奇系列DSP——CCS_V5安装技术文档
  8. 股票详情接口 html5,新浪股票API接口
  9. Hive SQL 求环比同比数据
  10. Redis事务,watch命令学习