LINUX.ORG.RU

Kernel module. Memory access.


0

0

Работаю с процессором PXA270. Нужно написать драйвер для общения с неким устройством по шине общего назначения (GPIO).

Побаловался, написав небольшую программку в userspace: нажимаю кнопочку - мигает лампочка. Делал я это мапингом /dev/mem-а.
Теперь требуется достучаться до interrupt-контроллера.

Как получить доступ к памяти в kernelspace, чтобы подёргать регистрами interrupt-контроллера?

>Как получить доступ к памяти в kernelspace, чтобы подёргать регистрами

interrupt-контроллера?


В смысле? Навесить свой обработчик прерываний из userspace????

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

>Навесить свой обработчик прерываний из userspace????

Мммм...не очень понимаю понятие «обработчик прерываний в userspace», но, вобщем, информация про interrupt-контроллер, которую я привёл, - избыточность.
Документация описывает, как с ним (контроллером) работать и приводятся некоторые адреса (в памяти), которые требуются для установки всяких масок и т.п.
Наверное, смешно, но как дорваться до памяти программе из userspace, я знаю (через /dev/mem), а вот как это сделать на ядерном уровне - нет.

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

Еще вот - ioremap отображает куски, расположенные по адресам, кратным размеру страницы, поэтому, возможно тебе придется делать отступ.

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

Ну так дело обстоит и с mmap(). Что за отступ?

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

> Теперь требуется достучаться до interrupt-контроллера.

Ты хочешь обработчик прерывания от GPIO-пина зарегистрировать? Используй для этого request_irq.

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

>Используй для этого request_irq.
Да-да. Просто я до этого ещё не дошёл. Ведь ещё надо сам interrupt-контроллер сконфигурировать соответствующим образом. У этой шины GPIO, кажется, аж 127 пинов. Он же не будет выдавать прерывание для каждого пина. Пока не всё ясно. Но лампочками из ядерного модуля уже моргаю =)

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

>>Используй для этого request_irq.

Да-да. Просто я до этого ещё не дошёл. Ведь ещё надо сам interrupt-контроллер >сконфигурировать соответствующим образом. У этой шины GPIO, кажется, аж 127 >пинов. Он же не будет выдавать прерывание для каждого пина. Пока не всё ясно. Но >лампочками из ядерного модуля уже моргаю =)


Будет. И не надо самому конфигурировать контроллер. Еще раз говорю, используй request_irq. Номер прерывания из номера GPIO пина можно получить используя макрос gpio_to_irq.

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