- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
qemu设备模拟讲述
设备模拟目的
我们好像不会干一件事而毫无目的,就算不停刷微信朋友圈也是为了打发你无聊的时间。其实最装B的回答是:设备模拟的目的就是模拟设备。这话是屁话,不过也能说明些什么,确实是模拟设备,用软件的方式提供硬件设备具备的功能。对于和PC机交互的硬件设备,主要要干两件事,一是提供IRQ中断,二是响应IO输入输出。IO包括PIO/MMIO/DMA等(DMA算不算IO?)以i8254.c实现的pit为例,主要提供了IRQ注入和PIO响应,见初始化函数pit_initfn:
static const MemoryRegionOps pit_ioport_ops = { .read = pit_ioport_read, .write = pit_ioport_write, .impl = { .min_access_size = 1, .max_access_size = 1, }, .endianness = DEVICE_LITTLE_ENDIAN, }; static int pit_initfn(PITCommonState *pit) { PITChannelState *s; s = pit-channels[0]; /* the timer 0 is connected to an IRQ */ //这里有个irq_timer,用于qemu_set_irq提供中断注入 s-irq_timer = qemu_new_timer_ns(vm_clock, pit_irq_timer, s); qdev_init_gpio_out(pit-dev.qdev, s-irq, 1); memory_region_init_io(pit-ioports, pit_ioport_ops, pit, pit, 4); qdev_init_gpio_in(pit-dev.qdev, pit_irq_control, 1); return 0; }
Static const MemoryRegionOps pit_ioport_ops={
????.read=pit_ioport_read,
????.write=pit_ioport_write,
????.impl={
????????.min_access_size=1,
????????.max_access_size=1,
????},
????.endianness=DEVICE_LITTLE_ENDIAN,
};
?
Static int pit_initfn(PITCommonState * pit)
{
????PITChannelState*s;
?
????s=pit-channels[0];
????/* the timer 0 is connected to an IRQ */
????//这里有个irq_timer,用于qemu_set_irq提供中断注入
????s-irq_timer=qemu_new_timer_ns(vm_clock,pit_irq_timer,s);
????qdev_init_gpio_out(pit-dev.qdev,s-irq,1);
?
????memory_region_init_io(pit-ioports,pit_ioport_ops,pit,pit,4);
????qdev_init_gpio_in(pit-dev.qdev,pit_irq_control,1);
????return0;
}这里的pit_ioport_ops,主要注册GUEST操作系统读写PIO时候的回调函数。
模块注册
QEMU要模拟模块那么多,以程序员的喜好,至少得来一套管理这些模拟设备模块的接口,以示设计良好。QEMU将被模拟的模块分为了四类:
typedef enum { MODULE_INIT_BLOCK, MODULE_INIT_MACHINE, MODULE_INIT_QAPI, MODULE_INIT_QOM, MODULE_INIT_MAX } module_init_type;
typedefenum{
????MODULE_INIT_BLOCK,
????MODULE_INIT_MACHINE,
????MODULE_INIT_QAPI,
????MODULE_INIT_QOM,
????MODULE_INIT_MAX
}module_init_type;BLOCK比如磁盘IO就属于BLOCK类型,e.g: block_init(bdrv_qcow2_init); block_init(iscsi_block_init);
MACHINEPC虚拟machine_init(pc_machine_init);
XEN
您可能关注的文档
- PP:混合生产方式(MTO与MTS为例讲述.docx
- PPP建设运营讲述.doc
- Professional_English讲述.docx
- PROE曲面建模及零件装配模块九讲述.doc
- 第1课《山中访友》综述.ppt
- protel99se-快捷键讲述.doc
- 第1课时笑迎新生活综述.ppt
- ProtelDXP2004SP2电路板设计导引实验报告讲述.doc
- PROFIBUS-DP组态步骤(CP5611)讲述.doc
- ProjectWiseTraining_架构讲述.pptx
- 供水工程标志桩施工方案(3篇).docx
- 基于人工智能的高中地理环境监测与评价策略实践研究教学研究课题报告.docx
- 初中数学教学中函数与方程的教学策略研究教学研究课题报告.docx
- 基于项目学习的初中数学与英语学科融合教学实践研究教学研究课题报告.docx
- 《基于雨水收集的城市道路排水系统优化设计与性能分析》教学研究课题报告.docx
- 九州环保行业环保产业技术创新政策效果评估与建议教学研究课题报告.docx
- 8 《基于土地流转的农业规模化经营中农业产业结构调整与升级研究》教学研究课题报告.docx
- 初中数学计算能力培养中的跨学科教学研究教学研究课题报告.docx
- 《基于项目式学习的高中物理教学策略对学生科学探究过程的理解研究》教学研究课题报告.docx
- 人工智能在小学英语阅读教学中的文本分析与教学策略改进教学研究课题报告.docx
最近下载
- 纪委监委纪检监察室2024年工作总结及2025年工作计划范文.docx VIP
- T_SBIAORG 001-2023 间充质干细胞外泌体质量控制标准.pdf
- 仓储装卸搬运费合同范本.docx VIP
- 2025年 (第一季度)专题党课讲稿2篇:强作风建设锤炼过硬能力与基层治理专题党课讲稿.pdf VIP
- 民宿项目详细风险分析及评估报告.docx
- 加入我们拯救生命”无偿献血知识竞赛题库及答案.pdf VIP
- Day3_阿宝姐百万年薪公开课_vF5D.pdf VIP
- 提高住院患者腕带佩戴率.pptx
- 前瞻产业研究院:2024年中国中式养生水行业发展趋势洞察报告.pdf
- 幼儿园大班健康《我是健康小卫士》课件.pptx VIP
文档评论(0)