Android OTA 升级失败

EMMC 硬件异常

Posted by LXG on July 3, 2025

失败日志

UpdateService: verifyPackage, failed: java.security.SignatureException: signature digest verification failed

系统 在 recovery 模式中校验 OTA 包签名时失败,错误是 SignatureException,意味着签名结构本身没有问题,但签名内容的摘要(digest)与 OTA 包内容不一致

分析

正确的升级包MD5:


lxg@lxg:~/code/wif/vendor$ ls -al BFSAM-1280x800-10-ota-20250703.161302.zip 
-rw-rw-r-- 1 lxg lxg 652698137  7月  3 18:07 BFSAM-1280x800-10-ota-20250703.161302.zip

lxg@lxg:~/code/wif/vendor$ md5sum BFSAM-1280x800-10-ota-20250703.161302.zip 
da41b7e10d7fad4e9c06d097d49316e4  BFSAM-1280x800-10-ota-20250703.161302.zip

HTTP下载后的MD5:


ceres-c3:/ $ ls -al  sdcard/Download/BFSAM-1280x800-10-ota-20250703.161302.zip                                                                                                                     
-rw-rw---- 1 root sdcard_rw 652698137 2025-07-04 09:48 sdcard/Download/BFSAM-1280x800-10-ota-20250703.161302.zip

ceres-c3:/ $ md5sum sdcard/Download/BFSAM-1280x800-10-ota-20250703.161302.zip                                                                                                                      
ed02b667ff75f5bfbc892843fa549d0c  sdcard/Download/BFSAM-1280x800-10-ota-20250703.161302.zip

复制后的文件MD5:


ceres-c3:/ $ ls -al  sdcard/update.zip                                                                                                                                                             
-rw-rw---- 1 root sdcard_rw 652698137 2025-07-04 09:49 sdcard/update.zip

ceres-c3:/ $ md5sum sdcard/update.zip                                                                                                                                                              
47497dd7b093e508f32bb8f0e6e85517  sdcard/update.zip

分析:文件在拷贝和下载完成后都出现了MD5不一致情况,但是文件大小是一致的

原因-eMMC 存储老化或损坏(概率最高)

现象

  1. 写入后读取数据发生 bit-flip(无报错,但数据已损坏)
  2. 多在大文件或高并发 IO 时出现

eMMC 寿命查看

【FAQ1501】 如何获取emmc的寿命信息


ceres-c3:/sys/block/mmcblk0/device $ cat life_time     
0x01 0x01

ceres-c3:/sys/block/mmcblk0/device $ cat pre_eol_info
01

读取 life_time 得到的两个值分别代表emmc type A 和 type B 两种类型的寿命值, 值1代表寿命用了0% - 10% ,其他值依次类推

读取 pre_eol_info 得到的值代表emmc内部保留块的平均寿命水平:

  • 0x01代表Normal水平
  • 0x02代表Warning水平,表示保留块已经消耗了80%
  • 0x03Urgent:保留块寿命块完了

识别emmc型号


ceres-c3:/sys/block/mmcblk0/device $ cat name
H8G4a2
ceres-c3:/sys/block/mmcblk0/device $ cat manfid
0x000090

Hynix 8GB eMMC 4.41 芯片

这是一个较老的 eMMC 芯片(8GB 容量,Hynix 制造),很可能使用了 eMMC 4.41 或 5.0 早期版本,已服役多年。这类芯片在批量消费类产品中使用广泛,但寿命有限,特别是在频繁写入/拷贝大文件时容易发生:

  • 写入后 bit-flip(位反转)
  • 写入不落盘(write cache 未 flush)
  • 随机 block 损坏导致 MD5 校验失败

dd 命令测试 emmc


# 在 /sdcard 生成 1024MB 随机测试文件
dd if=/dev/urandom of=/sdcard/sourcefile.bin bs=1M count=1024
sync

# 计算源文件 MD5
md5sum /sdcard/sourcefile.bin

# 复制文件到另一个名字,模拟拷贝过程
cp /sdcard/sourcefile.bin /sdcard/copiedfile.bin
sync

# 计算复制后的md5
md5sum /sdcard/copiedfile.bin

# 比对两个文件的MD5是否一致, 不一致说明emmc拷贝大文件时异常

实际测试


1|ceres-c3:/ $ dd if=/dev/urandom of=/sdcard/sourcefile.bin bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.0 G) copied, 21.881669 s, 47 M/s
ceres-c3:/ $ sync
ceres-c3:/ $ md5sum /sdcard/sourcefile.bin
9bfab5f3c5ee3f290334b44db185c06c  /sdcard/sourcefile.bin
ceres-c3:/ $ cp /sdcard/sourcefile.bin /sdcard/copiedfile.bin
ceres-c3:/ $ sync
ceres-c3:/ $ md5sum /sdcard/copiedfile.bin
e0d0a4273de253c66cc62e5918e0eef1  /sdcard/copiedfile.bin

可能的硬件故障

类别 可能问题描述 影响表现 诊断建议
存储芯片损坏 闪存老化、坏块、位翻转、擦写失败 写入数据不正确,数据随机损坏 用坏块检测工具检测,换芯片测试
存储控制器故障 固件 Bug、缓存管理异常、硬件故障 写入成功但数据未落盘或错误 升级固件,检查 ECC 状态,硬件检测
连接线路问题 信号线接触不良、断线、短路,PCB 走线损坏 数据传输错误,偶发写入失败 示波器检测信号完整性,检查焊点
供电和环境因素 电压不稳、过热、电磁干扰 写入失败、数据不稳定 检查电源稳压,环境温度控制,EMI 测试
硬件缓存异常 硬件缓存未正确写回、DMA 异常 写入数据与实际存储不符 查看缓存设置,降低缓存策略,复现测试

与大文件复制有关的原因

硬件问题类别 与大文件读写关联程度 说明
1. 存储芯片损坏 坏块和擦写失败在写大文件时更容易暴露,连续写入大文件会加速老化
2. 存储控制器故障 中至高 控制器缓存和固件问题在大文件写入时影响更明显,数据完整性风险增大
3. 连接线路问题 信号传输问题在大数据量时易累积错误,导致写入失败或数据损坏
4. 供电和环境因素 长时间写入大文件时电压波动和温度升高影响更大
5. 硬件缓存异常 缓存未及时写回大文件会导致大量数据丢失或校验失败