On Thu, Apr 14, 2011 at 7:13 PM, Jeremy Moles cubicool@gmail.com wrote:
Hey guys, me again. :)
So, my device is working great now that I can access the GPIO pins via userspace (using iotools w/ Tom Sylla's help) and can power on the device. However, I'd like to be able to toggle the power on via a kernel driver as well, but I'm having trouble accessing the same memory range from kernelspace.
For example:
iotools io_read8 0xA00
Will return the state of the first 5 GPIO pins. I see that iotools calls iopl() to be able to access this location from userspace.
When I try to do the same thing in the kernel:
unsigned short b; unsigned short* ptr = (unsigned short*)(0xA00);
if(access_ok(VERIFY_READ, ptr, 8)) { get_user(b, ptr);
...I immediately get a segfault. From what I've read and seen in other example code, I believe I'm doing this right. However, I may be making some wrong assumptions. I was just curious if anyone would be able to shed some light on the subject--perhaps I'm missing some virtual memory offset functions or similar...
Hello! I'm not a C programmer, I just make use of its strengths and some of its weaknesses. That being stated, why don't you explain more about what you're trying to achieve without of course releasing anything considered a trade secret.
For example are you using the uncommitted GPIO lines to access a feature on your device? And is your device returning something back to your board? Come to that, what is your device doing? That's the big thing I am curious about, again without doing that above.
For what I do with Linux, I am interested in making use of your ideas, but again there is that limitation. Also is this being done on a board that was built by your shop, or did it start out life as a reference platform.
----- Gregg C Levine gregg.drwho8@gmail.com "This signature fought the Time Wars, time and again."