失败日志
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 存储老化或损坏(概率最高)
现象
- 写入后读取数据发生 bit-flip(无报错,但数据已损坏)
- 多在大文件或高并发 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. 硬件缓存异常 | 高 | 缓存未及时写回大文件会导致大量数据丢失或校验失败 |