#
# /etc/rc.serial
# Initializes the serial ports on your system
#
# chkconfig: 2345 50 75
# description: This initializes the settings of the serial port
#
# FILE_VERSION: 19981128
#
# Distributed with setserial and the serial driver. We need to use the
# FILE_VERSION field to assure that we don't overwrite a newer rc.serial
# file with a newer one.
#
# XXXX For now, the autosave feature doesn't work if you are
# using the multiport feature; it doesn't save the multiport configuration
# (for now). Autosave also doesn't work for the hayes devices.
# Will fix later...
#
#
RCLOCKFILE=/var/lock/subsys/serial
DIRS="/lib/modules/`uname -r`/kernel/drivers/char /lib/modules/`uname -r`/misc /lib/modules /usr/lib/modules ."
PATH=/bin:/sbin:/usr/bin
DRIVER=serial
DRIVER_NAME=serial
MODULE_REGEXP="serial\b"
ALLDEVS="/dev/ttyS?"
if /bin/ls /dev/ttyS?? >& /dev/null ; then
ALLDEVS="$ALLDEVS /dev/ttyS??"
fi
SETSERIAL=""
if test -x /bin/setserial ; then
SETSERIAL=/bin/setserial
elif test -x /sbin/setserial ; then
SETSERIAL=/sbin/setserial
fi
#
# See if the serial driver is loaded
#
LOADED=""
if test -f /proc/devices; then
if grep -q " ttyS$" /proc/devices ; then
LOADED="yes"
else
LOADED="no"
fi
fi
#
# Find the serial driver
#
for i in $DIRS
do
if test -z "$MODULE" -a -f $i/$DRIVER.o ; then
MODULE=$i/$DRIVER.o
fi
done
if ! test -f /proc/modules ; then
MODULE=""
fi
#
# Handle System V init conventions...
#
case $1 in
start)
action="start";
;;
stop)
action="stop";
;;
*)
action="start";
esac
if test $action = stop ; then
if test -n ${SETSERIAL} -a "$LOADED" != "no" -a \
"$(head -1 /etc/serial.conf 2>/dev/null)" = "###AUTOSAVE###" ; then
echo -n "Saving state of serial devices... "
grep "^#" /etc/serial.conf > /etc/.serial.conf.new
${SETSERIAL} -G -g ${ALLDEVS} \
2>/dev/null >> /etc/.serial.conf.new
mv /etc/serial.conf /etc/.serial.conf.old
mv /etc/.serial.conf.new /etc/serial.conf
echo "done."
fi
if test -n $MODULE ; then
module=`grep $MODULE_REGEXP /proc/modules | awk '{print $1}'`
if test -z "$module" ; then
echo "The $DRIVER_NAME driver is not loaded."
rm -f ${RCLOCKFILE}
exit 0
fi
if rmmod $module ; then :; else
echo "The $DRIVER_NAME driver could NOT be unloaded."
exit 1;
fi
echo "The $DRIVER_NAME driver has been unloaded."
fi
rm -f ${RCLOCKFILE}
exit 0
fi
#
# If not stop, it must be a start....
#
if test -n "$MODULE" -a "$LOADED" != "yes" ; then
MAPFILE=$(mktemp /tmp/$DRIVER.map.XXXXXX) \
|| { echo "Couldn't create secure temporary file"; exit 1; }
ERRORS=$(mktemp /tmp/$DRIVER.XXXXXX) \
|| { echo "Couldn't create secure temporary file"; exit 1; }
if insmod -fm $MODULE $DRIVER_ARG \
> "${MAPFILE}" 2> "${ERRORS}"; then :;
else
echo "Couldn't load $DRIVER_NAME driver."
echo "See error logs in ${ERRORS}"
exit 1
fi
/bin/rm -f "${ERRORS}"
fi
if test -f "/etc/serial.conf" ; then
if test -n "${SETSERIAL}" ; then
grep -v ^# < /etc/serial.conf | while read device args
do
${SETSERIAL} -z $device $args 2>/dev/null
done
fi
else
echo "###AUTOSAVE###" > /etc/serial.conf
fi
touch ${RCLOCKFILE}
${SETSERIAL} -bg ${ALLDEVS} 2>/dev/null