下载软件版本后概率性出现某些单体必现无声
【问题现象】
测试及工厂多次报出手机开机后无声的问题,并且重启无效,并且伴随有开机缓慢
对于复现异常的手机,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下载校验出错,证明的确是概率存在下载异常。并通过持续跟踪多个版本,之后再未复现。