pci

Generating a 64-byte read PCIe TLP from an x86 CPU

匿名 (未验证) 提交于 2019-12-03 01:34:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: When writing data to a PCIe device, it is possible to use a write-combining mapping to hint the CPU that it should generate 64-byte TLPs towards the device. Is it possible to do something similar for reads? Somehow hint the CPU to read an entire cache line or a larger buffer instead of reading one word at a time? 回答1: Intel has a white-paper on copying from video RAM to main memory ; this should be similar but a lot simpler (because the data fits in 2 or 4 vector registers). It says that NT loads will pull a whole cache-line of

windows驱动开发-Altera PCIe DMA

匿名 (未验证) 提交于 2019-12-03 00:34:01
DMA Descriptor Controller Registers DMA控制器读写均支持最多128个描述符,读写操作是以FPGA视角来看,读操作是从PCIe地址空间到FPGA Avalon-MM地址空间,写操作是从FPGA Avalon-MM地址空间到PCIe地址空间。 在DMA控制器寄存器里设置描述符表位于在PCIe地址空间里的地址和大小,DMA控制器用Read Data Mover首先将描述符复制到自己内部的FIFO中,然后在根据描述符来开始DMA传输。描述符在RC内的地址必须是32字节对齐的。 DMA控制器有寄存器指示读写描述符的完成状态,读和写分别有自己的状态寄存器表,每个表有128个连续的DWORD项,对应128个描述符。状态字占用512字节,位置在RC Read Status and Descriptor Base指定的地址偏移0处,而实际的描述符在0x200偏移处,DMA控制器项状态字的done位写1表示传输成功,DMA控制器在完成最后一个描述符后会发送一个MSI中断,在接收到中断之后,主机host软件可以轮询done位来判断描述符状态,但是DMA控制器不会设置done位或者发送MSI在每一个描述符完成的时候,它根据RD_DMA_LAST PTR和WR_DMA_LAST_PTR寄存器存储的描述符ID来操作,由于描述符支持PCIe完成包的乱序传输

5.libvirt 介绍 [ Libvrit for KVM/QEMU ]

匿名 (未验证) 提交于 2019-12-03 00:34:01
1. Libvirt 是什么 为什么需要Libvirt? Hypervisor 比如 qemu-kvm 的命令行虚拟机管理工具参数众多,难于使用。 Hypervisor 种类众多,没有统一的编程接口来管理它们,这对云环境来说非常重要。 没有统一的方式来方便地定义虚拟机相关的各种可管理对象。 Libvirt提供了什么? 它提供统一、稳定、开放的源代码的应用程序接口(API)、守护进程 (libvirtd)和和一个默认命令行管理工具(virsh)。 它提供了对虚拟化客户机和它的虚拟化设备、网络和存储的管理。 它提供了一套较为稳定的C语言应用程序接口。目前,在其他一些流行的编程语言中也提供了对libvirt的绑定,在Python、Perl、Java、Ruby、PHP、OCaml等高级编程语言中已经有libvirt的程序库可以直接使用。 它对多种不同的 Hypervisor 的支持是通过一种基于驱动程序的架构来实现的。libvirt 对不同的 Hypervisor 提供了不同的驱动,包括 Xen 的驱动,对QEMU/KVM 有 QEMU 驱动,VMware 驱动等。在 libvirt 源代码中,可以很容易找到 qemu_driver.c、xen_driver.c、xenapi_driver.c、vmware_driver.c、vbox_driver.c 这样的驱动程序源代码文件。

为什么Controller层注入的是Service接口,而不是ServiceImpl实现类

匿名 (未验证) 提交于 2019-12-03 00:30:01
错误代码: Service层 接口 interface PCI { } 接口实现类 @Service class PCIImpt imeplements PCI { } Controller层 @Autowired private PCIImpt pciImpt; //注入了实现类 1 2 3 4 5 6 7 8 9 10 而正确的写法:* Controller层 @Autowired private PCI pci; //注入接口以Autowired自动接收 结果:编译通过; 1 2 3 4 那么在Service接口有多个ServiceImpt实现类的情况,就需要指定参数名来选择哪个ServiceImpt实现类了。 Service层(此时有两个接口实现类) @Service ( "PCIImpt1" ) class PCIImpt1 imeplements PCI { } @Service ( "PCIimpt2" ) class PCIImpt2 imeplements PCI { } Controller层 @Resource (name= "PCIimpt2" ) //填PCIimpt1,注入PCIimpt1实现类,填PCIimpt2,则注入PCIimpt2实现类 private PCI pci; //注入接口以Resource手动指定接收 1 2 3 4 5 6 7 8

hisi3559平台PCIE转USB调试

匿名 (未验证) 提交于 2019-12-03 00:22:01
pci驱动分为总线驱动和设备驱动。总线驱动是linux内核完成,主要完成设备的枚举,常规64个字节配置空间的访问。设备驱动是针对PCI接口具体设备需要实现的功能 hisi3559的ARM平台的PCIE目前不支持热插拔。 在内核的目录下: osdrv/opensource/linux/linux-3.18.y$ 执行make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- menuconfig 点击Bus support 进去 以上的选项也是顺序出现的,依次选中即可。 目前到这边,继续往下看。 另外还有一个 PCI host controller drivers ―> 没有选择,目前我的PCIE的芯片是免驱的,驱动是写在一个EEPROM中,需要提前烧录好 Hisilicon PCI Express support (NEW) ―> 进去之后还有一些参数的配置, 海思的文档中没有介绍,说让看 标准协议《PCI Express Base Specification Revision 2.1 》中 7.5 章节 先按照默认的,不行再修改。目前我们使用的是1G的DDR内存,海思默认的也是1G的内存。 RC(PCI Express root complex) 在RC模式时,使用PCIE类型1配置头; EP(endpoint device)工作方式

PCI Option ROM in BIOS

匿名 (未验证) 提交于 2019-12-03 00:22:01
在BIOS里面包一个OpRom。 在启动过程中找到这个OpRom。 在内存里面查看这个OpRom的内容。 如何在BIOS里面包一个OpRom?如下,在OvmfPkgX64.fdf里面[FV.DXEFV]段加入下面的代码即可。 FILE FREEFORM = 1845d593-26a0-4805-a014-2e294fef14ee { SECTION RAW = OvmfPkg/LegacyRom/rtegrom.lom SECTION UI = "RealtekPXE" } 如何找到这个OpRom?如下,遍历firmware volumes根据GUID找到这个OpRom的位置。 STATIC EFI_STATUS EFIAPI CHHGetOpRom ( OUT VOID **RomImage, OUT UINTN *RomSize ) { EFI_STATUS Status; UINTN HandleCount; EFI_HANDLE *HandleBuffer; UINTN Index; EFI_FIRMWARE_VOLUME2_PROTOCOL *FirmwareVolume; UINT32 AuthenticationStatus; VOID *LocalRomImage; UINTN LocalRomSize; EFI_GUID gRealtekPXEOpRomGUID

创建虚拟机自动化脚本

匿名 (未验证) 提交于 2019-12-03 00:05:01
1、模版xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit node1 or other application using the libvirt API. --> <domain type='kvm'> <name>node1</name> <uuid>fb0d1a74-26c5-4734-87b9-3d8f87ea5eb4</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact'>

PCI常用接口函数

匿名 (未验证) 提交于 2019-12-02 23:52:01
pci_enable_device(pdev); pci_set_master(pdev); pci_find_capability(pdev, PCI_CAP_ID_MSI); pci_alloc_irq_vector()pdev,1,32,PCI_IRQ_MSI); //pci_enable_msi(); 读,写,abort 地址写配置空间偏移0x54的地址(64位,高32位一般为0) 还有就是 dma_set_mask(&(pdev->dev, DMA_BIT_MASK(64)); request_irq(pdev->irq + i , msi_handle_function, IRQF_SHARED, "edma_msi_irq", (void*) var); pci_alloc_consistent(pdev,mpara_dma_size,&dma_addr);//dma_addr 是物理地址 返回值是虚拟地址 文章来源: https://blog.csdn.net/weixin_38987932/article/details/98111607

DPDK PCIe 与 包处理

匿名 (未验证) 提交于 2019-12-02 23:45:01
参考文献:  《深入浅出DPDK》   linux 阅马场 公众号 .............................................................................................................. 一. PCIe 介绍(参考 linux 阅马场文章) 首 先我们来看一下在x86系统中,PCIe是什么样的一个体系架构。下图是一个PCIe的拓扑结构示例,PCIe协议支持256个Bus, 每条Bus最多支持32个Device,每个Device最多支持8个Function,所以由BDF(Bus,device,function)构成了 每个PCIe设备节点的身份证号。 PCIe 体系架构一般由root complex,switch,endpoint等类型的PCIe设备组成,在root complex和switch中通常会有一些embeded endpoint(这种设备对外不出PCIe接口)。这么多的设备,CPU启动后要怎么去找到并认出它们呢? Host对PCIe设备扫描是采用了深度优先算法,其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。我们一般称 这个过程为PCIe设备枚举。枚举过程中host通过配置读事物包来获取下游设备的信息

【转】QEMU Monitor机制实例分析

匿名 (未验证) 提交于 2019-12-02 23:43:01
转自http://www.just4coding.com/blog/2017/11/19/qemu-monitor/ https://qemu.weilnetz.de/doc/qemu-doc.html#pcsys_005fmonitor QEMU启动时,需要使用 -monitor 选项指定做为 console 设备,官方文档说明如下: 1 2 -monitor dev Redirect the monitor to host device dev (same devices as the serial port). The default device is vc in graphical mode and stdio in non graphical mode. Use -monitor none to disable the default monitor. 下面首先以标准输入输出设备做为 console 来启动QEMU实例: 1 2 3 4 [root@localhost ~]# qemu-system-x86_64 cirros-0.3.5-x86_64-disk.img -smp 2,cores=2 -m 2G -vnc :20 -device virtio-net-pci,netdev=net0 -netdev tap,id=net0,ifname=tap0