Your address is in I/O address space, not memory address space. Take a look at io_rw.c in iotools, you need to be using inb/outb (not just reading/writing memory).
Tom On Thu, Apr 14, 2011 at 4:12 PM, Jeremy Moles <jer...@emperorlinux.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... > > > -- > coreboot mailing list: coreboot@coreboot.org > http://www.coreboot.org/mailman/listinfo/coreboot > -- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot