问题分析过程如下面:

一、

MSM8916台gpt概率问题:采用QPST emmc software download下载软件工具后,无法开机。例如下面的附图:

log分析是userdata分区未成功mount 。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRnlib24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

二、

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的内容,主要异常有两处,例如以下两图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRnlib24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

从图中能够能够看到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值。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRnlib24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

四、

从上面的分析能够知道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更稳定,更好用。例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRnlib24=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

參考:

80-N7350-1_B_GUID_Partition_Tables_Programming.pdf

UEFI_2_4_Errata_B.pdf

版权声明:本文博主原创文章,博客,未经同意不得转载。

高通公司 MSM8K GPT异常原因分析无法开机的问题的更多相关文章

  1. 修改List报ConcurrentModificationException异常原因分析

    使用迭代器遍历List的时候修改List报ConcurrentModificationException异常原因分析 在使用Iterator来迭代遍历List的时候如果修改该List对象,则会报jav ...

  2. 泛泰A820L (高通公司MSM8660 cpu) 3.4内核CM10.1(Android 4.2.2) 测试版第二版

    欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...

  3. Cron连接正常工作5次后异常原因分析

    目录 目录 1 问题描述 1 分析定位 1 解决方法 2 附1:Cron工作流 3 附2:SIGPIPE发生的位置 3 如果一个shell命令的"$?"值为141,则它是收到了SI ...

  4. 使用迭代器遍历List的时候修改List报ConcurrentModificationException异常原因分析

    在使用Iterator来迭代遍历List的时候如果修改该List对象,则会报java.util.ConcurrentModificationException异常,下面看一个例子演示: package ...

  5. Nubia Z5S(高通公司MSM8974) QHSUSB_BULK砖的方法节省模式(随着win7在恢复recovery分区案例)

    Nubia Z5S在某些异常情况或按组合键进入QHSUSB_BULK状态, 这种模式的现象, 猜想windows(实例win7)即使在数据线, 它会出现在计算机n载,甚至会提示要格式化某些分区(这里要 ...

  6. 泛泰A860(高通公司8064 cpu 1080p) 拂4.4中国民营recovery TWRP2.7.1.2文本(通过刷第三版)

    专业第三方开发团队 VegaDevTeam  (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo crazyi(天下无雪 ...

  7. 高通与MTK瓜分天下?手机处理器品牌分析

    http://mobile.pconline.com.cn/337/3379352.html [PConline 杂谈]如果你向朋友请教买一台怎样的台式机或者笔记本的话,很多时候那朋友会根据你对电脑的 ...

  8. 被高通收购的CSR是一家怎样的公司

    CSR plc(LSE:CSR),原名剑桥硅晶无线电或英商剑桥无线电(英语:Cambridge Silicon Radio),是一间创立于 1998年的跨国无厂半导体公司,总部位于英国剑桥.早期技术主 ...

  9. 高通安卓调试LCD几方面总结

    来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...

随机推荐

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(一) : Caching Application Block (初级) 本篇文章具体官方解释请参照以下链接: h ...

  2. BZOJ 3172([Tjoi2013]单词-后缀数组第一题+RMQ)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 268   Solved: 145 [ Submit][ St ...

  3. C#依据进程名称获取进程的句柄?

    C#依据进程名称获取进程的句柄或C#怎样获取其它进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] ...

  4. android学习七(创建自己定义控件)

    前面学习的是android的基本控件和布局的使用,可是主要的控件和布局有时候并不能实现复杂的布局.我们来看下各种控件和布局的关系. 可见全部的控件都是直接或者间接的继承自View的,全部的布局都是直接 ...

  5. lock订单号

    常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...

  6. Codeforces Round #256 (Div. 2) A. Rewards

    A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  7. lua学习笔记11:lua中的小技巧

    lua中的小技巧,即基础lua语言本身的特种,进行一个些简化的操作 一. 巧用or x = x or v 等价于: if not x then x = v end 假设x为nil或false,就给他赋 ...

  8. 树莓派安装 dig命令

     apt-get install  dnsutils

  9. 【原创】ZOJ_1649 Rescue 解题报告

    Rescue Time Limit: 2 Seconds      Memory Limit: 65536 KB Angel was caught by the MOLIGPY! He was put ...

  10. 使用BackgroundWorker组件进行异步操作编程

    本文介绍了BackgroundWorker组件的功能及在基于事件的异步操作编程中的应用,并对组件的实现原理进行简述.在应用程序中,可能会遇到一些执行耗时的功能操作,比如数据下载.复杂计算及数据库事务等 ...