现有的内核驱动程序(例如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
我认为我可能需要做的是:
编写自定义pci驱动程序。
需要准备platform_device结构,然后从pci驱动程序调用uart探测例程:
ulite_probe(struct platform_device * pdev)
我已经看到与使用多个设备的FPGA连接的其他人有关的问题,但是似乎没有文档或说明如何执行此操作的教程。
任何评论,示例或文档都会受到赞赏。
答案 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中。