LINUX.ORG.RU

работа с PCI устройством из юзерспейса

 


0

4

Всех приветствую.
Решили мы тут запилить с группой товарисчей экспериментальное устройство на базе жЫрной плисины. Товарисчи взяли какой-то там экзампел и сделали из плисины pci-e устройство (примерно килобайт памяти, которую можно писать-читать).
Ну а мне надо по-быстрому написать прогу чтобы пообщаться с этой платой. Пилить драйвер как-то влом. С другой стороны как из юзерспейса общаться с pci-платой до меня как-то не доходит. Есть ли какой-то готовый пример, как почитать-пописать память и регистры pci-плат?

★★★★★

Последнее исправление: yax123 (всего исправлений: 1)
Ответ на: комментарий от ilovewindows

Спасибо, я эту ссылку (то есть ее оригинал на англ. яз.) использовал в 2000 году когда пилил обмен с железкой через LPT-порт. Есть мнение, что с pci все несколько сложней. Хотя и могу заблуждаться.

P.S. Нужны описание подробностей связанных именно с PCI, всякие особенности, тонкости, грабли ит.д. очень сильно не хочу изобретать велосипед.

yax123 ★★★★★
() автор топика
Последнее исправление: yax123 (всего исправлений: 1)

mv вроде бы пилил что-то на FPGA для PCI...

ymn ★★★★★
()

Сам спросил - сам ответил.
как я и думал все придумано за нас:
http://www.linuxquestions.org/questions/linux-hardware-18/help-with-convertin...
тут приводится кусок работающего кода, который вроде как мапит pci-устройство в память.
https://github.com/rumpkernel/pci-userspace
тут для какой-то bsd-и тоже какая то фигня есть.
http://moi.vonos.net/linux/the-pci-bus/
тут тоже весьма обширненько описана pci-шина и что с ней делать.
http://stackoverflow.com/questions/19030249/linux-user-space-pci-driver
тут намекнули про «vfio» - какая-то фича из ядра 3.6
всем спасибо, все свободны.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Ты дольше с этой фигнёй разбираться будешь. Простейший драйвер пишется на коленке по шаблону за полдня, если в первый раз. BAR просто маппишь в юзерспейс, как uncached, и всё.

mv ★★★★★
()
Ответ на: комментарий от mv

Ты дольше с этой фигнёй разбираться будешь.

Позволю не согласиться. Драйвер писать нужно аккуратно, а то постоянно кернел-паник и ребут. С учетом того, что и с драйвером и с этой фигней придется разбираться ( и думается мне, что примерно одинаковое время) процесс отладки в случае юзерспейса будет попроще. Тем более что никакого особенного функционала там не будет. Только протестировать концепцию. Хотя если у вас есть приличная ссылка на хорошую «рыбу» для такого драйвера, которая сразу делает 99% того что нужно, было бы неплохо глянуть.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от mv

Копнул глубже этот вопрос и решил таки писать драйвер. Тем более порывшись на чердаке, нашел уже готовую заготовку.

yax123 ★★★★★
() автор топика

Когда устройство начнет делать что-то более-менее сложное (прерывания, DMA), всё равно понадобится драйвер.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

это да, но в текущей версии этого нет и вряд ли появится. поэтому и хотелось сделать все из говна и палок. Но чую линус не оставил мне выбора.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Но чую линус не оставил мне выбора.

Смотрел uio? Я сам им не пользовался, но предназначено оно именно для такого класса устройств.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Не смотрел, хотя выглядит знакомым. Возможно давно когда-то смотрел, а щас забыл. В целом эта хрень как раз мой случай (исходя из того что я успел просмотреть). Спасибо.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Попробовал эту штуку. Получилось весьма годно. Загружаем модуль, прописываем ему параметры нашего устройства и мапим ресурсы в приложении и все. Сразу совет тем кто будет таким образом прошивку плисины отлаживать. Если «на ходу» плисину перешить, то потом из ресурсов читаются 0xFFFF... По-видимому ядро слегка офигивает от таких действий. Чтобы все пришло в норму, нужно через /sys/bus/pci/devices/0000:XX:00.0/remove устройство удалить, а потом через /sys/bus/pci/rescan опять его «найти» и все опять завертится. Кстати, если при перепрошивке плисины менять [vid:pid] то система сама все сделает и передергивать устройство не нужно.

yax123 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.