Recover后升级失败,unknown volume for path
有个三星的平台,发现
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相关推荐
- 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 ...
- oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...
升级失败后,数据库降级方案(flashback database) 环境:Oracle 11.2.0.1 rac on redhat 5.8 Flashback database 准备工作 查看是否f ...
- 苹果6s升级后显示无服务器,iphone6s升级失败变砖的解决方法【图文】
自从ios10正式版推送出来后,有着苹果手机的小伙伴就在考虑要不要升级系统.这不,有的朋友就把iphone6s升级ios10正式版,但是给升级失败,不知道如何解决?今天,小编就给大家带来 iPhone ...
- Centos7 -- glibc 升级失败、意外删除、故意删除后的处理方法
第一部分:测试(如果不是想测试效果,可以直接跳到第三部分) 鉴于不久前 glibc-2.29 升级失败导致一系列的工具无法正常使用,'' 本着研究精神的我决定删除 glibc及其库文件 ,测试影响范围 ...
- 荣耀升级android版本升级失败,王者荣耀安装包升级失败了可能发生模块错误请您重启手机后再打开游戏试试_游戏吧...
王者荣耀今天进行了更新,有玩家出现了安装包升级失败的问题,想必大家都很想知道怎么解决吧.下面游戏吧小编就为各位玩家带来了王者荣耀安装包的升级失败解决方法. 安装失败解决方法 玩家尝试重启手机再次更新, ...
- 如何在映像更改后升级docker容器
本文翻译自:How to upgrade docker container after its image changed Let's say I have pulled the official m ...
- 小米摄像机升级失败,小米摄像机黄灯常亮修复,全网最硬核修复
小米摄像机升级失败,小米摄像机黄灯常亮修复,全网最硬核修复 背景 刷机方法 准备 相机拆机 修补固件 刷入固件 破解相机 背景 2020年买了个小米云台相机pro,后来搬家没怎么用,放家里吃灰一年多, ...
- Windows掉激活或重装后激活失败
Windows重装后激活失败 注:本文提到的解决方法仅适用于之前是正版系统,突然不能激活了(Windows未激活),或者之前是正版系统,重装后激活密钥与微软服务器同步失败导致Windows未激活.本文 ...
- 刷机提示图像和设备不匹配_安卓5.0升级失败如何解决 安卓5.0刷机失败解决方法介绍【教程】...
安卓5.0升级失败怎么办?安卓5.0刷机失败急救方法?谷歌发布了适用于Nexus系列的Android 5.0系统,但是,刷安卓5.0系统时遇到system.img系统镜像找不到的错误提示是怎么回事? ...
最新文章
- DataSet操作数据库
- 大鱼吃小鱼easyx_对于一个大一计科新生,有什么代码行数在 500~1000 的程序(C 语言)可以试着写来练手?...
- 2021山东科技大学计算机学院,2021年3月山东科技大学计算机等级考试报名工作通知...
- Regionals 2014 Asia - Dhaka H 暴力
- 随想录(qemu的学习)
- forEach、for...in、for...of
- 王云燕-永远好奇,一生求知
- (转)国外优秀区块链创业公司梳理
- mac版本 sadptool_EZParkTools下载-智慧停车维护工具 v1.0 官方版 - 安下载
- GNS3 VM 的安装使用和路由器的添加
- Piranha web 界面LVS DR 模式配置图文详解
- 【六袆 - Java】订单拆单记录一
- Android程序员的十大转型之路
- Ubuntu Intel显卡驱动安装 (Ubuntu 14.04--Ubuntu 16.10 + Intel® Graphics Update Tool)
- DCT 变换的一些思考
- 使用hMailServer搭建邮件服务器(windows邮件服务器)
- Camera拍摄时,预览会变成绿屏
- 电机与matlab突然,电机与MATLAB(第2版)简介,目录书摘
- [二进制学习笔记]Ubuntu20.04关闭开启ASLR
- 什么是服务器托管?为什么要托管服务器?