lineage_device_tree_xcoverpro/rootdir/bin/mx_log_collection.sh

262 lines
8.6 KiB
Bash
Raw Permalink Normal View History

2023-06-18 22:49:28 +00:00
#!/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}