Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработка прерываний из FPGA в userspace
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Nitrex
Доброго времени суток. У меня в FPGA есть счетчик, и при достижении определенного значения которого генерируется прерывание. По этому прерыванию программа под Linux из SDRAM должна читать данные. Делал ли кто ни будь обработку прерывания из FPGA в userspace? Каким образом вообще можно реализовать данный механизм?
des333
Лучше сделайте драйвер, который умеет получать прерывания от FPGA.
А уже драйвер пусть создаст char device, с котором будет взаимодействовать userspace.
Nitrex
Цитата(des333 @ Dec 22 2015, 22:49) *
Лучше сделайте драйвер, который умеет получать прерывания от FPGA.
А уже драйвер пусть создаст char device, с котором будет взаимодействовать userspace.


А без драйвера это сделать невозможно?
KPiter
Цитата(Nitrex @ Dec 22 2015, 23:18) *
А без драйвера это сделать невозможно?

непрерывно читать статусный регистр. Иначе нужен драйвер для резервирования прерывания в системе.
krux
Вот ведь странные люди. Сначала берут linux с его строго определенной концепцией использования прерываний,, а потом пытаются с этой концепцией бороться.
dm.pogrebnoy
Можно воспользоваться Userspace IO driver, который, в том числе, позволяет и ловить прерывания.
https://www.kernel.org/doc/htmldocs/uio-howto/
bugdesigner
Правильно будет написать модуль в ядро, с обработчиком прерывания, и создать char device. В обработчике будете считывать данные и передавать их в буфер вашего девайса. А уж потом, из юзерспейса читать данные из девайса. Чтение регистра статуса прерываний - плохая идея, тк задержка с момента прихода прерывания до момента чтения может оказаться слишком большой, да и время это не постоянно и не предсказуемо. Короче, лучше написать модуль (драйвер), это не намного сложнее обычной программы.
johan
На рокетбордс появился набор "курсов" для Altera SoC:
от обзора что-это-такое до написания драйверов:
http://rocketboards.org/foswiki/view/Docum...CWorkshopSeries

Я одним глазом посмотрел - в третьей "лабораторной" есть куча примеров простых драйверов (в том числе и с прерываниями).
Nitrex
Решил освоить написание драйвера под linux. В качестве первого примера взял статью http://zhehaomao.com/blog/fpga/2013/12/29/sockit-4.html. Но возник вопрос: в Makefile есть строчка KERNEL_SRC_DIR=/home/zhehao/programs/others/linux-socfpga. Как я понимаю здесь нужно указывать путь к директории с исходниками ядра. Но на своём компьютере я директорию linux-socfpga не обнаружил. Подскажите пожалуйста откуда её можно взять и как установить что бы в конце концов можно было скомпилировать драйвер?
des333
Цитата(Nitrex @ Jan 26 2016, 21:22) *
Решил освоить написание драйвера под linux. В качестве первого примера взял статью http://zhehaomao.com/blog/fpga/2013/12/29/sockit-4.html. Но возник вопрос: в Makefile есть строчка KERNEL_SRC_DIR=/home/zhehao/programs/others/linux-socfpga. Как я понимаю здесь нужно указывать путь к директории с исходниками ядра. Но на своём компьютере я директорию linux-socfpga не обнаружил. Подскажите пожалуйста откуда её можно взять и как установить что бы в конце концов можно было скомпилировать драйвер?

Вам нужно скопировать себе исходники ядра.

Их можно взять отсюда

Чтобы скопировать исходники Вам нужно выполнить в терминале Linux'а следующие команды:
Код
git clone https://github.com/altera-opensource/linux-socfpga
git checkout socfpga-4.3


Важно:
  1. У Вас должен быть установлен git
  2. Чтобы собирать драйвер исходники ядра нужно подготовить. Легче всего для Вас -- просто собрать ядро.
  3. Для сборки ядра нужны некоторые пакеты. Перед тем, как браться за дело, лучше прочитать пару статей про сборку ядра -- тогда процесс пойдёт как по маслу.
Nitrex
Цитата(des333 @ Jan 27 2016, 15:31) *
Вам нужно скопировать себе исходники ядра.

Их можно взять отсюда

Чтобы скопировать исходники Вам нужно выполнить в терминале Linux'а следующие команды:
Код
git clone https://github.com/altera-opensource/linux-socfpga
git checkout socfpga-4.3


Важно:
  1. У Вас должен быть установлен git
  2. Чтобы собирать драйвер исходники ядра нужно подготовить. Легче всего для Вас -- просто собрать ядро.
  3. Для сборки ядра нужны некоторые пакеты. Перед тем, как браться за дело, лучше прочитать пару статей про сборку ядра -- тогда процесс пойдёт как по маслу.


Т.е я правильно понимаю, что исходники ядра нужно скомпилировать для среды Embedded Shell, которую я запускаю из под винды, когда компилирую обычные программки для userspace?
artix
Цитата(Nitrex @ Jan 26 2016, 22:22) *
Решил освоить написание драйвера под linux. В качестве первого примера взял статью http://zhehaomao.com/blog/fpga/2013/12/29/sockit-4.html. Но возник вопрос: в Makefile есть строчка KERNEL_SRC_DIR=/home/zhehao/programs/others/linux-socfpga. Как я понимаю здесь нужно указывать путь к директории с исходниками ядра. Но на своём компьютере я директорию linux-socfpga не обнаружил. Подскажите пожалуйста откуда её можно взять и как установить что бы в конце концов можно было скомпилировать драйвер?


В общем по драйверам очень нравится эта статья. Внизу есть ссылка на полную версию документа и исходники + все по-русски.
MAO
Цитата(artix @ Mar 14 2016, 16:47) *
В общем по драйверам очень нравится эта статья.

Да неплохой материал И следует отметить актуален для свежих ядер; "... в версии ядра 3.17 разработчики радикально поменяли прототипы ключевых макросов "
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.