zoukankan      html  css  js  c++  java
  • 高通平台如何避免误入FFBM模式

            前面两篇博客分别介绍了通过fastbootQFIL工具退出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=1 bs=128
    ffbm-00                                                         boot-factory                                                    1+0 records in
    1+0 records out
    128 bytes transferred in 0.004 secs (32000 bytes/sec)
    msm8998:/ # dmesg | grep -iE "ffbm|androidboot"
    [    0.000000] Kernel command line: rcupdate.rcu_expedited=1 console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc1b0000 androidboot.hardware=qcom androidboot.veritymode=enforcing androidboot.verifiedbootstate=orange androidboot.keymaster=1 androidboot.bootdevice=1da4000.ufshc androidboot.serialno=25f47d23 androidboot.mode=ffbm-00 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=1 console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc1b0000 androidboot.hardware=qcom androidboot.veritymode=enforcing androidboot.verifiedbootstate=orange androidboot.keymaster=1 androidboot.bootdevice=1da4000.ufshc androidboot.serialno=25f47d23 androidboot.mode=ffbm-00 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)=0 
    [ 1.869366] init: ffbm mode, not start class main
  • 相关阅读:
    log P1242 新汉诺塔
    Spring学习笔记
    spring之BeanFactory
    1.3.7、CDH 搭建Hadoop在安装之前(端口---第三方组件使用的端口)
    1.3.5、CDH 搭建Hadoop在安装之前(端口---Cloudera Search使用的端口)
    1.3.3、CDH 搭建Hadoop在安装之前(端口---CDH组件使用的端口)
    1.3.4、CDH 搭建Hadoop在安装之前(端口---Impala使用的端口)
    1.3.2、CDH 搭建Hadoop在安装之前(端口---Cloudera Navigator加密使用的端口)
    1.3、CDH 搭建Hadoop在安装之前(端口)
    1.3.1、CDH 搭建Hadoop在安装之前(端口---Cloudera Manager和Cloudera Navigator使用的端口)
  • 原文地址:https://www.cnblogs.com/we-hjb/p/9774847.html
Copyright © 2011-2022 走看看