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

时间:2019-01-05 19:58:08

标签: linux linux-device-driver pci

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

但是在其他情况下,还有一个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连接的其他人有关的问题,但是似乎没有文档或说明如何执行此操作的教程。

任何评论,示例或文档都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

那么像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设备,则为true。 GPIO外设IP不会显示为tty,而是显示在/ sys / class / gpio中。