高通平台如何避免误入FFBM模式
前面两篇博客分别介绍了通过fastboot和QFIL工具退出FFBM模式的方法。虽然售后的同学可以这么指导用户做恢复,但步骤多操作也麻烦,且属于事后处理,如果大面积高概率地出现,会严重影响用户体验。这个问题是高通引入FFBM模式导致的,采用高通芯片方案的Android设备都可能会出现。Google一下,友商Pico的VR一体机用户在官方论坛反映《进入FFBM模式怎么退出》,一个多月前的帖子目前还没有回应。这里必须为我们售后的同学点赞,客户反馈问题24小时内就回应并解决了。Android手机主要是联想的旗舰机ZUK出现过,《The phone is blocking in mode FFBM》、《stuck in "ffbm" diagnostics》、《HELP. Test Mode / FFBM Mode》。看来必须从根上接决这个问题,否则售后同学的压力会很大,用户也会很烦。
进入FFBM模式是因为misc分区被修改了,谁修改的一时也弄不清楚。从售后同学那里了解到,用户并没有做root或unlock等特殊操作。考虑到可能有多个修改的源,没法都给堵上,所以打算从后端入手,修改init直接过滤掉该模式,无论misc分区被修改成什么样,都直接启动到Android系统,而不进入FFBM。修改的代码很少,如下。

修改代码后,执行命令make systemimage -j8编译生成system.img,通过fastboot将新生成的system.img烧录到处于FFBM模式下的故障机器里,并重启。奇迹出现了,果然正常进入了Android系统,如下图所示。

可以看到,Kernel是老的,Android是新的。再查看misc分区的内容及dmesg,如下图所示。

