LINUX.ORG.RU

обработка прерываний в Линуксе


0

0

Доброе время суток. Проблемка в следующем - имеется: 1) контроллер, который умеет генерить прерывания 2) программка которая умеет общаться с контроллером Требуется чтобы программка узнала, что пришло прерывание. В модуле не хотелось бы делать ни открывания устройства - ничего как либо связаннное с dev. Прочитав всякие мануалы типа "Энциклопедия разработчика модулей ядра Linux" и "Kernel hackers guide" простого решения так и не увидел. В идеале хотелось бы чтобы пользовательский процесс до прихода прервания был заблокирован. Заранее спасибо.

anonymous

если модуль ядра не хочешь писать .. тогда надо пользовать maped io и шарить кусок памяти на которую мапиться девайс с юзер спейсом ..

удачи!

lg ★★
()

Если правильно понял вопрос, то можно написать модуль который по приходу прерывания отправляет процессу сигнал. Процесс во время ожидания просто уходит в слип. Сигнал его разбудит. Только для этого процесс должен сообщить о себе модулю. Это можно сделать, например, создав в proc файл, с возможностью записи в него. при обращении к этому файлу pid процесса запоминается и ему идёт сигнал по приходу прерывания.

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

Спасибо. Если я правильно - модуль загружен, в proc есть какой-то файл, потом из программы я что-то пишу в файл и засыпаю, модуль по приходу прерывания смотрит файл и шлет сигнал по найденному там pid`у? Возник вопрос - на сколько быстро происходит чтение сего файла. И какое время будет проходить от поступления прерывания, до пробуждения процесса.

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

Процесс пишет в файл, что-нить, какую-нить magic string, для того что бы защититься от того, что какая-нить другая программа обратиться к этому файлу. Когда кто-нить пишет в этот файл magic string модуль запоминает pid процесса, получается список из процессов которым надо отправить сигнал. Время от наступления прерывания до пробуждения процесса зависит от загрузки другими задачами, от приоритета процесса, и приоритетов других процессов выполняющихся в настоящее время в системе. Надо ставить эксперименты, смотреть......

Whaler
()

Тебе нужна однократная реакция на прерывание или постоянная? Если однократная, то все достаточно просто - при старте процесс засыпает, когда сгенерировалось прерывание драйвер будит процесс. Если же нужно обрабатывать каждое прерывание, то без синхронизации драйвера и процесса не обойтись. Самый простой вариант - это создать символьное устройство, зарегистрировать обработчик прерывания и использовать системные вызовы open, read, write и стандартные средства синхронизации - семафоры.

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