#!/bin/sh
###############################################################################
# This script is used to automatically set up the serial console(s) on startup.
# The variable SERIAL_CONSOLES can be set in meta/conf/machine/*.conf.
# Script enhancement has been done based on Bug YOCTO #10844.
# Most of the information is retrieved from /proc virtual filesystem containing
# all the runtime system information (eg. system memory, device mount, etc).
###############################################################################

# Get active serial filename.
active_serial=$(grep "serial" /proc/tty/drivers | cut -d/ -f1 | sed "s/ *$//")

# Rephrase input parameter from ttyS target index (ttyS1, ttyS2, ttyAMA0, etc).
runtime_tty=$(echo $2 | grep -oh '[0-9]\+')

# busybox' getty does this itself, util-linux' agetty needs extra help
getty="/sbin/getty"
case $(readlink -f "${getty}") in
    */busybox*)
        ;;
    *)
        if [ -x "/usr/bin/setsid" ] ; then
            setsid="/usr/bin/setsid"
        fi
        ;;
esac

# Backup $IFS.
DEFAULT_IFS=$IFS
# Customize Internal Field Separator.
IFS="$(printf '\n\t')"

for line in $active_serial; do
	# Check we have the file containing current active serial target index.
	if [ -e "/proc/tty/driver/$line" ]
        then
		# Remove all unknown entries and discard the first line (desc).
		activetty=$(grep -v "unknown" "/proc/tty/driver/$line" \
			    | tail -n +2 | grep -oh "^\s*\S*[0-9]\+")
		for active in $activetty; do
			# If indexes do match then enable the serial console.
			if [ $active -eq $runtime_tty ]
			then
				if [ -c /dev/$2 ]
				then
				    ${setsid:-} ${getty} -L $1 $2 $3
				fi
				break
			fi
		done
	fi
done

# Restore $IFS.
IFS=$DEFAULT_IFS
