2015-05-07 5 views
0

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

Возможно ли это?

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

Это правильно?

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

+0

Если вам нужна PCIe-каркас в коде с открытым кодом, возможно, вы можете найти такой код в u-boot. –

+0

Спасибо за предложение, я кратко рассмотрел u-boot, как это было предложено. Однако я работаю с очень новым процессором, и я не верю, что Uboot настроен для него или моей доски. Существует настроенная среда buildroot, которая существует для моего процессора/платы, с которой я пытаюсь работать, и «BIOS» загружает встроенную Linux, которая, в свою очередь, использует PetitBoot для загрузки полной ОС Linux. Поэтому я подумывал о том, чтобы добавить драйвер устройства во встроенный Linux и использовать PetitBoot для загрузки моего голого кода вместо полной ОС Linux. Мое предположение заключается в том, что настройка uboot будет дублировать усилия buildroot. – Tyler

ответ

2

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

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

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

+0

Благодарим за отзыв. Я пошел с вашим предложением разработать голый металлический код. – Tyler