Hi Brandon Thanks for the reply. I will summarize here what i found about controlling a GPIO and about using interrupts.
1. Using sysfs one can easily control the gpio and using threading can re-create pseudo-interrupt from user space. Found a useful project called libsoc https://github.com/jackmitch/libsoc. They use threading along with polling using poll(2) 2. Using mmap() one can import the memory space of the GPIO peripheral and with a combination of threads can re-create pseudo-interrupt from user space. Found useful project called BBBIOlib https://github.com/VegetableAvenger/BBBIOlib. 3. Using /dev/input/event for controlling GPIO from user space. 4. Using an LKM from kernel space where one can use request_irq() or request_threaded_irq() and using some kind of buffering to transfer the data to userspace. Here one will be writing actual interrupts. Some bits can be found here http://processors.wiki.ti.com/index.php/GPIO_Driver_Guide#Sysfs_entries_configuration I have very good idea about 1 and 2. I am still working on 3-> /dev/input and also on 4-> about writing a real ISR. Although the above methods enable GPIO control I am not sure which will give me the highest performance. I read that using mmap() method gives faster switching on forums and the using sysfs gives the slowest switching rate. I am not sure about /dev/input method. The LKM method gives faster ISR and i am guessing that LKM in combination with mmap() will give faster response timings. Any thoughts on the above... On Wednesday, September 10, 2014 8:20:18 AM UTC+5:30, Brandon I wrote: > > 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....@gmail.com <javascript:> > > 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...@googlegroups.com <javascript:>. >> 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.