Полезны ли драйверы устройств PCIe при использовании Linux в качестве загрузчика для кода с нуля?

Я разрабатываю встраиваемую систему на процессоре PowerPC, и существует потребность в связи с FPGA через PCIe. Я хочу использовать Linux / embedded-Linux в качестве загрузчика, чтобы использовать его код инициализации PCIe и API-интерфейс драйвера для упрощенной разработки драйверов PCIe. Однако, в конце концов, я хочу запускать код с нуля (без ОС). Итак, я собираюсь использовать PetitBoot / kexec для перехода с Linux на свой собственный код.

Это возможно?

Мое текущее понимание драйверов PCIe заставляет меня думать, что после инициализации устройства, пока у меня есть указатель на адресное пространство, я должен иметь возможность просто выполнять операции MMIO R / W непосредственно в пространстве памяти. Таким образом, даже если kexec перезапишет код драйвера, я смогу использовать устройство, потому что драйвер уже выполнил свою работу.

Это верно?

Если нет, то каковы мои альтернативы?


person Tyler    schedule 07.05.2015    source источник
comment
Если вам нужен фреймворк PCIe в голом коде, возможно, вы найдете такой код в u-boot.   -  person Sam Protsenko    schedule 07.05.2015
comment
Спасибо за предложение, я кратко рассмотрел u-boot, как и предлагалось. Однако я работаю с очень новым процессором и не верю, что uboot настроен для него или моей платы. Для моего процессора / платы существует настроенная среда buildroot, которую я пытаюсь обойти, и «BIOS» загружает встроенный Linux, который, в свою очередь, использует PetitBoot для загрузки полной ОС Linux. Поэтому я рассматривал возможность добавления драйвера устройства во встраиваемый Linux и использования PetitBoot для загрузки моего исходного кода вместо полной ОС Linux. Я предполагаю, что настройка uboot будет дублировать усилия buildroot.   -  person Tyler    schedule 07.05.2015


Ответы (1)


Я не думаю, что такой подход будет хорошей идеей. Драйверы, написанные для ОС Linux, предполагают, что доступны все ресурсы ОС, а не только выделенная память. Например, он может настроить обработчики прерываний, но когда ОС больше не доступна, ваше оборудование может зависнуть, потому что ничто не подтверждает и не обслуживает его запросы на прерывание.

К инициализации памяти тоже отношусь скептически. Я полагаю, что теоретически вы могли бы выделить некоторую память DMA и передать полученный физический адрес своему «голому» приложению, когда оно вступит во владение, но весь процесс кажется отрывочным. Было бы очень сложно убедиться, что все в Linux правильно завершено, оставив подсистему PCIe работающей. Вам нужно будет посмотреть на процедуры выключения драйвера и посмотреть, что он делает с картой, чтобы убедиться, что он не выключает устройство и не делает его не реагирующим на ваш код с голым железом.

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

person skrrgwasme    schedule 26.05.2015
comment
Благодарю за ваш ответ. Я согласился с вашим предложением разработать код на чистом железе. - person Tyler; 19.06.2015