Before you jump into the kernel hole, is there a reason that you're not
using the existing sysfs gpio interface (
https://www.kernel.org/doc/Documentation/gpio/sysfs.txt) for the interrupts?

Using this, if you set the gpio up as an interrupt with the sysfs
interface, you poll() the value file and it will block until there's an
interrupt. When it unblocks, you can read the current value.

Or, you can make the gpio look like an event/button:
http://bec-systems.com/site/281/how-to-implement-an-interrupt-driven-gpio-input-in-linux

Any sane way you do it will be the same at the low level. You'll have a
read or ioctl function on the kernel device file that blocks in the kernel
using a completion/semaphore, putting your process/thread to sleep. When
the interrupt fires, the interrupt handler function is called to release
the completion/semaphore, unblocking your process/thread and allowing it to
continue executing. This unblocking is how the userspace program is
signaled.

So, if you *want* to reinvent the wheel, for understanding, then that's
fine. But, there's an existing interface that exists, only a few lines of
code away.

--Brandon

On Tue, Sep 9, 2014 at 7:10 PM, neo star <prag.in...@gmail.com> wrote:

> Hi Brandon
>
> I read through the link, very informative thanks.I can create a thread to
> do the polling and signal me when its ready.
> But how to really write an ISR in arm. I see a lot of guides but they say
> that it will work in Intel processors but they are not sure about ARM.
> For sure from my readings i see that i need a kernel object to handle an
> ISR, But how to really do that.
> One example about how to handle interrupts is in
> http://stackoverflow.com/questions/15245626/simple-interrupt-handler-request-irq-returns-error-code-22
> The other one is request_threaded_irq() as mentioned by Kavita in the
> above post.
> Is there any How to and guide to writing one. Any links.
> Thanks.
>
>
> On Wednesday, September 10, 2014 12:59:08 AM UTC+5:30, Brandon I wrote:
>>
>> See UIO: https://www.kernel.org/doc/htmldocs/uio-howto/
>>
>> The uio_pruss.c driver that comes with the pru package is a good example.
>>
>> > I have written a kernel module that registers interrupts on the rising
>> edge on a GPIO pin and want to relay this message to user space.
>>
>> The sysfs gpio interface already does this. Check out the code.
>>
>> On Thursday, August 28, 2014 2:44:12 AM UTC-7, sid...@gmail.com wrote:
>>>
>>> I have read online that we can't handle interrupts from user
>>> space. Instead -
>>> 1) We can write a kernel thread and have that thread wait on an event.
>>> 2) Once the interrupt occurs, send one asynchronous event from the
>>> kernel module/driver to user space where we will have one signal handler
>>> with FASYNC to tackle this
>>>
>>> I have written a kernel module that registers interrupts on the rising
>>> edge on a GPIO pin and want to relay this message to user space. How do I
>>> go about implementing the above?
>>>
>>> Thanks!
>>>
>>  --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "BeagleBoard" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beagleboard/eNX0CU7-noE/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> beagleboard+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to