现有的内核驱动程序应该如何初始化为PCI内存映射



现有的内核驱动程序(如xilinx)有特定的注册方式(作为tty设备),如果它们直接映射到cpu内存映射,就像这里使用设备树所做的那样:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842249/Uartlite+驱动

但在其他情况下,有一个PCIe设备(如具有xilinx-uart IP的FPGA)连接到和cpu。

使用PCIe设备时,我们应该如何注册uart?

我尝试注册到PCIe的设备树是uartlite驱动程序:https://github.com/Xilinx/linux-xlnx/blob/master/drivers/tty/serial/uartlite.c

我想我可能需要做的是:

  1. 编写一个自定义的pci驱动程序。

  2. 需要准备platform_device结构,然后从pci驱动程序调用uart探测例程:

    ulite_probe(struct-platform_device*pdev)

我看到过其他人在连接多个设备的情况下使用FPGA的相关问题,但似乎没有描述如何做到这一点的文档或教程。

如有任何意见、示例或文件,我们将不胜感激。

所以类似于ARM CPU通过PCIe连接到Artix FPGA的东西,对吧?

是的,您需要一个自定义PCIe驱动程序。必须映射PCIe配置和数据空间。看看pci_resource_{start,len}和pci_remap_bar函数。然后,您可以使用pci_get_device获取指向结构设备的指针,并检索PCIe配置空间的虚拟地址。UART驱动程序可以使用结构设备指针,并且根据您的设计,它的寄存器映射应该位于PCIe配置空间的虚拟地址的某个偏移处。您可以在自己的驱动程序中调用UARTlite IP驱动程序的探测调用。

"现有的内核驱动程序(如xilinx)有特定的注册方式(作为tty设备),如果它们直接映射到cpu内存映射,就像这里使用设备树所做的那样"。请注意,如果我们只谈论tty设备,这是真的。GPIO外设IP不会公开为tty,而是在/sys/class/GPIO中。

最新更新