356 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			356 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
#
 | 
						|
# Copyright (c) 2013, The Linux Foundation. All rights reserved.
 | 
						|
#
 | 
						|
# Redistribution and use in source and binary forms, with or without
 | 
						|
# modification, are permitted provided that the following conditions are met:
 | 
						|
#     * Redistributions of source code must retain the above copyright
 | 
						|
#       notice, this list of conditions and the following disclaimer.
 | 
						|
#     * Redistributions in binary form must reproduce the above copyright
 | 
						|
#       notice, this list of conditions and the following disclaimer in the
 | 
						|
#       documentation and/or other materials provided with the distribution.
 | 
						|
#     * Neither the name of The Linux Foundation nor the names of its
 | 
						|
#       contributors may be used to endorse or promote products derived from
 | 
						|
#       this software without specific prior written permission.
 | 
						|
#
 | 
						|
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
 | 
						|
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
 | 
						|
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE DISCLAIMED.  IN NO
 | 
						|
# EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 | 
						|
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
						|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
						|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
						|
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
						|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
						|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
						|
 | 
						|
# Enable or disable debug messages in USB related files.
 | 
						|
# this script allows the user to chose the files in which should enable or disable debug messages
 | 
						|
# and also allows the user to save the debug configuration for the next reboot
 | 
						|
# This in order to allow early boot debug information.
 | 
						|
 | 
						|
DBG_FILE="/sbin/usb/debuger/debugFiles"
 | 
						|
DEFAULT_FILE="/sbin/usb/debuger/default_debug"
 | 
						|
HELP="/sbin/usb/debuger/help"
 | 
						|
statusFile="/sbin/usb/debuger/statusFile"
 | 
						|
 | 
						|
legal_fileName(){
 | 
						|
	file_list=`cat $DBG_FILE| cut -f 2| grep -v ___`
 | 
						|
	for c in $file_list
 | 
						|
	do
 | 
						|
		if [ "$1" = "$c" ]; then
 | 
						|
			echo "1"
 | 
						|
			exit
 | 
						|
		fi
 | 
						|
	done
 | 
						|
	echo "0"
 | 
						|
}
 | 
						|
 | 
						|
legal_fid() {
 | 
						|
	local id_list=`cat $DBG_FILE| cut -f 1| grep -v ___`
 | 
						|
	for num in $id_list
 | 
						|
	do
 | 
						|
		if [ "$1" = "$num" ]; then
 | 
						|
			echo "1"
 | 
						|
			exit
 | 
						|
		fi
 | 
						|
	done
 | 
						|
	echo "0"
 | 
						|
}
 | 
						|
 | 
						|
legal_fileNames(){
 | 
						|
	local  i=1
 | 
						|
	for j in "$@"
 | 
						|
	do
 | 
						|
		if [ $i -gt $1 ]; then
 | 
						|
			if [ `legal_fileName $j` = "0" ]; then
 | 
						|
			echo "0"
 | 
						|
			exit
 | 
						|
			fi
 | 
						|
		fi
 | 
						|
		let i+=1
 | 
						|
	done
 | 
						|
	echo "1"
 | 
						|
}
 | 
						|
 | 
						|
get_fileList(){
 | 
						|
	local  i=1
 | 
						|
	local list=""
 | 
						|
	for j in "$@"
 | 
						|
	do
 | 
						|
		if [ $i -gt $1 ]; then
 | 
						|
			list="$list$j   "
 | 
						|
		fi
 | 
						|
		let i+=1
 | 
						|
	done
 | 
						|
	echo $list
 | 
						|
}
 | 
						|
 | 
						|
read_fid() {
 | 
						|
# this func gets the file id and returns the file names of the chosen files
 | 
						|
	local flag="1"
 | 
						|
	local tmp_fid="0"
 | 
						|
	local files=""
 | 
						|
	read  -p "fid number : " tmp_fid
 | 
						|
	while [ true ];
 | 
						|
	do
 | 
						|
		for num in $tmp_fid
 | 
						|
		do
 | 
						|
			if [ `legal_fid $num` = "0" ]; then
 | 
						|
				flag="0"
 | 
						|
				break
 | 
						|
			else
 | 
						|
				files="$files `cat $DBG_FILE|grep -w $num|grep -v ___|cut -f 2`      "
 | 
						|
			fi
 | 
						|
		done
 | 
						|
		if [ $flag = "0" ]; then
 | 
						|
			flag="1"
 | 
						|
			files=""
 | 
						|
			read -p "Illegal Fid number, try again : " tmp_fid
 | 
						|
		else
 | 
						|
			echo "$files"
 | 
						|
			exit
 | 
						|
		fi
 | 
						|
        done
 | 
						|
}
 | 
						|
 | 
						|
read_persistent() {
 | 
						|
	local tmp_persistent='0'
 | 
						|
	read -p "Would you like it to be the default file\s for debug ? (y/n) " tmp_persistent
 | 
						|
	while [ true ]; do
 | 
						|
		if [ $tmp_persistent = "y" ] || [ $tmp_persistent = "n" ]; then
 | 
						|
			echo "$tmp_persistent"
 | 
						|
			exit
 | 
						|
		fi
 | 
						|
		read -p "Only 'y' or 'n' are allowed, try again : " tmp_persistent
 | 
						|
	done
 | 
						|
}
 | 
						|
