1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高通 MSM8K GPT异常导致无法开机问题分析

高通 MSM8K GPT异常导致无法开机问题分析

时间:2018-08-26 14:36:04

相关推荐

高通 MSM8K GPT异常导致无法开机问题分析

问题分析步骤如下:

一、

MSM8916平台gpt概率性问题:使用QPST emmc software download工具下载完软件后,无法开机。如下图:

log分析是userdata分区没有成功mount。

二、

adb shell ls /dev/block 显示,开机失败的机器,比正常开机的机器少一个分区:mmcblk0p28 ,这个分区就是userdata所在分区!

参考本人的转并补充内容的另一篇文章《add_partition 函数学习》

可知,/dev/block/mmcblk0pxx 这些分区是根据gpt内容而创建,因此怀疑gpt内容错误,导致user分区没有被成功创建。

root@zxx/ # cd dev/block/

root@zxx:/dev/block # ls

mmcblk0

mmcblk0p1

mmcblk0p10

mmcblk0p11

mmcblk0p12

mmcblk0p13

mmcblk0p14

mmcblk0p15

mmcblk0p16

mmcblk0p17

mmcblk0p18

mmcblk0p19

mmcblk0p2

mmcblk0p20

mmcblk0p21

mmcblk0p22

mmcblk0p23

mmcblk0p24

mmcblk0p25

mmcblk0p26

mmcblk0p27

// mmcblk0p28 正常开机的有p28分区

mmcblk0p3

mmcblk0p4

mmcblk0p5

mmcblk0p6

mmcblk0p7

mmcblk0p8

mmcblk0p9

mmcblk0rpmb

三、

使用dd命令,从mmc设备mmcblk0中将gpt数据读取出来,正常开机、和无法开机的都读取一份。

四、 使用二进制比较工具hexcmp对比两份gpt的内容,主要异常有两处,如下两图:

从图中可以可以看到gpt headergpt header CRC 及 partition array CRC不同,First LBA、Last LBA不同。

如下图:

下图是partiton array 内容的比较,从图中可以看到userdata分区的end lba不同。

无法开机的gpt内容与默认build出来的gpt_main0.bin比较 ,发现userdata分区的end lba竟然和build出来的是相等的。

userdata分区是整个emmc的最后一分区,不同的emmc size最后一个分区的end lba是build阶段无法知道的,因此build的只是一个默认值。

必须由下载工具自动更新该lba值。

四、

从上面的分析可以知道QPST emmc software download 工具没有更新userdata end lba,或者更新失败。

那么,如何证明是工具没有写这个lba?还是写失败?或者写的是错误的内容?

使用winhex工具,从无法开机的gpt内容中将gpt header 和 gpt partition arrary 的内容分别截取出来。

使用AS-CRC32.EXE 工具,分别对gpt header 和 gpt partition array 的内容计算出crc。工具如下图:

通过对比crc,计算机出的crc的无法开机的gpt header中的两个crc都是相等的。

因此,可以证明,gpt中的userdata end 并非是写入失败,或者没有写入。

而是QPST emmc software download 工具定稿的错误的内容。

结论:由上分析,可以证明是QPST emmc software download 工具的问题。

五、

解决方案建议,

更新QPST的软件版本,最新版本支持一个新的使用firehose协议的下载工具:QFIL,

代替QPST emmc software download ,QFIL更稳定,更好用。如下图:

参考:

80-N7350-1_B_GUID_Partition_Tables_Programming.pdf

UEFI_2_4_Errata_B.pdf

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。