Как подключить виртуальную PCI / PCIe к физической памяти в VxWorks 7.0? - PullRequest
0 голосов
/ 02 января 2019

Ну, я пытаюсь написать драйвер устройства для PCI Express (любые решения PCI также будут хороши).После изучения документации WindRiver, когда-либо существовавшей для других версий VxWorks, не удалось найти какое-либо решение для сопоставления виртуального и физического адресов.Ищите что-то похожее на команды Linux mmap (..).Код также будет оценен по достоинству ..

Ура, Лами

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

В VxWorks 7 предпочтительным способом является реализация драйвера устройства vxbus.Внутри драйвера у вас будет фрагмент кода, который выглядит примерно так;в зависимости от того, сколько регистров базовых адресов PCI вас интересует.

for (i = 0; i < VXB_MAXBARS; i++)
    {
    pRes = vxbResourceAlloc (pDev, VXB_RES_MEMORY, i);
    if (pRes != NULL)
        {
        pResAdr = (VXB_RESOURCE_ADR *)pRes->pRes;
        if (pResAdr != NULL)
            {
            pDrvCtrl->resource[i].handle = pResAdr->pHandle;
            pDrvCtrl->resource[i].base = (void *)pResAdr->virtual;
            pDrvCtrl->resource[i].res = pRes;
            break;
            }
        else
            {
            (void) vxbResourceFree (pDev, pRes);
            }
        }
    }

Позже вы будете использовать vxbRead32 и / или vxbWrite32 с ресурсом [i] .handle и pDrvCtrl-> resource [i] .base.параметры для указания того, к какому ресурсу базового адреса вы хотите получить доступ, и специфический для архитектуры путь / механизм доступа к ресурсу.

Обычно вас не интересует фактическое значение виртуального адреса, но виртуальный адрес можетбыть известным путем проверки членов структуры данных VXB_RESOURCE_ADR.В этом примере pDrvCtrl-> resource [i] .base содержит значение виртуального адреса.

Чистый результат состоит в том, что vxbResourceAlloc автоматически заботится о привязке физического / виртуального адреса к архитектуре / плате и отслеживаетзначения для вас.

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

vxbPciAutoConfig читает параметры PCI, которые предоставляет hwconf.c.Найдите PCI_MEM_ADRS, PCI_MEMIO_ADRS, PCI_IO_ADRS в hwconf.c и config.h под своим BSP.-> pciDeviceShow и -> pciHeaderShow показывают конфигурацию PCI.

...