[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#416310: grub-installer: serial console not properly enabled



tags 416310 pending
thanks

I have used the main ideas from Alex Owen's patch, but implemented some parts
a bit differently as I felt it could be further simplified.

Below the patch as committed in SVN. Comments welcome.

Cheers,
FJP

--- grub-installer      (revision 46252)
+++ grub-installer      (working copy)
@@ -33,32 +33,42 @@
 }

 get_serial_console() {
-       local defconsole="$(sed -e 's/.*console=/console=/' /proc/cmdline)"
-       if echo "${defconsole}" | grep -q console=ttyS; then
-               local PORT="$(echo "${defconsole}" | sed -e 's%^console=ttyS%%' -e 's%,.*%%')"
-               local SPEED="$(echo "${defconsole}" | sed -e 's%^console=ttyS[0-9]\+,%%' -e 's% .*%%')"
-               local SERIAL="ttyS${PORT},${SPEED}"
-               echo "console=$SERIAL"
+       # Get the last 'console=' entry (if none, the whole string is returned)
+       local defconsole="$(sed -e 's/.*\(console=[^ ]*\).*/\1/' /proc/cmdline)"
+       if echo "$defconsole" | grep -q console=ttyS; then
+               echo "$defconsole"
        fi
 }

 grub_serial_console() {
        #$1=output of get_serial_console
-       local unit=$(echo $1 | sed -e 's%^console=ttyS%%' -e 's%,.*%%')
-       local speed=$(echo $1 | sed -e 's%^console=ttyS[0-9]\+,%%' -e 's%[^(0-9)].*%%')
-       local parity=$(echo $1 | sed -e 's%^console=ttyS[0-9]\+,[0-9]\+%%' -e 's%[78].*%%')
+       local serconsole=${1##console=}
+       local device=${serconsole%%,*}
+       local unit=${device##ttyS}
+       local options=""
+       if echo $serconsole | grep -q ","; then
+               options=${serconsole##*,}
+       fi
+       local speed=$(echo "$options" | sed -e 's/^\([0-9]\+\).*$/\1/')
+       options=${options##${speed}}
+       local parity=${options:0:1}
+       local word=${options:2:1}
+       if [ -z "$speed" ]; then
+               speed="9600"
+       fi
        case "$parity" in
-               "n") local parity="no" ;;
-               "e") local parity="even" ;;
-               "o") local parity="odd" ;;
-               *)   local parity="" ;;
+               n) parity="--parity=no" ;;
+               e) parity="--parity=even" ;;
+               o) parity="--parity=odd" ;;
+               *) parity="" ;;
        esac
-       local word=$(echo $1 | sed -e 's%^console=ttyS[0-9]\+,[0-9]\+[oen]%%' -e 's%r%%')
-       local flow=$(echo $1 | sed -e 's%^console=ttyS[0-9]\+,[0-9]\+[oen][78]%%')
+       if [ "$word" ]; then
+               word="--word=$word"
+       fi

-       echo serial --unit=$unit --speed=$speed --word=$word --parity=$parity --stop=1
+       echo serial --unit=$unit --speed=$speed $word $parity --stop=1
        echo terminal serial
-       }
+}

 serial="$(get_serial_console)"

Attachment: pgpFG8N65YzTa.pgp
Description: PGP signature


Reply to: