在nvme_driver的probe中通过INIT_WORK来建立一个nvme_reset_work的工作队列 中断申请: 1,nvme_reset_work中调用nvme_setup_io_queues的nvme_setup_irqs来申请nvme的所有queue的所需的中断向量 2,nvme_setup_irqs中的pci_alloc_irq_vectors_affinity来判断nvme设备是否支持irq_queue个中断向量。 3,pci_alloc_irq_ve...
从以上的calltrace, 我们可以看到pci_probe会把driver注册的probe钩子放到一个workqueue上执行,然后pci_probe通过wait_for_completion阻塞等待driver_probe完成。由于driver_probe耗时超过120s, 因此触发了hungtask。 2 pci_device_probe pci_device_probe->__pci_device_probe->pci_call_probe pci_call_probe() { /...
Linux内核对PCI配置空间直接访问的实现函数分别为pci_conf1_read()/pci_conf1_write()和pci_conf2_read()/pci_conf2_write(),分别对应读写Type 0和Type 1的配置空间。对于我们的PCI-E外设来说,是Type 0型配置空间。这里我们只关注Type 0。 函数pci_conf1_read()和pci_conf1_write()函数在文件arch/i386...
因为,信号的互连通道不仅仅包含了PCB走线,还包含了芯片内部的布线,一般我们认为测量到芯片内部的Die才算最终端。 该项目的PCIE 1.0是属于PCIe base的,互连CPU与以太网PHY,如下图1所示: 图1 原理框图 所以测试的时候,需要将probe探测到最终端,但是对于目前示波器测试而言,都只能测试到芯片的引脚上,没有办法探测到...
设备枚举是纯软件流程,linux内核已经实现,这个过程会做很多工作;比如,枚举过程会按照深度优先的搜索方式分配总线号、配置桥设备和EP设备,然后对每个EP设备会创建pci_dev设备结构体,这样后续对应的pci_driver驱动注册时,通过Device ID匹配到pci_dev就会调用probe函数进行初始化工作;对于EP设备,在枚举时会给EP设备分配BAR...
pcie控制器中的pci桥:/sys/devices/platform/soc/0.pcie/pci0000:00/0000:00:00.0,pci设备的命名方法:pci域号:pci总线号:pci设备号.pci功能号,具体代码见:drivers/pci/probe.c中的pci_setup_device 函数。 pcie控制器中的pci总线0:/sys/devices/platform/soc/0.pcie/pci0000:00/pci_bus/0000:00,pci总线...
1)HOST主桥与主存储器控制器在同一级总线上,PCI设备可以方便地通过HOST主桥访问主存储器,即进行DMA操作。 2)处理器与PCI设备间的数据交换主要由“处理器访问PCI设备的地址空间”和“PCI设备使用DMA机制访问主存储器”这两部分组成。 有几个HOST主桥,就有几个PCI总线域。
完成解压后,PCIe驱动的源代码将位于:\linux-4.18.0-147.8.1.el8_1\drivers\pci目录下。▣ 使用Source Insight软件 首先,使用Source Insight软件来新建一个工程。接下来,打开probe文件夹,这个文件夹中包含了PCIe驱动的源代码。你可以通过上述步骤来查看和分析这些源代码。PCIe的诸多特性与操作系统紧密相连,而...
[6011.394437]ps_pcie_dmainit()[6011.394491]ps_pcie_dma0000:01:00.0:PSPCIeDMAPCIe Driver probe[6011.394625]ps_pcie_dma0000:01:00.0:PSPCIeDMAPCIe 64bit access capable[6011.475001]ps_pcie_dma0000:01:00.0:MSI/MSI-Xnot detected-using legacy interrupts[6011.475304]ps_pcie_dma0000:01:00.0:PSPCIeDMA...
3.2.1 pci_bus_match 设备或者驱动注册后,触发pci_bus_match函数的调用,实际会去比对vendor和device等信息,这个都是厂家固化的,在驱动中设置成PCI_ANY_ID就能支持所有设备; 一旦匹配成功后,就会去触发pci_device_probe的执行; 3.2.2 pci_device_probe 实际的过程也是比较简单,无非就是进行匹配,一旦匹配上了,直接...