精华内容
下载资源
问答
  • 8.3 Qemu启动参数管理

    千次阅读 2015-07-26 17:05:59
    本节分析qemu虚拟机如何管理启动参数


    8.3.1参数初始化流程

    其代码位于vl.c(main.c)

    a)  判断是否使用default设置 

    optind = 1;

    popt = lookup_opt(argc, argv,&optarg, &optind);

    switch (popt->index) {

    case QEMU_OPTION_nodefconfig:

    defconfig= false;

    break;

    caseQEMU_OPTION_nouserconfig:

    userconfig= false;

    break;

    }

    b)  若使用default设置,则

    if (defconfig)

    ret =qemu_read_default_config_files(userconfig);

    c)  针对不同命令行参数,做不同预处理,这里看看QEMU_OPTION_hda的流程

    popt = lookup_opt(argc, argv,&optarg, &optind);

    switch(popt->index) {

    case QEMU_OPTION_hda:

    {

    charbuf[256];

    if(cyls == 0)

    snprintf(buf,sizeof(buf), "%s", HD_OPTS);

    else

    snprintf(buf,sizeof(buf), "%s,cyls=%d,heads=%d,secs=%d%s",

    HD_OPTS, cyls, heads, secs,

    translation== BIOS_ATA_TRANSLATION_LBA ?

    ",trans=lba":

    translation== BIOS_ATA_TRANSLATION_NONE ?

    ",trans=none": "");

    drive_add(IF_DEFAULT,0, optarg, buf);

    break;

    }

    }

    d)  参数的使用

    if(qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,&machine->use_scsi, 1) != 0)

    exit(1);

     

    8.3.2 代码分析

    (1) lookup_opt

             optind = 1;

              popt =lookup_opt(argc, argv, &optarg, &optind);

    lookup_opt 负责从

    a.argv中取出一个参数,并将optfind加1。

    b.从qemu_options列表中根据参数名进行匹配

    popt = qemu_options;

        for(;;) {

            if(!strcmp(popt->name, r + 1))

                break;

            popt++;

        }

    optarg = argv[optind++];

        *poptarg = optarg;

        *poptind = optind;

    return popt;

     

    static const QEMUOption qemu_options[] = {

        { "h", 0,QEMU_OPTION_h, QEMU_ARCH_ALL },

    #define QEMU_OPTIONS_GENERATE_OPTIONS

    #include "qemu-options-wrapper.h"

        { NULL },

    };

    查看qemu-options-wrapper.h发现qemu-options.def定义了每个参数项。

    DEF("hda", HAS_ARG, QEMU_OPTION_hda,

    "-hda/-hdb file  use'file' as IDE hard disk 0/1 image\n", QEMU_ARCH_ALL)

     

    (2) Default config加载

    qemu_read_default_config_files ==》

        for (f = default_config_files;f->filename; f++) {

            if (!userconfig&& f->userconfig) {

                continue;

            }

            ret =qemu_read_config_file(f->filename);

            if (ret < 0&& ret != -ENOENT) {

                return ret;

            }

        }

    static struct defconfig_file {

        const char *filename;

        /* Indicates it is anuser config file (disabled by -no-user-config) */

        bool userconfig;

    } default_config_files[] = {

        { CONFIG_QEMU_CONFDIR"/qemu.conf",                   true },

        { CONFIG_QEMU_CONFDIR"/target-" TARGET_ARCH".conf", true },

        { NULL }, /* end oflist */

    };

     

    qemu_read_config_file ==》qemu_config_parse(f, vm_config_groups, filename);

       从配置文件中解析参数并用qemu_opts_create和qemu_opt_set设置参数和其值

     

    qemu_opts_create 将参数项添加到链表中,返回QemuOpts * opts:

       QTAILQ_INIT(&opts->head);

       QTAILQ_INSERT_TAIL(&list->head, opts, next);

     

    lists为vm_config_groups,其每个子项时一个list

    static QemuOptsList *vm_config_groups[32] = {

        &qemu_drive_opts,

        。。。。。。。

        NULL,

    };

     

    struct QemuOptsList {

        const char *name;

        const char*implied_opt_name;

        bool merge_lists;  /* Merge multiple uses of option into asingle list? */

        QTAILQ_HEAD(,QemuOpts) head;

        QemuOptDesc desc[];

    };

     

    static QemuOptsList qemu_drive_opts = {

        .name ="drive",

        .head =QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head),

        .desc = {

            {

                .name ="bus",

                .type =QEMU_OPT_NUMBER,

                .help ="bus number",

            },{

                .name ="unit",

                .type =QEMU_OPT_NUMBER,

                .help ="unit number (i.e. lun for scsi)",

            },{

                .name ="if",

                .type =QEMU_OPT_STRING,

                .help ="interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",

            },{

                .name ="index",

                .type =QEMU_OPT_NUMBER,

                .help ="index number",

            },

    .........

    一个oplist有多个desc.用于描述不同的子参数设子

     

    qemu_opt_set ==> opt_set(opts, name, value, false,&local_err);

    根据opt的子参数,设置opt项的值

    QemuOpt *opt;

        opt =g_malloc0(sizeof(*opt));

        opt->name =g_strdup(name);

        opt->opts = opts;

        if (prepend) {

           QTAILQ_INSERT_HEAD(&opts->head, opt, next);

        } else {

           QTAILQ_INSERT_TAIL(&opts->head, opt, next);

        }

     

    小结:(1) QemuOptsList *vm_config_groups 管理不同的配置类别;

          (2) QemuOptsList->head  链表管理用于添加的QemuOpts  *opts;

          (3) QemuOpts->head链表管理子项设置QemuOpt * opt

          (4) 每个QemuOpt ->desc 记录了它对应在opts中的那个子项参数

     

    (3) driver 参数分析

    QemuOpts *drive_add(BlockInterfaceType type, int index, constchar *file,

                        constchar *optstr)

    {

        opts =drive_def(optstr);  //取QemuOpts  *opts

        if (type !=IF_DEFAULT) {

            qemu_opt_set(opts,"if", if_name[type]);

        }

        if (index >= 0) {

            snprintf(buf,sizeof(buf), "%d", index);

            qemu_opt_set(opts,"index", buf);

        }

        if (file)

            qemu_opt_set(opts,"file", file);

        return opts;

    }

     

    drive_def ==》  qemu_opts_parse(qemu_find_opts("drive"),optstr, 0);

    a. qemu_find_opts("drive") 根据名称得到vm_config_groups中的数组一项qemu_drive_opts;

    b. qemu_opts_parse ==> opts_parse 在QemuOptsList的链表中搜索QemuOpts *opts,若不存在则创建。

     

    qemu_opts_foreach(qemu_find_opts("drive"),drive_init_func, &machine->use_scsi, 1);

    qemu_opts_foreach 遍历QemuOptsList, 的每个子项QemuOpts  *opts, 并为其调用callback:

    typedef int (*qemu_opts_loopfunc)(QemuOpts *opts, void *opaque);

     

    drive_init_func ==> drive_init: 取出参数的值

        bus_id  = qemu_opt_get_number(opts, "bus",0);

        unit_id =qemu_opt_get_number(opts, "unit", -1);

        index   = qemu_opt_get_number(opts,"index", -1);

    展开全文
  • qemu启动参数代码分析

    千次阅读 2013-12-19 20:14:47
    /usr/libexec/qemu-kvm -name rhel6.5 -S -M pc-0.15 -enable-kvm -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 8f338d83-41c1-9df6-d42f-851f13949359


    对于qemu的启动参数,qemu使用了一些基本的框架函数完成相关的解析,方便后续开发人员增加功能。

    这部分的代码还是有点复杂,所以自己总结一下。


    qemu-kvm启动参数的一个例子,使用libvirt创建的一个虚拟机。

    /usr/libexec/qemu-kvm 
    
    -name rhel6.5 
    
    -S
    -M pc-0.15 
    
    -enable-kvm 
    
    -m 1024 
    
    -realtime mlock=off 
    
    -smp 1,sockets=1,cores=1,threads=1 
    
    -uuid 8f338d83-41c1-9df6-d42f-851f13949359 
    
    -no-user-config 
    
    -nodefaults 
    
    -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/rhel6.5.monitor,server,nowait
    
    -mon chardev=charmonitor,id=monitor,mode=control 
    
    -rtc base=utc 
    
    -no-shutdown 
    
    -boot c 
    
    -drive file=/var/lib/libvirt/images/rhel6.5.img,if=none,id=drive-virtio-disk0,format=raw,cache=none
    
    -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0
    
    -drive if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw 
    
    -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 
    
    -netdev tap,fd=23,id=hostnet0 
    
    -device e1000,netdev=hostnet0,id=net0,mac=52:54:00:61:00:e7,bus=pci.0,addr=0x3
    
    -chardev pty,id=charserial0 
    
    -device isa-serial,chardev=charserial0,id=serial0
    -usb -device usb-tablet,id=input0
    -vnc 127.0.0.1:0 
    
    -vga cirrus 
    
    -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6
    


    qemu参数代码分析,以realtime这个参数为例进行说明:


    修改点一:

    qemu_add_opts(&qemu_realtime_opts);


    修改点二:

    static QemuOptsList qemu_realtime_opts = {
        .name = "realtime",
        .head = QTAILQ_HEAD_INITIALIZER(qemu_realtime_opts.head),
        .desc = {
            {
                .name = "mlock",
                .type = QEMU_OPT_BOOL,
            },
            { /* end of list */ }
        },
    };


    修改点三:

                case QEMU_OPTION_realtime:
                    opts = qemu_opts_parse(qemu_find_opts("realtime"), optarg, 0);
                    if (!opts) {
                        exit(1);
                    }
                    configure_realtime(opts);
                    break;


    修改点四:

    static void configure_realtime(QemuOpts *opts)
    {
        bool enable_mlock;

        enable_mlock = qemu_opt_get_bool(opts, "mlock", true);

        if (enable_mlock) {
            if (os_mlock() < 0) {
                fprintf(stderr, "qemu: locking memory failed\n");
                exit(1);
            }
        }
    }


    修改点五:

    qemu-option.hx中增加

    DEF("realtime", HAS_ARG, QEMU_OPTION_realtime,
        "-realtime [mlock=on|off]\n"
        "                run qemu with realtime features\n"
        "                mlock=on|off controls mlock support (default: on)\n",
        QEMU_ARCH_ALL)
    STEXI
    @item -realtime mlock=on|off
    @findex -realtime
    Run qemu with realtime features.
    mlocking qemu and guest memory can be enabled via @option{mlock=on}
    (enabled by default).
    ETEXI


    下面分析一下这些函数的处理流程:

    1.qemu_add_opts(&qemu_realtime_opts);

    qemu_add_opts函数在include/qemu/config-file.h中声明,在util/qemu-config.c中定义。

    在util/qemu-config.c中定义静态变量

    static QemuOptsList *vm_config_groups[32];
    static QemuOptsList *drive_config_groups[4];

    定义了数组,通过qemu_add_opts增加到vm_config_groups数组中。

    qemu_realtime_opts定义如下:

    static QemuOptsList qemu_realtime_opts = {
        .name = "realtime",
        .head = QTAILQ_HEAD_INITIALIZER(qemu_realtime_opts.head),
        .desc = {
            {
                .name = "mlock",
                .type = QEMU_OPT_BOOL,
            },
            { /* end of list */ }
        },
    };


    2.在vl.c的main函数中,调用lookup_opt,该函数根据argv当前执行的参数,查找qemu_options变量,返回对应的指针。

    返回的optarg和optind参数含义:optarg执行对应参数后对应的内容,比如-realtime后的mlock=off.

    返回值的类型是QemuOption,对应的是和qemu-option.hx中名称一致的变量指针,qemu_options变量在lv.c中定义。


    static const QEMUOption qemu_options[] = {
        { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL },
    #define QEMU_OPTIONS_GENERATE_OPTIONS
    #include "qemu-options-wrapper.h"
        { NULL },
    };

    typedef struct QEMUOption {
        const char *name;
        int flags;
        int index;
        uint32_t arch_mask;
    } QEMUOption;

    #define HAS_ARG 0x0001


    #include "qemu-options-wrapper.h"中通过宏分别处理QEMU_OPTIONS_GENERATE_ENUM、QEMU_OPTIONS_GENERATE_HELP、QEMU_OPTIONS_GENERATE_OPTIONS。

    具体的内容在#include "qemu-options.def"

    通过宏处理后,qemu_options内容被填充。


    QEMU_OPTIONS_GENERATE_HELP在如下场景下使用。

    static void help(int exitcode)
    {
        version();
        printf("usage: %s [options] [disk_image]\n\n"
               "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n",
                error_get_progname());

    #define QEMU_OPTIONS_GENERATE_HELP
    #include "qemu-options-wrapper.h"

        printf("\nDuring emulation, the following keys are useful:\n"
               "ctrl-alt-f      toggle full screen\n"
               "ctrl-alt-n      switch to virtual console 'n'\n"
               "ctrl-alt        toggle mouse and keyboard grab\n"
               "\n"
               "When using -nographic, press 'ctrl-a h' to get some help.\n");

        exit(exitcode);
    }


    枚举宏的定义在qemu-options.h中定义

    #ifndef _QEMU_OPTIONS_H_
    #define _QEMU_OPTIONS_H_

    enum {
    #define QEMU_OPTIONS_GENERATE_ENUM
    #include "qemu-options-wrapper.h"
    };

    #endif


    3.qemu_find_opts代码流程,返回对应名称的QemuOptsList变量。

    QemuOptsList *qemu_find_opts(const char *group)
    {
        QemuOptsList *ret;
        Error *local_err = NULL;

        ret = find_list(vm_config_groups, group, &local_err);
        if (error_is_set(&local_err)) {
            error_report("%s", error_get_pretty(local_err));
            error_free(local_err);
        }

        return ret;
    }

    调用qemu_opts_parse函数,根据QemuOptsList中定义的数据格式,生成QemuOpts变量,QemuOpts变量的格式定义如下:

    在include/qemu/option_int.h

    struct QemuOpt {
        const char   *name;
        const char   *str;

        const QemuOptDesc *desc;
        union {
            bool boolean;
            uint64_t uint;
        } value;

        QemuOpts     *opts;
        QTAILQ_ENTRY(QemuOpt) next;
    };

    struct QemuOpts {
        char *id;
        QemuOptsList *list;
        Location loc;
        QTAILQ_HEAD(QemuOptHead, QemuOpt) head;
        QTAILQ_ENTRY(QemuOpts) next;
    };


    最终可以调用qemu_opt_get_bool来获取参数的具体值。qemu参数框架已经根据定义的格式完成了解析。



    展开全文
  • QEMU命令行参数启动虚拟机

    千次阅读 2017-03-10 10:23:34
    使用virt-manager和libvirtd管理虚拟机,有方便的地方,但是不像直接使用 qemu命令行参数启动来的直观和方便。/usr/libexec/qemu-kvm -m 2048 -enable-kvm /home/w7qemu.qcow2 -spice port=5900,addr=0.0.0.0,...

    使用virt-manager和libvirtd管理虚拟机,有方便的地方,但是不像直接使用 qemu命令行参数启动来的直观和方便。

    /usr/libexec/qemu-kvm -m 2048 -enable-kvm /home/w7qemu.qcow2 -spice port=5900,addr=0.0.0.0,disable-ticketing,image-compression=off,streaming-video=all -device virtio-serial-pci -device virtserialport,chardev=charchannel0,name=com.redhat.spice.0 -chardev spicevmc,id=charchannel0,name=vdagent -net nic,model=virtio -vga qxl > spcore20170309b.txt 2>&1

    其中spice选项中的streaming-video=all是为了gstreamer video。目前qemu还没有参数来指定spice使用gstreamer 和codec,要通过qemu指定的话,需要修改代码编译qemu,这个倒是不困难。
    目前阶段我还是直接在spice的对外接口中,直接硬编码了使用gstreamer和具体codec。

    创建虚拟机的时候,要创建磁盘文件
    qemu-img create -f qcow2 /home/virth/w72.qcow2 50G

    展开全文
  • qemu启动vm后,如何从...qemu启动参数 启动命令: ${cmd_qemu_system} --enable-kvm \ -machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 4 -m 16384 \ -serial mon:stdio -nographic -s \ -ker...

    qemu启动vm后,如何从host ssh连接vm?

    qemu启动参数

    启动命令:

       ${cmd_qemu_system} --enable-kvm \
       -machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 4 -m 16384 \
       -serial mon:stdio -nographic -s \
       -kernel $bzImage_name \
       -device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
       -netdev user,id=unet,hostfwd=tcp::50959-:22 \
       -initrd $rootfs_cpio_path \
       -append "earlyprintk=ttyS0 console=ttyS0 debug" \
       -hda $DISK_NAME

    kenrel

    linux 的.config 需要支持CONFIG_VIRTIO_NET=y:

    [root@xxx /data/sandbox/open_linux/linux]
    #cat .config | grep CONFIG_VIRTIO_NET=y
    CONFIG_VIRTIO_NET=y

    buildroot

    实际上,我们知道,buildroot的目的就是要生成一个:rootfs.cpio.xz,然后,通过qemu命令启动一个vm的时候,执行参数-initrd 指定rootfs.cpio.xz 路径,就可以启动一个vm;

    ssh:

    我们需要预先在 buildroot 下载好 sshd, 这里,你会执行 make menuconfig 来给这个buildroot 指定sshd包要下载,之后,就会生成一个最新的.config文件,这个.config文件,应该包含:

    [root@xxx /data/sandbox/open_linux/buildroot]
    #cat .config |grep  BR2_PACKAGE_OPENSSH
    BR2_PACKAGE_OPENSSH=y

    在buildroot中 将sshd配置文件修改正确,然后重新编译buildroot生成最新的:rootfs.cpio.xz

    #vi ./output/target/etc/ssh/sshd_config
    PermitRootLogin yes
    PermitEmptyPasswords yes   #这是是允许登录为空密码

    通过这个rootfs.cpio.xz, 启动的vm 的sshd 配置:

    # vi /etc/ssh/sshd_config
    PermitRootLogin yes
    PermitEmptyPasswords yes   #这是是允许登录为空密码

    network:

    需要,现在buildroot中,增加配置eth0 :

    #cd buildroot/
    #vim output/target/etc/network/interfaces
    auto eth0
    iface eth0 inet static
        address 10.0.2.15
        netmask 255.0.0.0

    或者,进入vm后:

    ifconfig eth0 10.0.2.15
    ifconfig eth0 up

    如何使用虚拟bios?

    git clone https://github.com/coreboot/seabios seabios
    make menuconfig
    make clean && make -j 8

    在qemu启动中,增加bios:

    In the command to start guest, you can specify the BIOS:
    
    -bios seabios/out/bios.bin
    start_vm(){
        DISK_NAME="${muahao_tools_dir}/vm/disk02.raw"
        if [[ ! -e $DISK_NAME ]];then
            creat_image_01 "$DISK_NAME"
        fi
    
       ${cmd_qemu_system} --enable-kvm \
       -machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 4 -m 16384 \
       -serial mon:stdio -nographic -s \
       -kernel $bzImage_name \
       -device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
       -netdev user,id=unet,hostfwd=tcp::2222-:22 \
       -initrd $rootfs_cpio_path \
       -append "earlyprintk=ttyS0 console=ttyS0 debug" \
       -hda $DISK_NAME\
       -bios ./open_linux/seabios/out/bios.bin
    }

    A debug test:

    #vim src/boot.c
    static void
    boot_rom(u32 vector)
    {
        printf("Booting from ROM...\n");
        struct segoff_s so;
        so.segoff = vector;
        call_boot_entry(so, 0);
    }

    如何给vm增加虚拟盘?

    首先,你需要在host上创建一个image,然后,在使用qemu启动vm的时候,给qemu一个参数,挂载上这个image,启动guest后,可以在guest上 使用这个虚拟的硬盘;

    首先,在host上创建一个image:

    #qemu-img create -f raw /data/sandbox/images/vm_guest.img 5G 

    qemu启动参数:

       ${cmd_qemu_system} --enable-kvm \
       -machine type=q35,accel=kvm,kernel-irqchip=on -cpu host -smp 2 -m 4096 \
       -serial mon:stdio -nographic -s \
       -kernel $bzImage_name \
       -device virtio-net-pci,netdev=unet,mac=52:54:00:f1:26:a6 \
       -netdev user,id=unet,hostfwd=tcp::2222-:22 \
       -initrd $rootfs_cpio_path \
       -append "earlyprintk=ttyS0 console=ttyS0 debug" \
       -drive file=/data/sandbox/images/vm_guest.img,if=none,format=raw,id=nvme0 \   //<<<<<===增加
       -device nvme,drive=nvme0,serial=foo \     //<<<<<===增加
       -hda $DISK_NAME \
       -bios /data/sandbox/open_linux/seabios/out/bios.bin

    注意: 在linux中.config 一定要配置了nvme的支持

    #cat .config | grep NVME

    转载于:https://www.cnblogs.com/muahao/p/10451723.html

    展开全文
  • QEMU(3) 参数解析

    2019-09-03 23:18:36
    qemu启动参数sample QEMUOption QemuOptsList QemuOpts QemuOpt 第一轮解析 第二轮参数解析 qemu启动参数sample x86_64-softmmu/qemu-system-x86_64 -m 1024 -M q35 -enable-kvm \ -drive if=virtio,file=t...
  • qemu启动uboot

    千次阅读 2018-11-04 21:23:52
    我们使用qemu的时候一定要选对参数模型。可输入如下命令启动uboot, qemu-system-arm -M vexpress-a9 -m 256 -kernel u-boot --nographic 参数-M 机器模型 -m 运行内存MB -kernel 运行的内核程序(此处后面...
  • QEMU启动过程

    千次阅读 2017-03-27 16:47:08
    虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_RDWR); 第二步,创建虚拟机,获取到虚拟机句柄。 vmfd = ioctl(kvmfd, KVM_CREATE_VM, 0); 第三步,为虚拟机映射内存,还有其他的PCI,信号处理...
  • qemu-参数解析

    2020-07-07 22:27:26
    qemu参数解析工作分为两部分 1: 参数合法性验证。 2 参数名称和值的解析。 参数合法性验证主要是预先声明支持的参数信息,这些信息使用QEMUOption数据结构进行描述, 如下: typedef struct QEMUOption { const ...
  • qemu命令行参数转libvirt的xml文件

    千次阅读 2016-03-14 09:27:25
    2 使用qemu命令行启动虚拟机 3 在xml文件里使用任意qemu命令行参数 4 将QEMU参数转domain XML配置 5 转化domain XML为QEMU参数 6 参考资料 运行虚拟机有多种方式,其中可以使用qemu-system-x86...
  • qemuconf - 具有配置文件支持的简单 qemu 启动器 概要 qemuconf [ -q exec ]配置文件[-- qemu-options ...] qemuconf [ -v ] 描述 qemuconf使用从配置文件编译的参数执行 qemu。 选项 -q exec设置默认二进制文件。 ...
  • 常见编译后会出现类似如下的信息: AS arch/arm/boot/compressed/piggy.gzip.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready 如何用QEMU启动内核 ...
  • qemu参数解析

    千次阅读 2016-10-21 13:19:36
    代码版本:qemu1.5 static QemuOptsList *vm_config_groups[32]; qemu_add_opts(&qemu_drive_opts); qemu_add_opts(&qemu_chardev_opts); qemu_add_opts(&qemu_device_opts); qemu_add_opts(&qem
  • qemu 启动虚拟机 常用命令(1)

    千次阅读 2013-08-08 17:03:06
    默认启动qemu-kvm–hda win7.qcow2 使用默认的参数启动。 -boot:启动选项,软盘(a)、硬盘(c)、光驱(D)、网卡(n),默认是从硬盘启动 -enable-kvm: 使用kvm模块,如果无此参数,则使用的是tcg模式。 -...
  • qemu参数说明

    2011-12-29 17:22:58
    本文档是qemu的用户文档,比较详细说明了利用qemu仿真一个PC的相关参数,对应理解虚拟一个PC机及相关外设比较有帮助。 文档是把html转换为PDF的,如有需要可以到qemu的网站上查看原版。
  • QEMU它可以工作在linux,windows,FreeBSD和苹果系统上.大家根本都不用担心支持问题.因为其没有UI界面,纯粹是命令行的操作,和vmware等虚拟平台软件相比,它比较难于上手.但是它却对我们掌握系统模块有很大的帮助,所有的...
  • Qemu使用心得

    2018-06-22 18:43:22
    使用Qemu的心得体会如下:(1)在QEMU源码中增加自己的.c实现,编译后出现很多个错误如:“error: storage class specified ...(2)QEMU下Application打印信息不全的问题:QEMU启动参数增加串口重定向:-serial fi...
  • qemu利用uboot启动

    2015-08-14 13:19:01
    进入qemu可以先ping一下主机 ...tftp:可以在qemu启动时输入参数-tftp /var/lib/tftpboot,也可以在uboot中执行tftp ${...} ... 主机上tftpd服务的重启:sudo /etc/init.d/tftpd-hpa restart uboot编
  • qemu 参数简介

    2015-05-13 13:20:00
    参数 示例 说明 -hda -hda /data/windows.img 指定windows.img作为硬盘镜像 -cdrom -cdrom /data/windows.iso 指定windows.iso作为光盘镜像 -boot ...
  • QEMU ARM Emulator使用参数

    千次阅读 2011-05-06 15:44:00
    这种方式在QEMU启动方法中最常见和最直接,启动参数形式如下: qemu-system-arm -kernel zImage -initrd rootfs.cramfs -append “init=/linuxrc” 每次zImage和rootfs修改后首先bu
  • 在 AMD CPU上通过VMWare 虚拟出来的虚拟机中继续通过 qemu 进行嵌套启动虚拟机时报错,报错信息如下: core@ubuntu20-dev:~$ sudo qemu-system-x86_64 -cpu "host,pmu=off" -enable-kvm MoTTY X11 proxy: ...
  • qemu网络启动模式配置

    千次阅读 2014-05-14 16:15:52
    tap/tun启动模式(虚拟机启动网络参数-net nic –net tap) Qemu的tap初始化脚本缺省是/etc/qemu-ifup,内容如下: #!/bin/sh /sbin/ifconfig $1 192.168.0.11 如果不存在tun内核模块,可以自己编译。...
  • QEMU

    万次阅读 多人点赞 2016-03-31 17:55:42
    QEMU 1: 使用QEMU创建虚拟机 一、QEMU简介 QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行...
  • qemu作为一个十分重要的虚拟化工具,提供了丰富的功能/参数来支持虚拟化的各种操作。 下面仅就monitor这个参数或者说是功能来结合自己的实际体验来做个简要介绍。...2, 直接在qemu启动的时候加上
  • libvirt的virsh命令和qemu参数转换

    千次阅读 2016-12-28 16:45:46
    而网上许多的教程或者示例使用qemu命令参数来运行的,如果使用libvirt来运行可能会无从下手,不知道对应的参数。 libvirt从Domain的配置文件启动虚拟机 虚拟机(有时Domain,guest都表示虚拟机的
  • QEMU使用之参数解析

    2012-02-27 21:55:58
    熟悉掌握QEMU参数作用,是灵活应用此工具进行研究的第一步,现将参数功能总结如下: -L dir 指向BIOS和VGA BIOS所在目录 -hda/-hdb/-hdd/-hdc “文件名” 使用“文件名”作为硬盘0/1/2/3镜像。 -cdrom ...
  • qemu-kvm命令行参数

    千次阅读 2014-04-13 22:12:28
    qemu-kvm命令行参数 http://wiki.qemu.org/download/qemu-doc.html http://wiki.gentoo.org/wiki/QEMU/Options http://wiki.libvirt.org/page/QEMUSwitchToLibvirt 1.cpu相关参数 -cpu:指定cpu模型,默认的...
  • 一,qemu 源码编译及安装: 1,首先当然是下载解压源码 里面有一个文件configure要有可执行权限 2,然后启动容器 sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev libsdl1.2-dev...
  • qemu-kvm 启动

    2014-03-05 21:59:02
    QEMU的核心初始化流程客户系统...如概览部分所示,由用户为客户系统指定需要的虚拟CPU资源(包括CPU核心数,SOCKET数目,每核心的超线程数,是否开启NUMA等等),虚拟内存资源,具体参数设置参见${QEMU}/qemu-optio...
  • BuildRoot 2020.02.10 QEMU RISC-V QEMU 4.2.0 Run Linux in emulation with: qemu-system-riscv64 -M virt -kernel output/images/fw_jump.elf -device loader,file=output/images/Image,addr=0x80200000 -...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,736
精华内容 4,294
关键字:

qemu启动参数