下载软件版本后概率性出现某些单体必现无声


【问题现象】

测试及工厂多次报出手机开机后无声的问题,并且重启无效,并且伴随有开机缓慢

对于复现异常的手机,100%无声,从测试及工厂处收集到的异常手机约有6台

无规律出现,测试或工厂生产时,均有报出 

 

【原因分析】

1,分析log,发现很多声卡加载错误

10-11 07:29:18.556   500   656 D AudioDaemon: Opening sound card state : /proc/asound/card---/state
10-11 07:29:18.556   500   656 E AudioDaemon: Open /proc/asound/card---/state failed : No such file or directory
10-11 07:29:18.556   500   656 V AudioDaemon: bool android::AudioDaemon::getStateFDs(std::__1::vector<std::__1::pair<int, int> >&): 0 sound cards detected
10-11 07:29:18.557   500   656 E AudioDaemon: Sleeping for 100 ms
10-11 07:29:18.657   500   656 D AudioDaemon: Opening sound card state : /proc/asound/card---/state
10-11 07:29:18.658   500   656 E AudioDaemon: Open /proc/asound/card---/state failed : No such file or directory
10-11 07:29:18.658   500   656 V AudioDaemon: bool android::AudioDaemon::getStateFDs(std::__1::vector<std::__1::pair<int, int> >&): 0 sound cards detected
10-11 07:29:18.658   500   656 E AudioDaemon: Sleeping for 100 ms
10-11 07:29:18.759   500   656 D AudioDaemon: Opening sound card state : /proc/asound/card---/state
10-11 07:29:18.759   500   656 E AudioDaemon: Open /proc/asound/card---/state failed : No such file or directory
10-11 07:29:18.759   500   656 V AudioDaemon: bool android::AudioDaemon::getStateFDs(std::__1::vector<std::__1::pair<int, int> >&): 0 sound cards detected
01-11 07:29:18.759   500   656 E AudioDaemon: Sleeping for 100 ms


因此需查看底层是否正常。

 

2,通过kernel log,检查DSP加载情况

(1) modem加载正常


apr_tal:Modem Is Up


(2) ADSP加载失败


adsp-loader qcom,msm-adsp-loader.91: adsp_loader_do: Q6 image loading failed


 

3,检查ADSP firmware是否正常

(1) 查看当前异常手机版本号,并在软件版本服务器下载相同版本的NON-HLOS.bin

(2) 解压NON-HLOS.Bin

解压命令


sudo mount -t vfat ./NON-HLOS.bin ./modem


(3) 拉取异常手机中的adsp bin,路径为/firmware/image/adsp*

(4)将步骤2和3中获取的adsp bin进行对比,发现adsp b04 firmware不一致,有损坏;

(5) 将正常版本中的b04推送到异常手机后,手机恢复正常,有声音;


adb root adb remount adb shell mount -o remount,rw /firmware adb push adsp.b04 /firmware/image


(6) 将异常b04推送到正常手机中,原先正常发声的手机出现无声现象;

至此,我们能够确定,无声的原因是:ADSP firmware异常导致声卡加载失败,继而无声。

 

4, 分析ADSP firmware损坏原因

那么接下来的疑问是为什么会有firmware损坏呢?

有两种可能:

(1) 软件版本下载工具在下载到手机时失败;

(2) 软件版本下载工具从版本服务器端拉取版本到本地时出错

本地下载出现异常的可能性非常小,因为下载工具一直在用,其他项目没有问题。而从服务器下载出错可能性更大。并且有如下几点与此状况吻合:

(1)firmware是固化,软件不会再篡改的,而实际却发生了变化;

(2)曾经出现过即使format whole flash,连续下载两台手机,均复现异常,如果是因为拖取到本地的版本出现异常,则能够解释这种现象。

继而调查发现,另一共基线项目从未遇到过此adsp firmware损坏问题,但却有多加了一个下载校验机制。

 

5,加入预防校验机制

要求工具组在当前异常项目中,也加入此MD5校验预防机制,并通知VAL继续观察,是否有下载失败的提示。

 

6,跟踪结果

测试中的确复现了NON-HLOS下载校验出错,证明的确是概率存在下载异常。并通过持续跟踪多个版本,之后再未复现。