qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] KVM: Add wrapper script around QEMU to test ker


From: Jan Kiszka
Subject: Re: [Qemu-devel] [PATCH] KVM: Add wrapper script around QEMU to test kernels
Date: Fri, 11 May 2012 11:05:11 -0300
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

On 2012-05-11 10:42, Alexander Graf wrote:
> 
> On 06.11.2011, at 14:54, Jan Kiszka wrote:
> 
>> On 2011-08-24 23:38, Alexander Graf wrote:
>>> On LinuxCon I had a nice chat with Linus on what he thinks kvm-tool
>>> would be doing and what he expects from it. Basically he wants a
>>> small and simple tool he and other developers can run to try out and
>>> see if the kernel they just built actually works.
>>>
>>> Fortunately, QEMU can do that today already! The only piece that was
>>> missing was the "simple" piece of the equation, so here is a script
>>> that wraps around QEMU and executes a kernel you just built.
>>>
>>> If you do have KVM around and are not cross-compiling, it will use
>>> KVM. But if you don't, you can still fall back to emulation mode and
>>> at least check if your kernel still does what you expect. I only
>>> implemented support for s390x and ppc there, but it's easily extensible
>>> to more platforms, as QEMU can emulate (and virtualize) pretty much
>>> any platform out there.
>>>
>>> If you don't have qemu installed, please do so before using this script. 
>>> Your
>>> distro should provide a package for it (might even call it "kvm"). If not,
>>> just compile it from source - it's not hard!
>>>
>>> To quickly get going, just execute the following as user:
>>>
>>>    $ ./Documentation/run-qemu.sh -r / -a init=/bin/bash
>>>
>>> This will drop you into a shell on your rootfs.
>>>
>>> Happy hacking!
>>>
>>> Signed-off-by: Alexander Graf <address@hidden>
>>>
>>> ---
>>>
>>> v1 -> v2:
>>>
>>>  - fix naming of QEMU
>>>  - use grep -q for has_config
>>>  - support multiple -a args
>>>  - spawn gdb on execution
>>>  - pass through qemu options
>>>  - dont use qemu-system-x86_64 on i386
>>>  - add funny sentence to startup text
>>>  - more helpful error messages
>>> ---
>>> scripts/run-qemu.sh |  334 
>>> +++++++++++++++++++++++++++++++++++++++++++++++++++
>>> 1 files changed, 334 insertions(+), 0 deletions(-)
>>> create mode 100755 scripts/run-qemu.sh
>>>
>>> diff --git a/scripts/run-qemu.sh b/scripts/run-qemu.sh
>>> new file mode 100755
>>> index 0000000..5d4e185
>>> --- /dev/null
>>> +++ b/scripts/run-qemu.sh
>>> @@ -0,0 +1,334 @@
>>> +#!/bin/bash
>>> +#
>>> +# QEMU Launcher
>>> +#
>>> +# This script enables simple use of the KVM and QEMU tool stack for
>>> +# easy kernel testing. It allows to pass either a host directory to
>>> +# the guest or a disk image. Example usage:
>>> +#
>>> +# Run the host root fs inside a VM:
>>> +#
>>> +# $ ./scripts/run-qemu.sh -r /
>>> +#
>>> +# Run the same with SDL:
>>> +#
>>> +# $ ./scripts/run-qemu.sh -r / --sdl
>>> +# 
>>> +# Or with a PPC build:
>>> +#
>>> +# $ ARCH=ppc ./scripts/run-qemu.sh -r /
>>> +# 
>>> +# PPC with a mac99 model by passing options to QEMU:
>>> +#
>>> +# $ ARCH=ppc ./scripts/run-qemu.sh -r / -- -M mac99
>>> +#
>>> +
>>> +USE_SDL=
>>> +USE_VNC=
>>> +USE_GDB=1
>>> +KERNEL_BIN=arch/x86/boot/bzImage
>>> +MON_STDIO=
>>> +KERNEL_APPEND2=
>>> +SERIAL=ttyS0
>>> +SERIAL_KCONFIG=SERIAL_8250
>>> +BASENAME=$(basename "$0")
>>> +
>>> +function usage() {
>>> +   echo "
>>> +$BASENAME allows you to execute a virtual machine with the Linux kernel
>>> +that you just built. To only execute a simple VM, you can just run it
>>> +on your root fs with \"-r / -a init=/bin/bash\"
>>> +
>>> +   -a, --append parameters
>>> +           Append the given parameters to the kernel command line.
>>> +
>>> +   -d, --disk image
>>> +           Add the image file as disk into the VM.
>>> +
>>> +   -D, --no-gdb
>>> +           Don't run an xterm with gdb attached to the guest.
>>> +
>>> +   -r, --root directory
>>> +           Use the specified directory as root directory inside the guest.
>>> +
>>> +   -s, --sdl
>>> +           Enable SDL graphical output.
>>> +
>>> +   -S, --smp cpus
>>> +           Set number of virtual CPUs.
>>> +
>>> +   -v, --vnc
>>> +           Enable VNC graphical output.
>>> +
>>> +Examples:
>>> +
>>> +   Run the host root fs inside a VM:
>>> +   $ ./scripts/run-qemu.sh -r /
>>> +
>>> +   Run the same with SDL:
>>> +   $ ./scripts/run-qemu.sh -r / --sdl
>>> +   
>>> +   Or with a PPC build:
>>> +   $ ARCH=ppc ./scripts/run-qemu.sh -r /
>>> +   
>>> +   PPC with a mac99 model by passing options to QEMU:
>>> +   $ ARCH=ppc ./scripts/run-qemu.sh -r / -- -M mac99
>>> +"
>>> +}
>>> +
>>> +function require_config() {
>>> +   if [ "$(grep CONFIG_$1=y .config)" ]; then
>>> +           return
>>> +   fi
>>> +
>>> +   echo "You need to enable CONFIG_$1 for run-qemu to work properly"
>>> +   exit 1
>>> +}
>>> +
>>> +function has_config() {
>>> +   grep -q "CONFIG_$1=y" .config
>>> +}
>>> +
>>> +function drive_if() {
>>> +   if has_config VIRTIO_BLK; then
>>> +           echo virtio
>>> +   elif has_config ATA_PIIX; then
>>> +           echo ide
>>
>> + require_config "BLK_DEV_SD"
>>
>> Maybe there should also be a warning if no standard FS (ext[34], btrfs,
>> xfs etc.) is build into the kernel.
>>
>> Another thing, but that's just a recommendation for initrd-free mode:
>> DEVTMPFS_MOUNT
>>
>>> +   else
>>> +           echo "\
>>> +Your kernel must have either VIRTIO_BLK or ATA_PIIX
>>> +enabled for block device assignment" >&2
>>> +           exit 1
>>> +   fi
>>> +}
>>> +
>>> +GETOPT=`getopt -o a:d:Dhr:sS:v --long 
>>> append,disk:,no-gdb,help,root:,sdl,smp:,vnc \
>>> +   -n "$(basename \"$0\")" -- "$@"`
>>> +
>>> +if [ $? != 0 ]; then
>>> +   echo "Terminating..." >&2
>>> +   exit 1
>>> +fi
>>> +
>>> +eval set -- "$GETOPT"
>>> +
>>> +while true; do
>>> +   case "$1" in
>>> +   -a|--append)
>>> +           KERNEL_APPEND2="$KERNEL_APPEND2 $KERNEL_APPEND2"
>>
>> That should be
>>
>> KERNEL_APPEND2="$KERNEL_APPEND2 $2"
>>
>>> +           shift
>>> +           ;;
>>> +   -d|--disk)
>>> +           QEMU_OPTIONS="$QEMU_OPTIONS -drive \
>>> +                   file=$2,if=$(drive_if),cache=unsafe"
>>
>>              if [ $? != 0 ]; then
>>                      exit $?
>>              fi
> 
> Not sure I understand this one. There's no program executing here...

Not sure either. Does drive_if exit the complete script when it fails?
Maybe it was related to this, give it a try again.

Jan

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]