最近客户反馈,编译32位的android系统,在recovery中执行恢复出厂设置的时候失败了,失败的打印提升信息如下。
Formatting /data...
[    2.191404] E:get_file_size: invalid size -1289764864 for /dev/block/data
[    2.207430] Data wipe failed.
根据打印提示,意识是说获取data分区的size是无效的。我们来看看这个函数get_file_size bootable/recovery/roots.cpp
static ssize_t get_file_size(int fd, uint64_t reserve_len) { struct stat buf; int ret = fstat(fd, &buf); if (ret) return 0; ssize_t computed_size; if (S_ISREG(buf.st_mode)) { computed_size = buf.st_size - reserve_len; } else if (S_ISBLK(buf.st_mode)) { computed_size = get_block_device_size(fd) - reserve_len; } else { computed_size = 0; } return computed_size; }
这个ssize_t是跟系统的位数相关的,当时32位的系统时,ssize_t的大小为U32, 那么此时能够表示的最大的长度为2^32-1=4294967295=4095.99M=4G 也就是说,当时32位的系统时,ssize_t能够保存的最大值为4G,当data分区的大小超过4G的时候, ssize_t就无法正常保存的获取的data分区的大小,那么也就会出错了。
而实际项目上面给data分区的大小为11G+, 那么自然就会出错了,我们把使用ssize_t的地方换成uint64_t即可 patch如下:
diff --git a/roots.cpp b/roots.cpp
index 25d9d7e..5197ccb 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -182,12 +182,12 @@ static int exec_cmd(const char* path, char* const argv[]) {return WEXITSTATUS(status);}-static ssize_t get_file_size(int fd, uint64_t reserve_len) {
+static uint64_t get_file_size(int fd, uint64_t reserve_len) {struct stat buf;int ret = fstat(fd, &buf);if (ret) return 0;-  ssize_t computed_size;
+  uint64_t computed_size;if (S_ISREG(buf.st_mode)) {computed_size = buf.st_size - reserve_len;} else if (S_ISBLK(buf.st_mode)) {
@@ -234,7 +234,7 @@ int format_volume(const char* volume, const char* directory) {close(fd);}-        ssize_t length = 0;
+        uint64_t length = 0;if (v->length != 0) {length = v->length;} else if (v->key_loc != NULL && strcmp(v->key_loc, "footer") == 0) {

到此,问题解决。

转载于:https://www.cnblogs.com/codeking100/p/10339195.html

recovery 恢复出厂设置失败Data wipe failed相关推荐

  1. 手机恢复出厂设置命令_华为手机双清和恢复出厂设置区别 recovery恢复出厂设置步骤...

    手机双清恢复出厂设置之后会不会对手机有影响呢?相信有很多人都想知道这个问题,尤其是经常使用恢复出厂设置的人.恢复出厂设置是不会对手机有任何影响,但是双清的影响就很大了,那么华为手机双清和恢复出厂设置区 ...

  2. 戴尔外星人m16r1国行中文原厂Windows11系统自带Support Assist OS Recovery恢复出厂设置

    戴尔外星人m16r1国行中文原厂系统自带Support Assist OS Recovery恢复出厂设置 文件地址https://pan.baidu.com/s/1Pq09oDzmFI6hXVdf8V ...

  3. Android8.0恢复出厂设置失败-BroadcastQueue: Background execution not allowed

    Android7.0恢复出厂设置调用下面的代码可正常恢复出厂 Intent intent = new Intent(Intent. ACTION_MASTER_CLEAR);intent.addFla ...

  4. android刷机恢复出厂设置吗,安卓手机怎么设置Recovery恢复出厂?

    很多时候我们的手机会出现各个问题,可能只有刷机恢复出厂设置才能使手机正常使用,那么怎么进行Recovery恢复出厂设置呢?很多小白肯定就一点也不懂了,那么不用担心,下面奇兔刷机小编就安卓手机Recov ...

  5. tplink路由器dns服务器未响应,小米路由器AC2100恢复出厂设置的方法

    要把已经设置好的小米路由器AC2100恢复出厂设置重新设置,我该怎么办? 路由器恢复出厂设置一般有三种方法 APP恢复出厂设置 手动恢复出厂设置 浏览器恢复出厂设置 这里就介绍最简单快捷的手动恢复出 ...

  6. 联想小新一键恢复小孔_联想小新电脑一键恢复出厂设置

    有些时候联想电脑需要恢复出厂设置,那么的呢?下面是小编收集整理的,希望对大家有帮助~~联想电脑恢复出厂设置的方法操作方法01打开电脑电源开关,迅速连续敲击键盘的[F2]按键,启动[拯救系统]→[一键恢 ...

  7. 华为畅享6怎么找回计算机,华为荣耀畅玩6双清解屏幕锁格机恢复出厂设置方法...

    华为荣耀畅玩6双清解屏幕锁格机恢复出厂设置方法.华为荣耀畅玩6如何双清?这是不少的华为荣耀畅玩6畅玩6网友想知道的,因为想格机解锁恢复出厂设置的朋友们都想使用这个功能给手机重置一下,大家都知道双清其实 ...

  8. Android 恢复出厂设置(recovery)

    Android 恢复出厂设置基本流程 (1)遥控器/按键板后门键触发,或者应用里面从系统设置里面恢复出厂选项也可触发: // 后面以系统设置的应用触发为例 (2)选择恢复出厂设置之后,就会发送广播&q ...

  9. Android7.x 通过Recovery保留特定文件实现恢复出厂设置后保留系统语言设置

    Android7.x 通过Recovery保留特定文件实现恢复出厂设置后保留系统语言设置 最近有一个需求,要求在恢复出厂设置之后不还原语言设置,由于我们知道语言设置可以在Properties Syst ...

  10. Android 9.0 recovery 菜单页跳过弹窗自动 WIPE_DATA(恢复出厂设置)

    1.概述 在9.0的系统产品开发中,对系统原生的recovery功能也是系统中比较重要的一个部分,所以对于恢复出厂设置在开发中也是常有的功能 而在一款产品的开发过程中,由于在recovery界面需要手 ...

最新文章

  1. 11.11大促来袭,京东如何保障云安全?
  2. ARM NEON 编程简单入门1
  3. Activiti工作流从入门到入土:入门实例
  4. make时候说找不到makefile_优秀自律的句子:找不到理由继续的时候,就找个理由重头来过吧...
  5. 巴菲特将退休并把公司交给网红接管?被一封信恶搞...
  6. c语言中变量可以用x1表示没,你必须知道的495个C语言问题 读书笔记
  7. windows环境下安装TensorFlow(亲测)
  8. windows环境elasticsearch安装IK分词器
  9. matlab计算边界层厚度,边界层厚度.PPT
  10. A Frustratingly Easy Approach for Joint Entity and Relation Extraction(陈丹琦2020)
  11. Oracle 11gR2 RAC 修改监听端口号
  12. java下的Http多线程下载与断点续传分析【转自酷勤网】
  13. MediaWiki安装插件Semantic MediaWIKI + PageForms
  14. java 方法详解(有参无参,有返回值无返回值) 局部变量
  15. android sdcard下创建文件,android创建以及使用SDcard镜像文件
  16. 38、Power Query-背后的贤内助M语言
  17. python去掉字符串中的特殊字符和数字
  18. Linux SD卡/SDIO驱动开发-dw_mci_probe
  19. oracle数据库常用操作
  20. one 主格 复数 宾格_主格、宾格、名词所有格

热门文章

  1. NVIDIA Studio和Game Ready区别
  2. 宝塔面板搭建方维直播图文教程
  3. 2019年江苏卷数学高考真题Word版含答案解析
  4. Vray材质——金属材质
  5. 区间对比_预算10-15万元区间 国内在售街车综合实力对比
  6. html炫酷在线,10款基于HTML5/CSS3的炫酷动画
  7. 抖音小程序Tiktok开发教程之 基础组件 04 icon 图标组件
  8. 毕业设计——阶段性成果展示
  9. 简单谈谈MySQL的两阶段提交
  10. Python函数定义的高级用法