我是负责公司OTA升级这一块的,上层搞定了,能从服务器上下载下来update.zip包,但是进入recovery之后,会升级失败,提示在下面,我插上了SD卡的,从recovery进去,点击从SD卡升级,升级会成功,但是从我的运用下载,就不行,下载的包是正确的,因为我升级失败之后,手动点进入recovery选项升级成功。
提示这个
I:no boot messages
I:Got arguments from /cache/recovery/command
locale is [zh_CN]
can't open /dev/tty0: No such file or directory
framebuffer: fd 3 (480 x 854)
ioctl(): blank: Invalid argument
ioctl(): blank: Invalid argument
installing_text: zh_CN (240 x 38 @ 1818)
erasing_text: zh_CN (128 x 38 @ 1521)
no_command_text: zh_CN (92 x 38 @ 1521)
error_text: zh_CN (98 x 38 @ 1521)
Command: "/sbin/recovery" "--update_package=/storage/sdcard0/update.zip" "--locale=zh_CN"
update_package = /storage/sdcard0/update.zip
I:Finding update package...
I:Update location: /storage/sdcard0/update.zip
E:unknown volume for path [/storage/sdcard0/update.zip] //这个是从Root.cpp下的ensure_patch_mounted的方法里面判断volume_for_path(path)的返回值为空导致的
E:Can't mount /storage/sdcard0/update.zip //这个路径可以从cmd里面看到是有的
No SD-Card. //已经插上了SD卡。换了3张SD卡也不行~!
Installation aborted.
提示这个
I:no boot messages
I:Got arguments from /cache/recovery/command
locale is [zh_CN]
can't open /dev/tty0: No such file or directory
framebuffer: fd 3 (480 x 854)
ioctl(): blank: Invalid argument
ioctl(): blank: Invalid argument
installing_text: zh_CN (240 x 38 @ 1818)
erasing_text: zh_CN (128 x 38 @ 1521)
no_command_text: zh_CN (92 x 38 @ 1521)
error_text: zh_CN (98 x 38 @ 1521)
Command: "/sbin/recovery" "--update_package=/storage/sdcard0/update.zip" "--locale=zh_CN"
update_package = /storage/sdcard0/update.zip
I:Finding update package...
I:Update location: /storage/sdcard0/update.zip
E:unknown volume for path [/storage/sdcard0/update.zip] //这个是从Root.cpp下的ensure_patch_mounted的方法里面判断volume_for_path(path)的返回值为空导致的
E:Can't mount /storage/sdcard0/update.zip //这个路径可以从cmd里面看到是有的
No SD-Card. //已经插上了SD卡。换了3张SD卡也不行~!
Installation aborted.
这个问题在2.3和 4.2上面都不行,只有在4.0上可以。不知道原因啊,有人解决过这类问题吗?
-----------------------------解决方案如下多增加几个else if 语句 就可以了
if (update_package) { // For backwards compatibility on the cache partition only, if // we're given an old 'root' path "CACHE:foo", change it to // "/cache/foo". if (strncmp(update_package, "CACHE:", 6) == 0) { int len = strlen(update_package) + 10; char* modified_path = (char*)malloc(len); strlcpy(modified_path, "/cache/", len); strlcat(modified_path, update_package+6, len); printf("(replacing path \"%s\" with \"%s\")\n", update_package, modified_path); update_package = modified_path; }else if (strncmp(update_package, "/mnt/sdcard/", 12) == 0) { int len = strlen(update_package) + 12; char* modified_path = (char*)malloc(len); strlcpy(modified_path, "/sdcard/", len); strlcat(modified_path, update_package+12, len); printf("(replacing path \"%s\" with \"%s\")\n", update_package, modified_path); update_package = modified_path; }else if(strncmp(update_package, "/storage/sdcard0/", 17) == 0){ int len = strlen(update_package) + 17; char* modified_path = (char*)malloc(len); strlcpy(modified_path, "/sdcard/", len); strlcat(modified_path, update_package+17, len); printf("(replacing path \"%s\" with \"%s\")\n", update_package, modified_path); update_package = modified_path; } }