ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:16.68KB ,
资源ID:8106992      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8106992.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(qemu启动参数修改.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

qemu启动参数修改.docx

1、qemu启动参数修改对于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

2、-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-b

3、lk-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

4、.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 QemuOpts

5、List 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_realti

6、me(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 failedn); exit(1); 修改点五:qemu-option.hx中增加DEF(realtime, HAS_ARG, QEMU_OPTION_realtime, -

7、realtime mlock=on|offn run qemu with realtime featuresn mlock=on|off controls mlock support (default: on)n, QEMU_ARCH_ALL)STEXIitem -realtime mlock=on|offfindex -realtimeRun qemu with realtime features.mlocking qemu and guest memory can be enabled via optionmlock=on(enabled by default).ETEXI下面分析一下这些

8、函数的处理流程: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_groups32;static QemuOptsList *drive_config_groups4;定义了数组,通过qemu_add_opts增加到vm_config_groups数组中。qemu_realtime_opts定义如下:static Qemu

9、OptsList 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后的ml

10、ock=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; uint

11、32_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) versio

12、n(); printf(usage: %s options disk_imagenn disk_image is a raw hard disk image for IDE hard disk 0nn, 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 screenn ctrl-alt-n switch to v

13、irtual console nn ctrl-alt toggle mouse and keyboard grabn 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;#endif3.qemu_find_opts

14、代码流程,返回对应名称的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函

15、数,根据QemuOptsList中定义的数据格式,生成QemuOpts变量,QemuOpts变量的格式定义如下:在include/qemu/option_int.hstruct 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参数框架已经根据定义的格式完成了解析。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1