Как следует инициализировать существующий драйвер ядра как карту памяти PCI? - PullRequest
0 голосов
/ 05 января 2019

Существующие драйверы ядра, такие как xilinx, имеют особый способ регистрации (в качестве устройства tty), если они отображаются напрямую на карту памяти процессора, как это сделано здесь с деревом устройств: https://xilinx -wiki.atlassian.net / вики / пространства / A / страницы / 18842249 / Uartlite + Driver

Но в других случаях есть PCIe-устройство (например, FPGA с IP-адресами UART xilinx), к которому подключен процессор.

Как зарегистрировать uart при использовании устройства PCIe?

Дерево устройств, которое я пытаюсь зарегистрировать в PCIe, является драйвером uartlite: https://github.com/Xilinx/linux-xlnx/blob/master/drivers/tty/serial/uartlite.c

Я думаю, что мне, вероятно, нужно сделать:

  1. Написать собственный драйвер pci.

  2. Необходимо подготовить структуру platform_device и затем вызвать процедуру зонда uart из драйвера pci:

    ulite_probe (struct platform_device * pdev)

Я видел связанный вопрос с другими, использующими FPGA с несколькими подключенными устройствами, но кажется, что нет документации или руководства, описывающего, как это сделать.

Любой комментарий, пример или документ приветствуется.

1 Ответ

0 голосов
/ 07 января 2019

Так что-то вроде процессора ARM, подключенного к Artix FPGA через PCIe, верно?

Да, вам нужен собственный драйвер PCIe. Конфигурация PCIe и пространства данных должны быть сопоставлены. Посмотрите на функции pci_resource_ {start, len} и pci_remap_bar. Затем вы можете использовать pci_get_device, чтобы получить указатель на устройство struct и получить виртуальный адрес пространства конфигурации PCIe. Драйвер UART может затем использовать указатель struct device, и его карта регистров должна быть с некоторым смещением относительно виртуального адреса пространства конфигурации PCIe в соответствии с вашим дизайном. Вы можете вызвать пробный вызов драйвера UARTlite в своем собственном драйвере.

«Существующие драйверы ядра, такие как xilinx, имеют особый способ регистрации (в качестве устройства tty), если они отображаются непосредственно на карту памяти процессора, как это сделано здесь с деревом устройств». Обратите внимание, что это верно, если мы говорим только о tty устройствах. Периферийный IP-адрес GPIO не будет отображаться как tty, но в /sys/class/gpio.

...