diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/runqemu-internal | 180 |
1 files changed, 89 insertions, 91 deletions
diff --git a/scripts/runqemu-internal b/scripts/runqemu-internal index 7ae077766c..ac1c703c53 100755 --- a/scripts/runqemu-internal +++ b/scripts/runqemu-internal @@ -38,49 +38,6 @@ mem_set=`expr "$SCRIPT_QEMU_EXTRA_OPT" : '.*\(-m[[:space:]] *[0-9]*\)'` if [ ! -z "$mem_set" ] ; then #Get memory setting size from user input mem_size=`echo $mem_set | sed 's/-m[[:space:]] *//'` -else - case "$MACHINE" in - "qemux86") - mem_size=256 - ;; - "qemux86-64") - mem_size=256 - ;; - "qemuarm") - mem_size=128 - ;; - "qemuarm64") - mem_size=512 - ;; - "qemumicroblaze") - mem_size=256 - ;; - "qemumips"|"qemumips64") - mem_size=256 - ;; - "qemuppc") - mem_size=256 - ;; - "qemush4") - mem_size=1024 - ;; - "qemuzynq") - mem_size=1024 - ;; - *) - mem_size=64 - ;; - esac - -fi - -# QEMU_MEMORY has 'M' appended to mem_size -QEMU_MEMORY="$mem_size"M - -# We need to specify -m <mem_size> to overcome a bug in qemu 0.14.0 -# https://bugs.launchpad.net/ubuntu/+source/qemu-kvm/+bug/584480 -if [ -z "$mem_set" ] ; then - SCRIPT_QEMU_EXTRA_OPT="$SCRIPT_QEMU_EXTRA_OPT -m $mem_size" fi # This file is created when runqemu-gen-tapdevs creates a bank of tap @@ -267,26 +224,6 @@ else fi fi -case "$MACHINE" in - "qemuarm") ;; - "qemuarm64") ;; - "qemumicroblaze") ;; - "qemumips") ;; - "qemumipsel") ;; - "qemumips64") ;; - "qemush4") ;; - "qemuppc") ;; - "qemuarmv6") ;; - "qemuarmv7") ;; - "qemux86") ;; - "qemux86-64") ;; - "qemuzynq") ;; - *) - echo "Error: Unsupported machine type $MACHINE" - return 1 - ;; -esac - if [ ! -f "$KERNEL" -a "$IS_VM" = "false" ]; then echo "Error: Kernel image file $KERNEL doesn't exist" cleanup @@ -329,12 +266,25 @@ if [ "$FSTYPE" = "nfs" ]; then NFSRUNNING="true" fi -if [ "$MACHINE" = "qemuarm" -o "$MACHINE" = "qemuarmv6" -o "$MACHINE" = "qemuarmv7" ]; then + +set_mem_size() { + if [ ! -z "$mem_set" ] ; then + #Get memory setting size from user input + mem_size=`echo $mem_set | sed 's/-m[[:space:]] *//'` + else + mem_size=$1 + fi + # QEMU_MEMORY has 'M' appended to mem_size + QEMU_MEMORY="$mem_size"M + +} + +config_qemuarm() { + set_mem_size 128 QEMU=qemu-system-arm MACHINE_SUBTYPE=versatilepb export QEMU_AUDIO_DRV="none" QEMU_UI_OPTIONS="$QEMU_UI_OPTIONS" - # QEMU_UI_OPTIONS="$QEMU_UI_OPTIONS -force-pointer" if [ "${FSTYPE:0:3}" = "ext" -o "$FSTYPE" = "btrfs" -o "$FSTYPE" = "wic" ]; then KERNCMDLINE="root=$DROOT rw console=ttyAMA0,115200 console=tty $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY highres=off" QEMUOPTIONS="$QEMU_NETWORK_CMD -M ${MACHINE_SUBTYPE} $ROOTFS_OPTIONS -no-reboot $QEMU_UI_OPTIONS" @@ -354,9 +304,10 @@ if [ "$MACHINE" = "qemuarm" -o "$MACHINE" = "qemuarmv6" -o "$MACHINE" = "qemuarm if [ "$MACHINE" = "qemuarmv7" ]; then QEMUOPTIONS="$QEMUOPTIONS -cpu cortex-a8" fi -fi +} -if [ "$MACHINE" = "qemuarm64" ]; then +config_qemuarm64() { + set_mem_size 512 QEMU=qemu-system-aarch64 QEMU_NETWORK_CMD="-netdev tap,id=net0,ifname=$TAP,script=no,downscript=no -device virtio-net-device,netdev=net0 " @@ -383,9 +334,10 @@ if [ "$MACHINE" = "qemuarm64" ]; then KERNCMDLINE="root=/dev/nfs nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw console=ttyAMA0,38400 mem=$QEMU_MEMORY highres=off $KERNEL_NETWORK_CMD" QEMUOPTIONS="$QEMU_NETWORK_CMD -machine virt -cpu cortex-a57 $QEMU_UI_OPTIONS" fi -fi +} -if [ "$MACHINE" = "qemux86" ]; then +config_qemux86() { + set_mem_size 256 QEMU=qemu-system-i386 if [ "$KVM_ACTIVE" = "yes" ]; then CPU_SUBTYPE=kvm32 @@ -421,9 +373,10 @@ if [ "$MACHINE" = "qemux86" ]; then # Currently oprofile's event based interrupt mode doesn't work(Bug #828) in # qemux86 and qemux86-64. We can use timer interrupt mode for now. KERNCMDLINE="$KERNCMDLINE oprofile.timer=1" -fi +} -if [ "$MACHINE" = "qemux86-64" ]; then +config_qemux86_64() { + set_mem_size 256 QEMU=qemu-system-x86_64 if [ "$KVM_ACTIVE" = "yes" ]; then CPU_SUBTYPE=kvm64 @@ -457,9 +410,10 @@ if [ "$MACHINE" = "qemux86-64" ]; then # Currently oprofile's event based interrupt mode doesn't work(Bug #828) in # qemux86 and qemux86-64. We can use timer interrupt mode for now. KERNCMDLINE="$KERNCMDLINE oprofile.timer=1" -fi +} -if [ "$MACHINE" = "qemumips" -o "$MACHINE" = "qemumipsel" -o "$MACHINE" = "qemumips64" ]; then +config_qemumips() { + set_mem_size 256 case "$MACHINE" in qemumips) QEMU=qemu-system-mips ;; qemumipsel) QEMU=qemu-system-mipsel ;; @@ -481,9 +435,10 @@ if [ "$MACHINE" = "qemumips" -o "$MACHINE" = "qemumipsel" -o "$MACHINE" = "qemum KERNCMDLINE="root=/dev/nfs console=ttyS0 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" fi -fi +} -if [ "$MACHINE" = "qemuppc" ]; then +config_qemuppc() { + set_mem_size 256 QEMU=qemu-system-ppc MACHINE_SUBTYPE=mac99 CPU_SUBTYPE=G4 @@ -506,9 +461,10 @@ if [ "$MACHINE" = "qemuppc" ]; then KERNCMDLINE="root=/dev/nfs console=ttyS0 console=tty nfsroot=$NFS_SERVER:$NFS_DIR,$UNFS_OPTS rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" QEMUOPTIONS="$QEMU_NETWORK_CMD -cpu $CPU_SUBTYPE -M $MACHINE_SUBTYPE -no-reboot $QEMU_UI_OPTIONS" fi -fi +} -if [ "$MACHINE" = "qemush4" ]; then +config_qemush4() { + set_mem_size 1024 QEMU=qemu-system-sh4 MACHINE_SUBTYPE=r2d QEMU_UI_OPTIONS="$QEMU_UI_OPTIONS" @@ -528,30 +484,72 @@ if [ "$MACHINE" = "qemush4" ]; then QEMUOPTIONS="$QEMU_NETWORK_CMD -M $MACHINE_SUBTYPE -no-reboot $QEMU_UI_OPTIONS -monitor null -serial vc -serial stdio" SERIALSTDIO="1" fi -fi - -if [ "${FSTYPE:0:3}" = "ext" ]; then - KERNCMDLINE="$KERNCMDLINE rootfstype=$FSTYPE" -fi +} -if [ "$MACHINE" = "qemumicroblaze" ]; then - QEMU=qemu-system-microblazeel - QEMU_SYSTEM_OPTIONS="$QEMU_NETWORK_CMD -M petalogix-ml605 -serial mon:stdio" +config_qemuzynq() { + set_mem_size 1024 + QEMU=qemu-system-arm + QEMU_SYSTEM_OPTIONS="$QEMU_NETWORK_CMD -M xilinx-zynq-a9 -serial null -serial mon:stdio -dtb $KERNEL-$MACHINE.dtb" + # zynq serial ports are named 'ttyPS0' and 'ttyPS1', fixup the default values + SCRIPT_KERNEL_OPT=$(echo "$SCRIPT_KERNEL_OPT" | sed 's/console=ttyS/console=ttyPS/g') if [ "${FSTYPE:0:3}" = "ext" -o "${FSTYPE:0:4}" = "cpio" ]; then KERNCMDLINE="earlyprintk root=/dev/ram rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" QEMUOPTIONS="$QEMU_SYSTEM_OPTIONS -initrd $ROOTFS" fi -fi +} -if [ "$MACHINE" = "qemuzynq" ]; then - QEMU=qemu-system-arm - QEMU_SYSTEM_OPTIONS="$QEMU_NETWORK_CMD -M xilinx-zynq-a9 -serial null -serial mon:stdio -dtb $KERNEL-$MACHINE.dtb" - # zynq serial ports are named 'ttyPS0' and 'ttyPS1', fixup the default values - SCRIPT_KERNEL_OPT=$(echo "$SCRIPT_KERNEL_OPT" | sed 's/console=ttyS/console=ttyPS/g') +config_qemumicroblaze() { + set_mem_size 256 + QEMU=qemu-system-microblazeel + QEMU_SYSTEM_OPTIONS="$QEMU_NETWORK_CMD -M petalogix-ml605 -serial mon:stdio" if [ "${FSTYPE:0:3}" = "ext" -o "${FSTYPE:0:4}" = "cpio" ]; then KERNCMDLINE="earlyprintk root=/dev/ram rw $KERNEL_NETWORK_CMD mem=$QEMU_MEMORY" QEMUOPTIONS="$QEMU_SYSTEM_OPTIONS -initrd $ROOTFS" fi +} + +case "$MACHINE" in + "qemuarm" | "qemuarmv6" | "qemuarmv7") + config_qemuarm + ;; + "qemuarm64") + config_qemuarm64 + ;; + "qemux86") + config_qemux86 + ;; + "qemux86-64") + config_qemux86_64 + ;; + "qemumips" | "qemumipsel" | "qemumips64") + config_qemumips + ;; + "qemuppc") + config_qemuppc + ;; + "qemush4") + config_qemush4 + ;; + "qemuzynq") + config_qemuzynq + ;; + "qemumicroblaze") + config_qemumicroblaze + ;; + *) + echo "Error: Unsupported machine type $MACHINE" + return 1 + ;; +esac + +# We need to specify -m <mem_size> to overcome a bug in qemu 0.14.0 +# https://bugs.launchpad.net/ubuntu/+source/qemu-kvm/+bug/584480 +if [ -z "$mem_set" ] ; then + SCRIPT_QEMU_EXTRA_OPT="$SCRIPT_QEMU_EXTRA_OPT -m $mem_size" +fi + +if [ "${FSTYPE:0:3}" = "ext" ]; then + KERNCMDLINE="$KERNCMDLINE rootfstype=$FSTYPE" fi if [ "$FSTYPE" = "cpio.gz" ]; then |