目录

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设备的中断路由。设计三个概念

  1. 中断引脚
  2. 中断线
  3. PC链接设备

中断路由两部分

  1. 设备INTA到LINA的交错连线
  2. 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 设备模拟相关推荐

  1. qemu虚拟化-pci设备模拟

    pci设备算是学习qemu必须要掌握的一类设备的模拟,单独提出来说一下.这里以qemu的pci教学程序为基础讲解,源码路径:hw/misc/edu.c 1.设备的定义 typedef struct { ...

  2. Linux的pcie模拟网卡,Qemu虚拟机pci设备透传——网卡

    在qemu虚拟机中为了提高网络的性能,将本地host端的多余网卡透传到虚拟机中使用. 设备的透传需要主机支持Intel(VT-d)或AMD (IOMMU)硬件虚拟化加速技术 查看是否开启IOMMU1d ...

  3. qemu里pci设备的热插拔

    qemu里pci设备的热插拔 -v0.1 2019.2.17 Sherlock Init -v0.2 2019.2.21 Sherlock Add all related command 本文讨论li ...

  4. QEMU如何虚拟PCI设备

    引子 PCI(PCIE)设备在PC架构中有着举足轻重的地位,了解PCI总线与PCI设备在QEMU中的工作机制有助于我们了解CPU和设备之间的沟通机制,会对PC系统有更全面的认知,同时对virtio设备 ...

  5. VIRTIO PCI 设备

    Virtio的代码主要分两个部分:QEMU和内核驱动程序.Virtio设备的模拟就是通过QEMU完成的,QEMU代码在虚拟机启动之前,创建虚拟设备.虚拟机启动后检测到设备,调用内核的virtio设备驱 ...

  6. PCI设备与PCI桥的配置空间

    PCI配置空间 HOST主桥通过配置读写事务报文访问设备的配置空间,PCI总线规定了三种类型的PCI配置空间.配置空间中出现的地址都是PCI总线域的地址. (1)Agent设备配置空间 (2)Brid ...

  7. PCI设备驱动与虚拟网卡驱动源码分析

    虚拟网卡驱动例程 #include<linux/module.h> #include<linux/sched.h> #include<linux/kernel.h> ...

  8. linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

    目录 linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上 一.tun/tap设备简介 二.在linux上使用tun/tap设备模拟一个虚拟网卡 三. 创建网桥连接到 ...

  9. PCIe配置空间和PCI设备中的寄存器

    1.访问PCI配置空间,PCI基本配置空间的读写使用下列函数: 原型定义在<linux/pci.h> int pci_read_config_byte(struct pci_dev *pd ...

最新文章

  1. 让Python不在mac的dock上显示火箭图标
  2. 五个运动员参加比赛根据他们说的话判断结果
  3. AS3 in FlashDevelop
  4. matlab mpt工具箱帮助文档_替代 Matlab 的国产软件出现?
  5. linux 设置服务自启动
  6. 浅析C#中单点登录的原理和使用
  7. MediaCodec的使用和若干问题处理
  8. 关于提高自己Java水平十大技术
  9. 为什么有人把《海贼王》当作人生信条
  10. IOS-播放器开发(1)-视频基本原理
  11. MFC学习之简单的文本文件编辑器
  12. 什么软件可以搜索python答案_【python学习手记】网课精灵~调用爬虫搜索网课答案~...
  13. [转载]Win7微软官方正式版原版镜像下载总汇(附win7 OEM KEY密钥)
  14. 诗画丽水 文化传承 萌娃上演宋韵国风非遗主题秀
  15. 荒野大镖客2无法连接远程计算机,荒野大镖客2pc版常见问题解决办法_常见问题解决方法汇总...
  16. IIS5.1完整安装包使用指南(详解版)
  17. POJ 1198 / HDU 1401 Solitaire (记忆化搜索+meet in middle)
  18. html怎么做向下的图标,用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果
  19. python表情换头_使用Python制作表情包实现换脸功能
  20. 小猿圈IT自学分享-自学编程需要克服的困难

热门文章

  1. 数据劫持-发布订阅模式
  2. H5与CSS所做的QQ注册界面
  3. 系统流程图,程序流程图和数据流图
  4. 绘声绘色加载字幕教程
  5. 强大的jQuery幻灯片播放插件 支持全拼、拖拽和下载等功能
  6. PHP数组函数-----array_values
  7. 2021年中国汽车保有量及驾驶人数量分析:汽车保有量达3.02亿辆,汽车驾驶人数量达4.44亿人[图]
  8. 基于tair的分布式锁实现原理
  9. 纷享销客 java开发实习生面经
  10. TI-BASIC 计算器游戏开发之文字、图形、音频教程 II:图形处理