2025-05-10 21:58:58 +08:00

250 lines
7.0 KiB
Bash
Executable File

#!/bin/bash
#
bugreport=/userdata/bugreport
usage()
{
echo "USAGE: [-s] [-u] [-i] [-a] [-m] [-p] [-h] "
echo "No ARGS means bugreport all infos in '${bugreport}' "
echo "WHERE: -s = report system info "
echo " -u = report usb info "
echo " -i = report isp info "
echo " -a = report app info "
echo " -m = report mpp enc use time and in&out data "
echo " -p = path to save bugreport infos "
echo " -h = bugreport using help "
echo "EXAMPLE: bugreport.sh -p /tmp/bugreport -suia "
exit 1
}
get_uvc_enc_in()
{
touch /tmp/uvc_enc_in
sleep 1
rm /tmp/uvc_enc_in
if [ ! -d ${bugreport}/uvc_data ];then
mkdir -p ${bugreport}/uvc_data
fi
mv /userdata/uvc_enc_in.bin ${bugreport}/uvc_data/
sync
}
get_uvc_enc_out()
{
touch /tmp/uvc_enc_out
sleep 3
rm /tmp/uvc_enc_out
if [ ! -d ${bugreport}/uvc_data ];then
mkdir -p ${bugreport}/uvc_data
fi
mv /userdata/uvc_enc_out.bin ${bugreport}/uvc_data/
sync
}
get_mpp_status()
{
if [ ! -d ${bugreport}/uvc_data ];then
mkdir -p ${bugreport}/uvc_data
fi
echo 0x100 > /sys/module/rk_vcodec/parameters/mpp_dev_debug
sleep 5
echo 0 > /sys/module/rk_vcodec/parameters/mpp_dev_debug
if [ -e /tmp/messages ];then
tail -n 500 /tmp/messages > ${bugreport}/uvc_data/mpp_enc_time_info
fi
sync
}
get_isp_status()
{
if [ ! -d ${bugreport}/isp_data ];then
mkdir -p ${bugreport}/isp_data
fi
echo "report rkisp and rkispp info..."
cat /proc/rkisp* > ${bugreport}/isp_data/rkisp_data0
sleep 1
cat /proc/rkisp* > ${bugreport}/isp_data/rkisp_data1
sleep 1
cat /proc/rkisp* > ${bugreport}/isp_data/rkisp_data2
echo "report rkcif info..."
cat /proc/rkcif* > ${bugreport}/isp_data/rkcif_data0
sleep 1
cat /proc/rkcif* > ${bugreport}/isp_data/rkcif_data1
sleep 1
cat /proc/rkcif* > ${bugreport}/isp_data/rkcif_data2
echo "report media-ctl info..."
media-ctl -p > ${bugreport}/isp_data/media-ctl-p_info
media-ctl -d /dev/media0 -p > ${bugreport}/isp_data/media-ctl-p-media0_info
media-ctl -d /dev/media1 -p > ${bugreport}/isp_data/media-ctl-p-media1_info
echo "report isp&ispp reg info..."
io -4 -l 0x10000 0xffb50000 > ${bugreport}/isp_data/isp.reg
io -4 -l 0x10000 0xffb60000 > ${bugreport}/isp_data/ispp.reg
sync
}
get_usb_status()
{
if [ ! -d ${bugreport}/usb_data ];then
mkdir -p ${bugreport}/usb_data
fi
echo "report usb&uvc info..."
echo " uvc trace for setup request processing begin..."
echo " First , Need quit camera preview."
echo " Second, Restart camera preview..."
echo " Make sure the above two steps are completed within 15s"
echo 4 > /sys/module/usb_f_uvc/parameters/trace
sleep 15
dmesg > ${bugreport}/usb_data/dmesg_info
cat /proc/uvcinfo > ${bugreport}/usb_data/usb_data0
sleep 1
cat /proc/uvcinfo > ${bugreport}/usb_data/usb_data1
sleep 1
cat /proc/uvcinfo > ${bugreport}/usb_data/usb_data2
}
get_sys_status()
{
if [ ! -d ${bugreport}/system_data ];then
mkdir -p ${bugreport}/system_data
fi
echo "report system ps info..."
ps -ef > ${bugreport}/system_data/ps_info
ps -eLo pid,tid,class,rtprio,ni,pri,psr,pcpu,pmem,stat,wchan:30,comm > ${bugreport}/system_data/ps_detail_info
echo "report system mem free info..."
free -h > ${bugreport}/system_data/free_info
echo "report system flash mount info..."
mount > ${bugreport}/system_data/mount_info
echo "report system flash using info..."
df > ${bugreport}/system_data/df_info
echo "report system clk_summary info..."
cat /sys/kernel/debug/clk/clk_summary > ${bugreport}/system_data/clk_summary_info0
sleep 1
cat /sys/kernel/debug/clk/clk_summary > ${bugreport}/system_data/clk_summary_info1
echo "report system dmesg info..."
dmesg > ${bugreport}/system_data/dmesg_info
if [ -e /tmp/messages ];then
echo "report system syslog info..."
cp /tmp/messages ${bugreport}/system_data/syslog
fi
echo "report system top info..."
top -b > ${bugreport}/system_data/top_info &
sleep 2
killall top
sync
}
get_app_status(){
if [ ! -d ${bugreport}/application_data ];then
mkdir -p ${bugreport}/application_data
fi
echo "report applicattion $1 info..."
pid=`ps -ef | grep $1 | grep -v "grep" | awk '{print $2}'`
top -b -H -p ${pid} > ${bugreport}/application_data/$1_info &
echo "totol fd nums and max fd supprot" > ${bugreport}/application_data/$1_fd_info
cat /proc/sys/fs/file-nr >> ${bugreport}/application_data/$1_fd_info
echo "fd nums in $1" >> ${bugreport}/application_data/$1_fd_info
ls /proc/${pid}/fd | wc -l >> ${bugreport}/application_data/$1_fd_info
echo "detail fds in $1" >> ${bugreport}/application_data/$1_fd_info
ls -l /proc/${pid}/fd >> ${bugreport}/application_data/$1_fd_info
sleep 3
killall top
if [ "$1"x == "uvc_app"x ];then
echo "uvc_app version > V1.31 show RGB in host start..."
touch /tmp/uvc_isp_state
sleep 3
rm /tmp/uvc_isp_state
echo "uvc_app version > V1.31 show RGB in host end..."
echo "report uvc_app uvc_ipc_state info..."
touch /tmp/uvc_ipc_state
sleep 5
rm /tmp/uvc_ipc_state
if [ -e /tmp/messages ];then
tail -n 500 /tmp/messages > ${bugreport}/application_data/$1_uvc_ipc_state_info
fi
echo "report uvc_app uvc_out_len info..."
touch /tmp/uvc_out_len
sleep 5
rm /tmp/uvc_out_len
if [ -e /tmp/messages ];then
tail -n 500 /tmp/messages > ${bugreport}/application_data/$1_uvc_out_len_info
fi
echo "report uvc_app uvc_use_time info..."
touch /tmp/uvc_use_time
sleep 3
rm /tmp/uvc_use_time
if [ -e /tmp/messages ];then
tail -n 500 /tmp/messages > ${bugreport}/application_data/$1_uvc_use_time_info
fi
sync
fi
}
report_all_info()
{
get_sys_status
get_usb_status
get_uvc_enc_in
get_uvc_enc_out
get_isp_status
get_app_status aiserver
get_app_status ispserver
get_app_status uvc_app
get_app_status smart_display_service
}
if [ $# -ne 0 ];then
while getopts "suiamp:h" arg
do
case $arg in
s)
echo "report system info"
get_sys_status
;;
u)
echo "report usb info"
get_usb_status
;;
i)
echo "report isp info"
get_isp_status
;;
a)
echo "report app info"
get_app_status aiserver
get_app_status ispserver
get_app_status uvc_app
get_app_status smart_display_service
;;
m)
echo "report enc use time and in&out data"
get_uvc_enc_in
get_uvc_enc_out
get_mpp_status
;;
p)
echo "save bugreport infos in path '${OPTARG}'"
bugreport=${OPTARG}
if [ $# -eq 2 ];then
report_all_info
fi
;;
h)
usage
;;
?)
usage
;;
esac
done
else
echo "report all infos"
report_all_info
fi
echo "done, bugreport saved in '${bugreport}'"