read_operation() {
 | 
						|
	local tmp_op='0'
 | 
						|
	read -p "Would you like to enable or disable the debug messages ? (on/off) " tmp_op
 | 
						|
	while [ true ]; do
 | 
						|
		if [ $tmp_op = "on" ] || [ $tmp_op = "off" ]; then
 | 
						|
			echo "$tmp_op"
 | 
						|
			exit
 | 
						|
		fi
 | 
						|
		read -p "Only 'on' or 'off' are allowed, try again : " tmp_op
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
add_toStatus() {
 | 
						|
	if [ -f $statusFile ]; then
 | 
						|
		if [ `cat $statusFile |grep -c $1` = 0 ]; then
 | 
						|
			echo $1 >> $statusFile
 | 
						|
		fi
 | 
						|
	else
 | 
						|
		echo $1 >> $statusFile
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
rm_fromStatus() {
 | 
						|
        if [ -f $statusFile ]; then
 | 
						|
                sed -i '/^'$1'$/d' $statusFile
 | 
						|
        fi
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#===============================================================================================#
 | 
						|
#===============================================================================================#
 | 
						|
if [ ! -f $DBG_FILE ]; then
 | 
						|
	echo "ERROR: debugFiles is missing"
 | 
						|
	exit
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$#" -eq 0 ]; then
 | 
						|
	cat $DBG_FILE
 | 
						|
	echo "    "
 | 
						|
	echo "Choose files by id: "
 | 
						|
	file=`read_fid`
 | 
						|
	flag="-l"
 | 
						|
	operation=`read_operation`
 | 
						|
	persistent=`read_persistent`
 | 
						|
elif [ "$#" -eq 1 ]; then
 | 
						|
	if [ $1 == "status" ]; then
 | 
						|
		if [ -f $statusFile ]; then
 | 
						|
			cat $statusFile
 | 
						|
			exit 1
 | 
						|
		fi
 | 
						|
		echo ""
 | 
						|
		exit 1
 | 
						|
	elif [ $1 == "-h" ] || [ $1 == "help" ]; then
 | 
						|
		cat $HELP
 | 
						|
		exit 1
 | 
						|
	else
 | 
						|
		echo "Usage: usb_debug -h" >&2
 | 
						|
		echo "Usage: usb_debug status" >&2
 | 
						|
		echo "Usage: usb_debug [-l] [OPERATION] [PERSISTENT] [LIST]" >&2
 | 
						|
		echo "Usage: usb_debug [-f] [OPERATION] [PERSISTENT] [PATH]" >&2
 | 
						|
		echo "Usage: usb_debug [all][OPERATION] [PERSISTENT]" >&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
elif [ "$#" -eq 2 ]; then
 | 
						|
		if [ $1 != "all" ]; then
 | 
						|
			echo "Usage: usb_debug [-l] [OPERATION] [PERSISTENT] [LIST]" >&2
 | 
						|
			echo "Usage: usb_debug [-f] [OPERATION] [PERSISTENT] [PATH]" >&2
 | 
						|
			echo "Usage: usb_debug [all][OPERATION] [PERSISTENT]" >&2
 | 
						|
			exit 1
 | 
						|
		fi
 | 
						|
		if [ $2 != "on" ] && [ $2 != "off" ]; then
 | 
						|
			echo "Illegal operation choice (must be 'on' or 'off')."
 | 
						|
			exit 2
 | 
						|
		fi
 | 
						|
		if [ $2 = "on" ]; then
 | 
						|
			flag=$1
 | 
						|
			operation=$2
 | 
						|
			file=`cat $DBG_FILE| cut -f 2| grep -v ___`
 | 
						|
			persistent=`read_persistent`
 | 
						|
		else
 | 
						|
			flag=$1
 | 
						|
			operation=$2
 | 
						|
			file=`cat $DBG_FILE| cut -f 2| grep -v ___`
 | 
						|
			persistent="y"
 | 
						|
		fi
 | 
						|
elif [ "$#" -ge 3 ]; then
 | 
						|
	if [ $1 != "-l" ] && [ $1 != "-f" ] && [ $1 != "all" ]; then
 | 
						|
		echo "Usage: usb_debug [-l] [OPERATION] [PERSISTENT] [LIST]" >&2
 | 
						|
		echo "Usage: usb_debug [-f] [OPERATION] [PERSISTENT] [PATH]" >&2
 | 
						|
		echo "Usage: usb_debug [all][OPERATION] [PERSISTENT]" >&2
 | 
						|
		exit 1
 | 
						|
	fi
 | 
						|
	if [ $2 != "on" ] && [ $2 != "off" ]; then
 | 
						|
		echo "Illegal operation choice (must be 'on' or 'off')."
 | 
						|
		exit 2
 | 
						|
	fi
 | 
						|
	if [ $1 = "-l" ]; then
 | 
						|
		if [ `legal_fileName $3` = "1" ]; then
 | 
						|
			if [ "$#" -ge 4 ]; then
 | 
						|
			#handle more then one file - default presistance=n
 | 
						|
			if [ `legal_fileNames 3 "$@"` = "0" ]; then
 | 
						|
				echo "Illegal file name."
 | 
						|
				exit 4
 | 
						|
			fi
 | 
						|
				flag=$1
 | 
						|
				operation=$2
 | 
						|
				persistent="n"
 | 
						|
				file=`get_fileList 3 "$@"`
 | 
						|
			else
 | 
						|
			#case just one file name
 | 
						|
				flag=$1
 | 
						|
				operation=$2
 | 
						|
				persistent="n"
 | 
						|
				file=$3
 | 
						|
			fi
 | 
						|
		elif [ $3 = "y" ] || [ $3 = "n" ]; then
 | 
						|
			if [ `legal_fileName $4` = "0" ]; then
 | 
						|
				echo "Illegal file name."
 | 
						|
				exit 4
 | 
						|
			fi
 | 
						|
			if [ "$#" -ge 5 ]; then
 | 
						|
				#handle more then one file -  presistance=$3
 | 
						|
				if [ `legal_fileNames 4 "$@"` = "0" ]; then
 | 
						|
					echo "Illegal file name."
 | 
						|
					exit 5
 | 
						|
				fi
 | 
						|
				flag=$1
 | 
						|
				operation=$2
 | 
						|
				persistent=$3
 | 
						|
				file=`get_fileList 4 "$@"`
 | 
						|
			else
 | 
						|
				#just one file
 | 
						|
				flag=$1
 | 
						|
				operation=$2
 | 
						|
				persistent=$3
 | 
						|
				file=$4
 | 
						|
			fi
 | 
						|
		else
 | 
						|
			echo "Illegal file name or persistent choice (persistent must be 'y' or 'n')."
 | 
						|
			exit 4
 | 
						|
		fi
 | 
						|
	elif [ $1 = "-f" ]; then
 | 
						|
		if [ -f $3 ]; then
 | 
						|
			flag=$1
 | 
						|
			operation=$2
 | 
						|
			persistent="n"
 | 
						|
			file=`cat $3`
 | 
						|
			if [ `legal_fileNames 1 $file` = 0 ]; then
 | 
						|
				echo "Illegal file name (in the input file)"
 | 
						|
				exit 3
 | 
						|
			fi
 | 
						|
		elif [ $3 = "y" ] || [ $3 = "n" ]; then
 | 
						|
			if [ "$#" -eq 3 ]; then
 | 
						|
				echo "Usage: usb_debug [-f] [OPERATION] [PERSISTENT] [PATH]" >&2
 | 
						|
				exit 3
 | 
						|
			fi
 | 
						|
			if [ -f $4 ]; then
 | 
						|
				flag=$1
 | 
						|
				operation=$2
 | 
						|
				persistent=$3
 | 
						|
				file=`cat $4`
 | 
						|
				if [ `legal_fileNames 1 "$file"` = 0 ]; then
 | 
						|
					echo "Illegal file name (in the input file)"
 | 
						|
					exit 4
 | 
						|
				fi
 | 
						|
			else
 | 
						|
				echo "Illegal input file."
 | 
						|
			exit 4
 | 
						|
			fi
 | 
						|
		else
 | 
						|
			echo "Illegal file or persistent choice (persistent must be 'y' or 'n')."
 | 
						|
			exit 3
 | 
						|
		fi
 | 
						|
	else
 | 
						|
	# $1=all
 | 
						|
		if [ $3 != "y" ] && [ $3 != "n" ]; then
 | 
						|
			echo "Illegal persistent choice (persistent must be 'y' or 'n')."
 | 
						|
			exit 3
 | 
						|
		fi
 | 
						|
		flag=$1
 | 
						|
		operation=$2
 | 
						|
		file=`cat $DBG_FILE| cut -f 2| grep -v ___`
 | 
						|
		persistent=$3
 | 
						|
	fi
 | 
						|
else
 | 
						|
	echo "Usage: usb_debug [-l] [OPERATION] [PERSISTENT] [LIST]" >&2
 | 
						|
	echo "Usage: usb_debug [-f] [OPERATION][PERSISTENT] [PATH]" >&2
 | 
						|
	echo "Usage: usb_debug [all][OPERATION] [PERSISTENT]" >&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
#===============================================================================================
 | 
						|
#===============================================================================================
 | 
						|
 | 
						|
# mount debugfs just one time
 | 
						|
if [ `mount | grep -c debugfs` = 0 ]; then
 | 
						|
	mkdir /data/dbg
 | 
						|
	mount -t debugfs none /data/dbg
 | 
						|
fi
 | 
						|
 | 
						|
if [ $persistent = "y" ]; then
 | 
						|
	if [ $operation = "off" ]; then
 | 
						|
		if [  $flag = "all" ]; then
 | 
						|
			rm -f $DEFAULT_FILE
 | 
						|
		else
 | 
						|
			echo "Change will have no effect on default file- Illegal combination of persistent and disable debug messages"
 | 
						|
		fi
 | 
						|
	else
 | 
						|
		rm -f $DEFAULT_FILE
 | 
						|
		echo $file > $DEFAULT_FILE
 | 
						|
	fi
 | 
						|
fi
 | 
						|
 | 
						|
if [ $operation = "on" ]; then
 | 
						|
	for f in $file
 | 
						|
	do
 | 
						|
		`add_toStatus $f`
 | 
						|
		f="$f.c"
 | 
						|
		echo -n 'file $f +p' > /data/dbg/dynamic_debug/control
 | 
						|
	done
 | 
						|
else
 | 
						|
	for f in $file
 | 
						|
	do
 | 
						|
		`rm_fromStatus $f`
 | 
						|
		f="$f.c"
 | 
						|
		echo -n 'file $f -p' > /data/dbg/dynamic_debug/control
 | 
						|
	done
 | 
						|
fi
 |