通过dd命令查看misc分区,内容为ffbm-00,Kernel command line有androidboot.mode=ffbm-00的配置,在init中直接忽略了androidboot.mode的配置,Android系统正常启动,相关log如下。
msm8998:/ # dd if=/dev/block/bootdevice/by-name/misc count= bs=
ffbm- boot-factory + records in
+ records out
bytes transferred in 0.004 secs ( bytes/sec)
msm8998:/ # dmesg | grep -iE "ffbm|androidboot"
[ 0.000000] Kernel command line: rcupdate.rcu_expedited= console=ttyMSM0,,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc1b0000 androidboot.hardware=qcom androidboot.veritymode=enforcing androidboot.verifiedbootstate=orange androidboot.keymaster= androidboot.bootdevice=1da4000.ufshc androidboot.serialno=25f47d23 androidboot.mode=ffbm- quite dvt androidboot.baseband=apq skip_initramfs rootwait ro init=/init root=/dev/sda6
[ 1.172876] init: Ignore androidboot.mode!
改动之前的log如下,init会根据Kernel command line的配置进入ffbm模式,fs_mgr不挂载userdatafs_mgr,并且不启动Android。
[ 0.000000] Kernel command line: rcupdate.rcu_expedited= console=ttyMSM0,,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc1b0000 androidboot.hardware=qcom androidboot.veritymode=enforcing androidboot.verifiedbootstate=orange androidboot.keymaster= androidboot.bootdevice=1da4000.ufshc androidboot.serialno=25f47d23 androidboot.mode=ffbm- quite dvt androidboot.baseband=apq skip_initramfs rootwait ro init=/init root=/dev/sda6
[ 1.355482] init: Booting into ffbm mode
[ 1.849985] fs_mgr: ffbm mode,skip mount userdatafs_mgr: __mount(source=/dev/block/bootdevice/by-name/modem_a,target=/firmware,type=vfat)=
[ 1.869366] init: ffbm mode, not start class main
高通平台如何避免误入FFBM模式的更多相关文章
- Android高通平台调试Camera驱动全纪录
项目比较紧,3周内把一个带有外置ISP,MIPI数据通信,800万像素的camera从无驱动到实现客户全部需求. 1日 搭平台,建环境,编译内核,烧写代码. 我是一直在Window下搭个虚拟机登服务器 ...
- 高通平台启动log概述(PBL log、sbl1 log、kernel log)【转】
本文转自:https://blog.csdn.net/RadianceBlau/article/details/78416776?utm_source=blogxgwz9 高通平台启动log概述(PB ...
- 高通平台读写nv总结
一,引言 1. 什么是NV 高通平台的NV,保存了系统运行过程中各个模块可能用到的一些参数值,它是以单个文件的形式保存在EFS中,但用户是不能随意访问的,只能通过QXDM来进行读 ...
- 高通平台读写nv总结【转】
本文转载自:https://blog.csdn.net/suofeng12345/article/details/52713993 一,引言 1. 什么是NV 高通平台的NV,保 ...
- 高通平台点亮LCD个人总结
点击打开链接 高通平台LCD模块大致分为两部分:KERNEL和LK.在进行点屏之前,应该认真查看LCD原理图,弄清楚LCD亮屏需要满足的条件和上电时序,同时可以跟LCD IC原厂拿到初始化代码. 首先 ...
- 高通平台手机开发之LCD
4.1. LCD 参考文档: 1) 80-NA157-174_E_DSI_Programing_Guide_B-Family_Android_Devices.pdf 2) 80-NN766-1_A_L ...
- 高通平台获取secure boot,串号等状态
adb shell下 运行./system/bin/r address 其中address对应各个flag参数的地址,具体如下: 无法打开/dev/mem节点(没有该节点),这时只需在内核配置中选上C ...
- 高通平台如何使用QPST抓DUMP
一 :确认手机状态 手机系统死机白屏后,使用USB线 连接手机和计算机.打开计算机设备管理器 ,当其中与手机相关的端口只有DIAG 口 项(9006端口)时,表明手机处于DUMP 模式,可以抓DUMP ...
- 【shell】分享高通平台刷版本简单的一个shell脚本
#!/bin/shadb wait-for-deviceadb reboot bootloaderecho "start download"wait 5sudo fastboot ...
随机推荐
- html5中的indexDB
1.关系型数据库和非关系型数据库 一致性: 事务完成时,必须让所有的数据具有一致的状态,例如要写入100个数据,前99个成功了,结果第100个不合法,此时事务会回滚到最初状态.这样保证事务结束和开始时 ...
- 为什么VUE注册组件命名时不能用大写的?
这段时间一直在弄vue,当然也遇到很多问题,这里就来跟大家分享一些注册自定义模板组件的心得 首先"VUE注册组件命名时不能用大写"其实这句话是不对的,但我们很多人开始都觉得是对的, ...
- springcloud情操陶冶-springcloud config server(三)
承接前文springcloud情操陶冶-springcloud config server(二),本文就不讲述server了,就简单阐述下client的应用 前话 config server在引入的时 ...
- JavaScript 原型的深入指南
摘要: 理解prototype. 原文:JavaScript 原型的深入指南 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 不学会怎么处理对象,你在 JavaScript 道路就就走 ...
- 度分秒转换十进制度 之Excel实现
我们都知道,1°=60′,1′=60″,1°=3600″.那么,轻而易举容易计算:112°18′37.6″=112+18/60+37.6/3600≍112.3104444°这当然是有参考价值的,比如爬 ...
- ionic cordova build android error: commamd failed with exit code eacces
问题: 电脑的gradle版本为Gradle 5.0,然而 因为 添加的android 平台为6.3.0 gradle 是 4.1版本 电脑已存在 gradle的情况下,add platform 成功 ...
- 基于BootstarbTable实现加载更多的方式
在工作中,我们有时候会遇到一些需求实现每次在页面上显示的数据每次都是通过请求数据库端来实现,在不通过上一页,下一页的方式来实现我们要展示的数据,通过js请求每次加载10条或者任意数量的数据. 代码展示 ...
- Storm入门(十)Twitter Storm: Transactional Topolgoy简介
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/736/twitter-stor ...
- Java Thread.join的作用和原理
很多人对Thread.join的作用以及实现了解得很少,毕竟这个api我们很少使用.这篇文章仍然会结合使用及原理进行深度分析 内容导航 Thread.join的作用 Thread.join的实现原理 ...
- Java引用详解-StrongReference SoftReference WeakReference PhantomReference
1 Java引用介绍 Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为: 强引用 > 软引用 > 弱引用 > 虚引用 ⑴强引用(StrongR ...