1. 问题描述
设备用系统自带播放器播放某个MP4文件(15s左右的视频文件),有时候可以播放通过,有时候播放过程提示“无法播放此视频”,播放2~3天左右,系统提示存储空间不足。
经确认在/data分区下发现有个新创建的ramdump文件夹,里面有很多ramdump_venu_xx.elf的文件(比如ramdump_venus_2017-09-18_08-40-06.elf),其中提示存储空间不足的,整个ramdump文件夹大小为9.57GB。
2. 问题分析
-------------------------20170922----------------------------------------
高通根据我们提供的内核信息,主要分析结果
from the kernel log, I didn't find mucherror log.
do you find any other elf besides venuself?
venus is used for video decoder and videoencoder.
from the log, h264 decoder is running.
if you didn't do anything, that might becaused by mediascan, mediascan try to generate thumbnail, then invoke decoder.
from the kernel log, when handle 176x144media file, venus will report a error.
-------------------20170929高通给新的venus固件验证-----------------
Please try the test venus firmware.
You can find origianl venus firmware under/system/etc/firmware/ or /firmware/image/
这些文件是放在NON-HLOS.bin中的。
You can find origianl venus firmware name.
If you are using venus-v1.xxx, pleaserename the test venus firmware to venus-v1.xxx if the name is not matched.
If you are using venus.xxx, please renamethe test venus firmware to venus.xxx if the name is not matched.
这是方案商提供的相关文件:
If there are both venus.xxx andvenus-v1.xxx,
You can get the real venus name from"firmware-name"
in
LINUX/android/kernel/arch/arm/boot/dts/qcom/
sign means images are signed with qualcommsignature.
unsign means images are not signed.
If your company has own signature, you needto use unsigned images and sign them with your own signature.
If not, you can use sign images.
Please push the venus images to/system/etc/firmware/ or /firmware/image/
Before push the venus images, pleaseremount
adb root
adb remount
adb shell
mount -t vfat -o remount, rw /firmware
Please try the new firmware.
and share the kernel log too.
adb reboot
adb root
adb shell "echo 0x1f >/sys/kernel/debug/msm_vidc/debug_level"
adb logcat -b kernel -v threadtime > kernel.log
logcat -b kernel -v threadtime > /data/kernel.log&
但根据这些操作无效,方案商重新提供合并venus*文件的NON-HLOS.bin,测试发现没有生成elf文件的问题,但播放视频的时候发现有丢帧问题
------------------------------2017.10.12----------------------------
高通重新给新的NON-HLOS.bin才解决了这两个难问题,但具体怎么解决的,没有给我们说明。
抓kernel的一些信息备忘:
if yes, please share the kernel log foranalysis.
adb root
adb shell
cd /d/msm_vidc
echo 0x1015 > debug_level
echo 0x3F > fw_level
exit
adb logcat -c
adb logcat -b kernel -v threadtime >logcat.log
wait for issue reproduced, share the log.
3. 问题的解决
3.1 方法一:当出现这样异常时不抓dump和转储到data目录下
device\qcom\common\rootdir\etc\init.qcom.rc
定义ramdump服务的代码
service ss_ramdump /system/bin/subsystem_ramdump
class main
user system
group system
disabled
如果enable_ramdumps值被使能那么启动ss_ramdump服务
onproperty:persist.sys.ssr.enable_ramdumps=1
write /sys/module/subsystem_restart/parameters/enable_ramdumps 1
mkdir /data/ramdump 770 system system
start ss_ramdump
如果ss_ramdump被启动,则会调用到vendor/qcom/proprietary/ss-restart/subsystem_ramdump/subsystem_ramdump.c中的main函数。
onproperty:persist.sys.ssr.enable_ramdumps=0
write /sys/module/subsystem_restart/parameters/enable_ramdumps0
system\core\rootdir\init.rc
设置使能ramdump的值为1
# [ODM] set modem side SSR
setprop persist.sys.ssr.enable_ramdumps 1
echo 1 >/sys/module/subsystem_restart/parameters/enable_ramdumps
chmod 664 /dev/ramdump_*
setprop persist.sys.ssr.restart_level modem
echo related > /sys/bus/msm_subsys/devices/subsys2/restart_level
subsystem_ramdump :发生SSR的时候会将内存中的东西存储到其他的位置。
注释掉红色部分内容可以解决此问题,但这不是根本的解决方法,只是出现问题的时候不抓dump信息,不转储到/data分区下而已。
3.2 彻底解决,高通通过更新NON-HLOS.bin来解决,但我们不知道具体的解决方法。