mir3c/squashfs-root/usr/sbin/upcrash
2018-05-25 14:19:31 +05:30

85 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# @Xiaomi crashlog processing script
get_crash_log_mtd() {
local crashname="$1"
local destfile="$2"
local crashmtd="$(grep "\"$crashname\"" /proc/mtd | awk -F: '{print $1}')"
[ -z "$crashmtd" ] && return 0
crashmtd="/dev/""$crashmtd"
#TODO: dd may fail to handle bad blocks on nand.
crashflag=`dd if="$crashmtd" bs=1 count=4 2>/dev/null | hexdump -e '1/4 "%x"'`
[ "$crashflag" = "5ab5" ] || return 0
#TODO: what if there is no crashflag but mtd is not clean either
# crash exist
cd /tmp
if mtd_crash_log -X "$crashmtd"; then
if [ -f "panic.message" ]; then
mv panic.message "$destfile"
fi
fi
mtd erase "$crashmtd" 2>/dev/null
return 1
}
get_crash_log() {
get_crash_log_mtd "crash" "/tmp/crash_logbuf"
[ "$?" = "0" ] && return 0
#crash logbuf found. dig out crash syslog
get_crash_log_mtd "crash_syslog" "/tmp/crash_syslog"
#check wlan fw bin
WLAN_FW_LOG=""
if [ -f "/data/usr/log/WLAN_FW_9984.BIN.1" ]; then
cp /data/usr/log/WLAN_FW_9984.BIN.1 /tmp/
mv /data/usr/log/WLAN_FW_9984.BIN.1 /data/usr/log/WLAN_FW_9984.BIN.2
WLAN_FW_FILE="WLAN_FW_9984.BIN.1"
fi
if [ -f "/data/usr/log/WLAN_FW_900B.BIN.1" ]; then
cp /data/usr/log/WLAN_FW_900B.BIN.1 /tmp/
mv /data/usr/log/WLAN_FW_900B.BIN.1 /data/usr/log/WLAN_FW_900B.BIN.2
WLAN_FW_FILE="${WLAN_FW_FILE} WLAN_FW_900B.BIN.1"
fi
[ -n "${WLAN_FW_FILE}" ] && WLAN_FW_LOG="wlan_fw_bin.tar.gz" && tar -czf ${WLAN_FW_LOG} ${WLAN_FW_FILE}
cd /tmp
if [ -f crash_logbuf -a -f crash_syslog ]; then
tar -czf panic.tar.gz crash_logbuf crash_syslog ${WLAN_FW_LOG}
rm -f crash_logbuf crash_syslog
else
tar -czf panic.tar.gz crash_logbuf ${WLAN_FW_LOG}
rm -f crash_logbuf
fi
# just overwrite old panic logs
mv -f /tmp/panic.tar.gz /data/usr/log/panic.tar.gz
}
upload_crash_log() {
[ -f /data/usr/log/panic.tar.gz ] || return 0
mtd_crash_log -u /data/usr/log/panic.tar.gz
if [ "$?" = "0" ]; then
logger -p local0.warning -t boot_check "Upload crash done."
rm -f /data/usr/log/panic.tar.gz
else
logger -p local0.warning -t boot_check "Upload crash failed."
fi
}
tmpft=`cat /proc/xiaoqiang/ft_mode`
[ "$tmpft" = "1" ] && return 0
get_crash_log
upload_crash_log