# # /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