qemu: PCI 设备模拟
目录
1. PCI设备
2. PCI设备模拟
3. PCI设备中断模拟
1. PCI设备
可以参考 :PCI/PCIe基础——配置空间分布_vc66vcc的博客-CSDN博客_pcie配置空间
2. PCI设备模拟
PCI 设备类型
pci_device_type_info,是抽象类型
TYPE_PCI_BUS
pci_device_class_init
pci_qdev_realize
TYPE_PCI_DEVICE
pci_register_bar: 注册 MR 为 BAR${region_num}, 如BAR0
PCIHostState: 北桥PCI部分
i440fx_pcihost_initfn: 北桥初始化,注册cfg 和 data 的MR动作
i440fx_pcihost_realize,北桥实例化,完成IO地址MR注册
pci_host_config_write:写CONFGADDR,选择PCI设备和寄存器
pci_host_data_write:写入CONFGDATA数据
pci_data_write
SEABIOS分配各种BAR/MMIO地址,写入PORT_PCI_DATA(PCI主桥的IO配置空间),QEMU响应函数是
pci_default_write_config
pci_update_mappings
3. PCI设备中断模拟
在实例化的时候写入PCI设备配置空间内0x3d处的一个字节,指明使用了哪个中断引脚 INTA-D
PCI设备使用的中断引脚与中断控制器的中断线连接起来,通常叫做PCI设备的中断路由。设计三个概念
- 中断引脚
- 中断线
- PC链接设备
中断路由两部分
- 设备INTA到LINA的交错连线
- PCI链接设备路由到具体的IRQ线上,BIOS设定
QEMU中PCI设备中断初始化
i440fx_init
pci_bus_irqs
pci_slot_get_pirq,得到LNK[A-D],调用piix3_set_irq,作为参数 pirq
piix3_set_irq
piix3_set_irq_level
piix3_set_irq_pic
QEMU中PCI设备触发中断
pci_set_irq,pci_intx得到INTX引脚编号(INTX[A-D])
pci_irq_handler
pci_change_irq_level
qemu: PCI 设备模拟相关推荐
- qemu虚拟化-pci设备模拟
pci设备算是学习qemu必须要掌握的一类设备的模拟,单独提出来说一下.这里以qemu的pci教学程序为基础讲解,源码路径:hw/misc/edu.c 1.设备的定义 typedef struct { ...
- Linux的pcie模拟网卡,Qemu虚拟机pci设备透传——网卡
在qemu虚拟机中为了提高网络的性能,将本地host端的多余网卡透传到虚拟机中使用. 设备的透传需要主机支持Intel(VT-d)或AMD (IOMMU)硬件虚拟化加速技术 查看是否开启IOMMU1d ...
- qemu里pci设备的热插拔
qemu里pci设备的热插拔 -v0.1 2019.2.17 Sherlock Init -v0.2 2019.2.21 Sherlock Add all related command 本文讨论li ...
- QEMU如何虚拟PCI设备
引子 PCI(PCIE)设备在PC架构中有着举足轻重的地位,了解PCI总线与PCI设备在QEMU中的工作机制有助于我们了解CPU和设备之间的沟通机制,会对PC系统有更全面的认知,同时对virtio设备 ...
- VIRTIO PCI 设备
Virtio的代码主要分两个部分:QEMU和内核驱动程序.Virtio设备的模拟就是通过QEMU完成的,QEMU代码在虚拟机启动之前,创建虚拟设备.虚拟机启动后检测到设备,调用内核的virtio设备驱 ...
- PCI设备与PCI桥的配置空间
PCI配置空间 HOST主桥通过配置读写事务报文访问设备的配置空间,PCI总线规定了三种类型的PCI配置空间.配置空间中出现的地址都是PCI总线域的地址. (1)Agent设备配置空间 (2)Brid ...
- PCI设备驱动与虚拟网卡驱动源码分析
虚拟网卡驱动例程 #include<linux/module.h> #include<linux/sched.h> #include<linux/kernel.h> ...
- linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上
目录 linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上 一.tun/tap设备简介 二.在linux上使用tun/tap设备模拟一个虚拟网卡 三. 创建网桥连接到 ...
- PCIe配置空间和PCI设备中的寄存器
1.访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在<linux/pci.h> int pci_read_config_byte(struct pci_dev *pd ...
最新文章
- 让Python不在mac的dock上显示火箭图标
- 五个运动员参加比赛根据他们说的话判断结果
- AS3 in FlashDevelop
- matlab mpt工具箱帮助文档_替代 Matlab 的国产软件出现?
- linux 设置服务自启动
- 浅析C#中单点登录的原理和使用
- MediaCodec的使用和若干问题处理
- 关于提高自己Java水平十大技术
- 为什么有人把《海贼王》当作人生信条
- IOS-播放器开发(1)-视频基本原理
- MFC学习之简单的文本文件编辑器
- 什么软件可以搜索python答案_【python学习手记】网课精灵~调用爬虫搜索网课答案~...
- [转载]Win7微软官方正式版原版镜像下载总汇(附win7 OEM KEY密钥)
- 诗画丽水 文化传承 萌娃上演宋韵国风非遗主题秀
- 荒野大镖客2无法连接远程计算机,荒野大镖客2pc版常见问题解决办法_常见问题解决方法汇总...
- IIS5.1完整安装包使用指南(详解版)
- POJ 1198 / HDU 1401 Solitaire (记忆化搜索+meet in middle)
- html怎么做向下的图标,用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果
- python表情换头_使用Python制作表情包实现换脸功能
- 小猿圈IT自学分享-自学编程需要克服的困难