Recover后升级失败,unknown volume for path
来源:互联网 发布:海南软件 编辑:程序博客网 时间:2024/06/06 12:43
有个三星的平台,发现
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/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 init15 export PATH /sbin:/system/bin16 export ANDROID_ROOT /system17 export ANDROID_DATA /data18 export EXTERNAL_STORAGE /sdcard1920 symlink /system/etc /etc2122 mkdir /sdcard23 mkdir /system24 mkdir /data25 mkdir /cache26 mkdir /sideload27 mount tmpfs tmpfs /tmp2829 chown root shell /tmp30 chmod 0775 /tmp3132 write /proc/sys/kernel/panic_on_oops 133 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/legacy11 export EMULATED_STORAGE_SOURCE /mnt/shell/emulated12 export EMULATED_STORAGE_TARGET /storage/emulated1314 # Support legacy paths15 symlink /storage/emulated/legacy /sdcard16 symlink /storage/emulated/legacy /mnt/sdcard17 symlink /storage/emulated/legacy /storage/sdcard018 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/emulated102 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, if1080 // we're given an old 'root' path "CACHE:foo", change it to1081 // "/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){+ 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; + }1091 }
这样就OK了,如果其它不是data分区的话,比如添加的其它分区,recovery也会帮你mount上,不过记得
install_package(update_package, &wipe_cache,TEMPORARY_INSTALL_FILE, true); 第四个参数设置成为true
0 0
- Recover后升级失败,unknown volume for path
- 从系统的运用进入Recover后y升级失败,unknown volume for path,困扰了2个星期了。
- glibc升级失败后的恢复
- 升级后cocos2dx项目创建失败,解决方案
- 升级后cocos2dx项目创建失败,解决方案
- Xcode升级后插件失败解决方法
- 分组后 逗号 拼接 for xml path
- Android studio升级后Local path doesn’t exist错误
- Android Studio升级后编辑local path 不存在的问题
- OFFICE2007升级后验证失败的处理办法
- 选中工程升级ADT到22后,编译失败
- google的GAN升级到V2后统计失败
- Myeclipse环境Spring版本升级后Web Server启动失败
- iPad 升级失败后重新恢复出厂设置
- ubuntu升级内核后vmware-player启动失败
- PHP 5.4升级5.6后访问SQLServer失败
- xcode升级到8.0后Qt编译失败的解决办法
- ubuntu 升级失败后的起死回升
- 宠物美容师行业有哪些优势
- shouldShowRequestPermissionRationale用法
- 单选按钮与复选按钮的相互转换
- 动态规划 钢条切割
- hdu2642-二维树状数组 单点更新 区间查询
- Recover后升级失败,unknown volume for path
- abs 与 fabs 区别
- 简单解决——使用Clipboard实现剪切板,用require引入js资源,会报错Clipboard is not defined的问题
- Android签名详解(debug和release)
- VMware安装Linux
- 工人的请愿书 Another Crisis(UVa 12186)题解
- Android 多媒体相关
- 高并发Java 四 无锁
- SQL 学习