最近做了一个相差时间较久的ota升级包,在升级时出现比较奇怪的现象:
升级包A,下载差分包,升级提示错误
再升级包A,下载差分包,升级成功
再升级包A,下载差分包,升级提示错误
再升级包A,下载差分包,升级成功
目前正在分析中,先记录问题,错误log如下:
loading /cache/recovery/1336c19e9105f5969aabce42a536a875bda7ac75/6f53d98c8004def05b458d7fecdfe9d70a406547
failed to verify blocks (expected 11e05f674731b55707078f22ee4ba83e0be19c93, read a5b5daaae4f7a440737c1cc7335625e66bb699f0)
stat "/cache/recovery/1336c19e9105f5969aabce42a536a875bda7ac75/11e05f674731b55707078f22ee4ba83e0be19c93" failed: No such file or directory
partition has unexpected contents
failed to read blocks for diff
failed to execute command [bsdiff 46245002 1524 xxxxxxxxxxxx]

解决方案 »

  1.   

    错误log和升级成功对比
      

  2.   

    刚好昨天也遇到这个问题,我的这边是必现升级失败,报的错误一模一样,怀疑是打包的target_file有点问题,还在验证。楼主解决了麻烦给个分析过程,感谢
      

  3.   

    确认是因为target_file的问题导致,使用原生的命令生成的target_file来制作ota包,可以升级成功了。。
      

  4.   

    确认是因为target_file的问题导致,使用原生的命令生成的target_file来制作ota包,可以升级成功了。。使用原生的命令生成的target_file来成,是指什么,你之前用什么命令生成的?
      

  5.   

    请问原生的命令生成target_file是什么,谢谢
      

  6.   

    确认是因为target_file的问题导致,使用原生的命令生成的target_file来制作ota包,可以升级成功了。。这位大神请问是什么原生命令,我也碰到同样的问题OTA差分包升级不成功
      

  7.   

    确认是因为target_file的问题导致,使用原生的命令生成的target_file来制作ota包,可以升级成功了。。使用原生的命令生成的target_file来成,是指什么,你之前用什么命令生成的?之前是odm厂商的编译打包脚本中加的make otapackage,后来屏蔽了这部分,在main.mk中使用BUILT_TARGET_FILES_PACKAGE生成,制作升级包就好了。
      

  8.   

    确认是因为target_file的问题导致,使用原生的命令生成的target_file来制作ota包,可以升级成功了。。使用原生的命令生成的target_file来成,是指什么,你之前用什么命令生成的?之前是odm厂商的编译打包脚本中加的make otapackage,后来屏蔽了这部分,在main.mk中使用BUILT_TARGET_FILES_PACKAGE生成,制作升级包就好了。
    根本原因也不是这个,是因为生成target_file包的过程中system分区中会增加install-recovery.sh相关文件用于ota升级时更新recovery,这个动作在out目录生成system.img之后进行,导致target_file包中的system.img与out目录下的system.img不一致,即刷机的img和做ota包的img不一致导致升级失败。
    解决办法是在Makefile中增加$(hide) ./build/tools/releasetools/replace_img_from_target_files.py $@ $(PRODUCT_OUT),这个处理动作和脚本在mtk的源码中有,大家可以看下。
      

  9.   

    新手,正在做升级,如何实现OTA的