262 lines
8.6 KiB
Bash
262 lines
8.6 KiB
Bash
|
#!/vendor/bin/sh
|
||
|
# $1 = trigger cause (from kernel->wlbtd)
|
||
|
# $2 = 16-bit hex reason code
|
||
|
|
||
|
THIS_SCRIPT_VERSION="1.0"
|
||
|
dir="`cat /sys/module/scsc_log_collection/parameters/collection_target_directory`"
|
||
|
max_logs="`getprop vendor.wlbtd.tar_files_per_trigger`"
|
||
|
wlbtd_version="`getprop vendor.wlbtd.version`"
|
||
|
DATE_TAG="`date +%Y_%m_%d__%H_%M_%S`"
|
||
|
moredumpdir=/data/vendor/log/wifi
|
||
|
memdump_file=/sys/wifi/memdump
|
||
|
|
||
|
base_dir=`cat /sys/module/scsc_mx/parameters/base_dir`
|
||
|
fw_var=`cat /sys/module/scsc_mx/parameters/firmware_variant`
|
||
|
fw_suffix=`cat /sys/module/scsc_mx/parameters/firmware_hw_ver`
|
||
|
xml_dir=$base_dir/$fw_var$fw_suffix/debug/hardware/moredump
|
||
|
log_strings=$base_dir/$fw_var$fw_suffix/debug/common/log-strings.bin
|
||
|
|
||
|
take_moredump()
|
||
|
{
|
||
|
memdump_file_val=1
|
||
|
if [ -f ${memdump_file} ]; then
|
||
|
memdump_file_val=`cat $(eval echo ${memdump_file})`
|
||
|
echo "$(eval echo ${memdump_file}) : ${memdump_file_val}" >> ${status_file} 2>&1
|
||
|
fi
|
||
|
|
||
|
if [[ ${memdump_file_val} != "0" ]]; then
|
||
|
echo "Collecting Moredump" >> ${status_file}
|
||
|
start=`date +%s`
|
||
|
if grep -q -E -i "lassen|leman|nacho|neus|orange" /proc/driver/mxman_info/mx_release; then
|
||
|
moredump.bin ${moredumpdir}/moredump_${DATE_TAG}.cmm -xml_path ${xml_dir} -log_strings ${log_strings} 2>>${status_file} >/dev/null
|
||
|
else
|
||
|
# p-series chip log_strings are in the FW image
|
||
|
moredump.bin ${moredumpdir}/moredump_${DATE_TAG}.cmm -xml_path ${xml_dir} -firmware_binary ${base_dir}/${fw_var}${fw_suffix}.bin 2>>${status_file} >/dev/null
|
||
|
fi
|
||
|
script_status=$?
|
||
|
echo "Generated moredump moredump_${DATE_TAG}.cmm|moredump_${DATE_TAG}.err.cmm" >>${status_file}
|
||
|
end=`date +%s`
|
||
|
echo "moredump generated in ${moredumpdir} in $((end-start)) seconds" >> ${status_file} 2>&1
|
||
|
if [ -f ${moredumpdir}/moredump_${DATE_TAG}.cmm ]; then
|
||
|
chmod 755 ${moredumpdir}/moredump_${DATE_TAG}.cmm
|
||
|
cp -a ${moredumpdir}/moredump_${DATE_TAG}.cmm ${logdir}
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo "copied ${moredumpdir}/moredump_${DATE_TAG}.cmm to ${logdir}" >> ${status_file} 2>&1
|
||
|
else
|
||
|
echo "copy failed($?) ${moredumpdir}/moredump_${DATE_TAG}.cmm is not copied." >> ${status_file} 2>&1
|
||
|
fi
|
||
|
elif [ -f ${moredumpdir}/moredump_${DATE_TAG}.err.cmm ]; then
|
||
|
chmod 755 ${moredumpdir}/moredump_${DATE_TAG}.err.cmm
|
||
|
cp -a ${moredumpdir}/moredump_${DATE_TAG}.err.cmm ${logdir}
|
||
|
if [ $? -eq 0 ]; then
|
||
|
echo "copied ${moredumpdir}/moredump_${DATE_TAG}.err.cmm to ${logdir}" >> ${status_file} 2>&1
|
||
|
else
|
||
|
echo "copy failed($?) ${moredumpdir}/moredump_${DATE_TAG}.err.cmm is not copied." >> ${status_file} 2>&1
|
||
|
fi
|
||
|
else
|
||
|
echo "Cannot find moredump_${DATE_TAG}.cmm or moredump_${DATE_TAG}.err.cmm in ${moredumpdir}" >> ${status_file}
|
||
|
fi
|
||
|
sync
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
logcat_dmesg_logs()
|
||
|
{
|
||
|
SAMLOG=/sys/kernel/debug/scsc/ring0/samlog
|
||
|
MXDECO=/vendor/bin/mxdecoder
|
||
|
|
||
|
#If it use devfs instead of debugfs
|
||
|
if [ ! -e ${SAMLOG} ]; then
|
||
|
SAMLOG=/dev/samlog
|
||
|
fi
|
||
|
|
||
|
# dump dmesg
|
||
|
echo "collecting kernel log using dmesg" >> ${status_file}
|
||
|
dmesg > ${logdir}/dmesg_${DATE_TAG}.log 2>>${status_file} #print errors to status file
|
||
|
echo "generated ${logdir}/dmesg_${DATE_TAG}.log" >> ${status_file} 2>&1
|
||
|
|
||
|
# dump logring
|
||
|
if [ -e ${SAMLOG} ]; then
|
||
|
cat /proc/driver/mxman_info/mx_release > ${logdir}/mx.dump_${DATE_TAG}.log 2>&1
|
||
|
echo "collecting mx dump from ${SAMLOG}" >> ${status_file}
|
||
|
if [ ! -e ${MXDECO} ]
|
||
|
then
|
||
|
echo "No mxdecoder found...dumping RAW logring." >> ${logdir}/mx.dump_${DATE_TAG}.log
|
||
|
cat ${SAMLOG} >> ${logdir}/mx.dump_${DATE_TAG}.log 2>>${status_file} #print errors to status file
|
||
|
else
|
||
|
cat ${SAMLOG} | $MXDECO >> ${logdir}/mx.dump_${DATE_TAG}.log 2>>${status_file} #print errors to status file
|
||
|
fi
|
||
|
echo "generated ${logdir}/mx.dump_${DATE_TAG}.log" >> ${status_file} 2>&1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
remove_old_tar_and_cmm_files()
|
||
|
{
|
||
|
# if vendor.wlbtd.tar_files_per_trigger property is not set, hardcode value 5
|
||
|
# otherwise we will not delete any old files and keep filling the storage with tar files
|
||
|
if [[ ${max_logs} == " " ]]; then
|
||
|
max_logs=5
|
||
|
fi
|
||
|
|
||
|
cd ${dir}
|
||
|
if [ ${max_logs} -eq 0 ]; then
|
||
|
# only keep the last tar and cmm file
|
||
|
count="`ls -tr ${tarext} | wc -l`"
|
||
|
while [ ${count} -gt 1 ]
|
||
|
do
|
||
|
oldest="`ls -tr ${tarext} | head -n 1`"
|
||
|
echo "removed ${oldest}" >> ${status_file} 2>&1
|
||
|
rm -f ${oldest} > /dev/null 2>&1
|
||
|
((count=count - 1))
|
||
|
done
|
||
|
|
||
|
cmmcount="`ls -tr moredump* | wc -l`"
|
||
|
while [ ${cmmcount} -gt 1 ]
|
||
|
do
|
||
|
oldestcmm="`ls -tr moredump* | head -n 1`"
|
||
|
echo "removed ${oldestcmm}" >> ${status_file} 2>&1
|
||
|
rm -f ${oldestcmm} > /dev/null 2>&1
|
||
|
((cmmcount=cmmcount-1))
|
||
|
done
|
||
|
else
|
||
|
# remove old tar files of each type
|
||
|
list_of_triggers="scsc_log_dumpstate_wlbt_off \
|
||
|
scsc_log_user scsc_log_fw \
|
||
|
scsc_log_dumpstate scsc_log_host_wlan \
|
||
|
scsc_log_host_bt scsc_log_host_common \
|
||
|
scsc_log_fw_panic scsc_log_sys_error"
|
||
|
for i in ${list_of_triggers}
|
||
|
do
|
||
|
count="`ls -tr ${i}${tarext} | wc -l`"
|
||
|
|
||
|
while [ ${count} -gt ${max_logs} ]
|
||
|
do
|
||
|
oldest="`ls -tr ${i}${tarext} | head -n 1`"
|
||
|
echo "removed ${oldest}" >> ${status_file} 2>&1
|
||
|
rm -f ${oldest} > /dev/null 2>&1
|
||
|
((count=count-1))
|
||
|
done
|
||
|
done
|
||
|
|
||
|
cmmcount="`ls -tr moredump* | wc -l`"
|
||
|
while [ ${cmmcount} -gt ${max_logs} ]
|
||
|
do
|
||
|
oldestcmm="`ls -tr moredump* | head -n 1`"
|
||
|
echo "removed ${oldestcmm}" >> ${status_file} 2>&1
|
||
|
rm -f ${oldestcmm} > /dev/null 2>&1
|
||
|
((cmmcount=cmmcount-1))
|
||
|
done
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
#----------------------------------------------------------------------------------------
|
||
|
|
||
|
# if the first command is "last_panic", the script will return the
|
||
|
# last fw panic collected
|
||
|
if [[ $1 == last_panic ]]; then
|
||
|
last_string=`ls $moredumpdir/*panic* -rtd 2>/dev/null| tail -n 1`
|
||
|
echo $last_string
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
trigger=$1
|
||
|
code=$2
|
||
|
|
||
|
# create .tmp hidden dir
|
||
|
tarfile=${trigger}_${DATE_TAG}_${code}
|
||
|
logdir=${dir}/.tmp-${tarfile}/${tarfile}
|
||
|
|
||
|
# wlbt-off handling
|
||
|
mx_status="`cat /proc/driver/mxman_ctrl0/mx_status`"
|
||
|
if [ "x${trigger}" == "xscsc_log_dumpstate" ] && [ ! -f /proc/driver/mxman_ctrl0/mx_status ]; then
|
||
|
tarfile=${trigger}_"wlbt_off"_${DATE_TAG}_${code}
|
||
|
logdir=${dir}/.tmp-${tarfile}/${tarfile}
|
||
|
fi
|
||
|
|
||
|
# remove spurious .tmp folders if present
|
||
|
rmdir -p ${dir}/.tmp-*
|
||
|
|
||
|
# make sure the dir exists
|
||
|
mkdir -p ${logdir}
|
||
|
|
||
|
status_file=${logdir}/status_${DATE_TAG}.log
|
||
|
# create status file
|
||
|
touch ${status_file}
|
||
|
echo "THIS_SCRIPT_VERSION:${THIS_SCRIPT_VERSION}" > ${status_file} 2>&1
|
||
|
echo "created ${logdir}" >> ${status_file} 2>&1
|
||
|
echo "created ${status_file}" >> ${status_file} 2>&1
|
||
|
|
||
|
cd ${dir}
|
||
|
# no .sbl found exit
|
||
|
if [ -z .tmp-${trigger}.sbl ]; then
|
||
|
echo ".tmp-${trigger}.sbl not found. exiting." >> ${status_file} 2>&1
|
||
|
log -t "WLBTD" -p e ".tmp-${trigger}.sbl not found. exiting."
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# copy .sbl file
|
||
|
mv .tmp-${trigger}.sbl ${logdir}/${trigger}_${DATE_TAG}_${code}.sbl 2>&1
|
||
|
echo "copied .tmp-${trigger}.sbl to ${logdir}/${trigger}_${DATE_TAG}_${code}.sbl" >> ${status_file} 2>&1
|
||
|
|
||
|
cd ${logdir}
|
||
|
echo "working dir: `pwd`" >> ${status_file} 2>&1
|
||
|
|
||
|
logcat_dmesg_logs
|
||
|
|
||
|
# take moredump in case of scsc_log_fw_panic
|
||
|
if [ "x${trigger}" == "xscsc_log_fw_panic" ]; then
|
||
|
if [ -f /vendor/bin/moredump.bin ]; then
|
||
|
|
||
|
take_moredump
|
||
|
|
||
|
chmod 0666 ${logdir}/dmesg_${DATE_TAG}.log
|
||
|
chmod 0666 ${logdir}/mx.dump_${DATE_TAG}.log
|
||
|
echo "ls ${logdir}" >> ${status_file}
|
||
|
ls -l ${logdir} 2>&1 >> ${status_file}
|
||
|
# cp -a ${logdir}/dmesg_${DATE_TAG}.log ${moredumpdir}
|
||
|
# cp -a ${logdir}/mx.dump_${DATE_TAG}.log ${moredumpdir}
|
||
|
else
|
||
|
echo "/vendor/bin/moredump.bin not found. No moredump generated." >> ${status_file} 2>&1
|
||
|
log -t "WLBTD" -p e "/vendor/bin/moredump.bin not found. No moredump generated."
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# copy log-strings.bin
|
||
|
cp ${log_strings} ${logdir} 2>&1
|
||
|
echo "copied ${log_strings} ${logdir}" >> ${status_file} 2>&1
|
||
|
|
||
|
echo "getprop vendor.wlbtd.tar_files_per_trigger : ${max_logs}" >> ${status_file} 2>&1
|
||
|
echo "getprop vendor.wlbtd.version : ${wlbtd_version}" >> ${status_file} 2>&1
|
||
|
echo "ro.build.date : `getprop ro.build.date`" >> ${status_file} 2>&1
|
||
|
echo "ro.build.fingerprint : `getprop ro.build.fingerprint`" >> ${status_file} 2>&1
|
||
|
|
||
|
script_status=0
|
||
|
|
||
|
if [ -f /vendor/bin/gunzip ]; then
|
||
|
cd .. # very important to change to correct directory
|
||
|
tar -czf ./${tarfile}.tar.gz ${tarfile} > /dev/null 2>&1
|
||
|
chmod 0666 ./${tarfile}.tar.gz
|
||
|
mv ${tarfile}.tar.gz ${dir}
|
||
|
log -t "WLBTD" $(eval echo ${dir}/${tarfile}).tar.gz generated
|
||
|
# create tar.gz
|
||
|
tarext="*.tar.gz"
|
||
|
else
|
||
|
cd .. # very important to change to correct directory
|
||
|
tar -cf ./${tarfile}.tar ${tarfile} > /dev/null 2>&1
|
||
|
chmod 0666 ./${tarfile}.tar
|
||
|
mv ${tarfile}.tar ${dir}
|
||
|
log -t "WLBTD" $(eval echo ${dir}/${tarfile}).tar generated
|
||
|
# create tar
|
||
|
tarext="*.tar"
|
||
|
fi
|
||
|
sync
|
||
|
|
||
|
# clean-up
|
||
|
rm -rf ${dir}/.tmp-${tarfile} >/dev/null 2>&1
|
||
|
|
||
|
remove_old_tar_and_cmm_files
|
||
|
|
||
|
sync
|
||
|
|
||
|
exit ${script_status}
|