Skip to contentSkip to conversation

runqemu: change terminal's INTR key in 'serial' mode

PATCH In review Trevor Woerner 2 participants 2 messages Dec 21, 2012 – Dec 22, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 runqemu: change terminal's INTR key in 'serial' mode

If you are using an image in '-serial stdio' mode, temporarily change the terminal's interrupt character to 'Ctrl-]' for the duration of the image run. In this way, hitting 'Ctrl-C' for something running in the image doesn't accidentally abort the entire qemu session.

---
 scripts/runqemu          | 2 ++
 scripts/runqemu-internal | 7 +++++++
 2 files changed, 9 insertions(+)
scripts/runqemu +2 -0
index 190e3b4..9418ebd 100755
@@ -64,6 +64,7 @@ LAZY_ROOTFS=""
 SCRIPT_QEMU_OPT=""
 SCRIPT_QEMU_EXTRA_OPT=""
 SCRIPT_KERNEL_OPT=""
+SERIALSTDIO=""
 
 # Determine whether the file is a kernel or QEMU image, and set the
 # appropriate variables
@@ -138,6 +139,7 @@ while true; do
         "serial")
             SCRIPT_QEMU_OPT="$SCRIPT_QEMU_OPT -serial stdio"
             SCRIPT_KERNEL_OPT="$SCRIPT_KERNEL_OPT console=ttyS0"
+            SERIALSTDIO="1"
             ;;
         "qemuparams="*)
             SCRIPT_QEMU_EXTRA_OPT="${arg##qemuparams=}"
scripts/runqemu-internal +7 -0
index 7fbe0a0..a11220d 100755
@@ -444,6 +444,7 @@ if [ "$MACHINE" = "qemush4" ]; then
         #KERNCMDLINE="root=/dev/hda console=ttyS0 console=tty0 $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY"
         KERNCMDLINE="root=/dev/hda rw console=ttySC1 noiotrap earlyprintk=sh-sci.1 console=tty $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY"
         QEMUOPTIONS="$QEMU_NETWORK_CMD -M $MACHINE_SUBTYPE -hda $ROOTFS -no-reboot $QEMU_UI_OPTIONS -monitor null -serial vc -serial stdio"
+        SERIALSTDIO="1"
     fi
     if [ "$FSTYPE" = "nfs" ]; then
         if [ "$NFS_SERVER" = "192.168.7.1" -a ! -d "$NFS_DIR" ]; then
@@ -453,6 +454,7 @@ if [ "$MACHINE" = "qemush4" ]; then
         fi
         KERNCMDLINE="root=/dev/nfs console=ttySC1 noiotrap earlyprintk=sh-sci.1 console=tty nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY"
         QEMUOPTIONS="$QEMU_NETWORK_CMD -M $MACHINE_SUBTYPE -no-reboot $QEMU_UI_OPTIONS -monitor null -serial vc -serial stdio"
+        SERIALSTDIO="1"
     fi
 fi
 
@@ -565,6 +567,11 @@ then
 fi
 fi
 
+if [ "x$SERIALSTDIO" = "x1" ]; then
+        echo "Interrupt character is '^]'"
+        stty intr ^]
+fi
+
 echo "Running $QEMU..."
 # -no-reboot is a mandatory option - see bug #100
 if [ "$FSTYPE" = "vmdk" ]; then
Signature · 1 line
1.8.0
Acked-by on v1 1/1
#1 lore raw
Quoted 6 lines · Trevor Woerner

If you are using an image in '-serial stdio' mode, temporarily change the terminal's interrupt character to 'Ctrl-]' for the duration of the image run. In this way, hitting 'Ctrl-C' for something running in the image doesn't accidentally abort the entire qemu session.

Nice addition - thanks a bunch for this!

Quoted 58 lines
---
  scripts/runqemu          | 2 ++
  scripts/runqemu-internal | 7 +++++++
  2 files changed, 9 insertions(+)
scripts/runqemu +2 -0
index 190e3b4..9418ebd 100755
@@ -64,6 +64,7 @@ LAZY_ROOTFS=""
  SCRIPT_QEMU_OPT=""
  SCRIPT_QEMU_EXTRA_OPT=""
  SCRIPT_KERNEL_OPT=""
+SERIALSTDIO=""
 
  # Determine whether the file is a kernel or QEMU image, and set the
  # appropriate variables
@@ -138,6 +139,7 @@ while true; do
          "serial")
              SCRIPT_QEMU_OPT="$SCRIPT_QEMU_OPT -serial stdio"
              SCRIPT_KERNEL_OPT="$SCRIPT_KERNEL_OPT console=ttyS0"
+            SERIALSTDIO="1"
              ;;
          "qemuparams="*)
              SCRIPT_QEMU_EXTRA_OPT="${arg##qemuparams=}"
scripts/runqemu-internal +7 -0
index 7fbe0a0..a11220d 100755
@@ -444,6 +444,7 @@ if [ "$MACHINE" = "qemush4" ]; then
          #KERNCMDLINE="root=/dev/hda console=ttyS0 console=tty0 $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY"
          KERNCMDLINE="root=/dev/hda rw console=ttySC1 noiotrap earlyprintk=sh-sci.1 console=tty $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY"
          QEMUOPTIONS="$QEMU_NETWORK_CMD -M $MACHINE_SUBTYPE -hda $ROOTFS -no-reboot $QEMU_UI_OPTIONS -monitor null -serial vc -serial stdio"
+        SERIALSTDIO="1"
      fi
      if [ "$FSTYPE" = "nfs" ]; then
          if [ "$NFS_SERVER" = "192.168.7.1" -a ! -d "$NFS_DIR" ]; then
@@ -453,6 +454,7 @@ if [ "$MACHINE" = "qemush4" ]; then
          fi
          KERNCMDLINE="root=/dev/nfs console=ttySC1 noiotrap earlyprintk=sh-sci.1 console=tty nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY"
          QEMUOPTIONS="$QEMU_NETWORK_CMD -M $MACHINE_SUBTYPE -no-reboot $QEMU_UI_OPTIONS -monitor null -serial vc -serial stdio"
+        SERIALSTDIO="1"
      fi
  fi
 
@@ -565,6 +567,11 @@ then
  fi
  fi
 
+if [ "x$SERIALSTDIO" = "x1" ]; then
+        echo "Interrupt character is '^]'"
+        stty intr ^]
+fi
+
  echo "Running $QEMU..."
  # -no-reboot is a mandatory option - see bug #100
  if [ "$FSTYPE" = "vmdk" ]; then
Signature · 3 lines
Scott Garman
Embedded Linux Engineer - Yocto Project
Intel Open Source Technology Center