代码之家  ›  专栏  ›  技术社区  ›  ransh

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

  •  0
  • ransh  · 技术社区  · 5 年前

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

    但在其他情况下,还有一个PCIe设备(如具有XilinxUART IP的FPGA)与CPU相连。

    在使用PCIe设备时,如何使UART注册?

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

    我认为我可能需要做的是:

    1. 编写自定义PCI驱动程序。

    2. 需要准备平台设备结构,然后从PCI驱动程序调用UART探测程序:

      ulite_探针(结构平台_设备*pdev)

    我已经看到了与其他人在连接多个设备的情况下使用FPGA的相关问题,但似乎没有说明如何实现这一点的文档或教程。

    感谢任何评论、示例或文件。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Sanchayan Maity    5 年前

    像ARM CPU通过PCIe连接到Artix FPGA,对吗?

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

    “现有的内核驱动程序(如xilinx)有特定的注册方式(作为tty设备),前提是它们直接映射到CPU内存映射,如这里使用设备树所做的那样”。请注意,如果我们只讨论TTY设备,这是正确的。gpio外围设备IP不会作为tty公开,而是在/sys/class/gpio中公开。

    推荐文章