Accessing flash directly from User Space

Jonathan Haws Jonathan.Haws at sdl.usu.edu
Thu Oct 29 01:38:54 EST 2009


> On Tue, Oct 27, 2009 at 04:24:53PM -0600, Jonathan Haws wrote:
> >> >>> How can I get that pointer?  Unfortunately I cannot simply
> use
> >> the
> >> >>>
> >> >> address of the flash.  Is there some magical function call
> that
> >> >> gives me access to that portion of the memory space?
> >> >>
> >> >> $ man 2 mmap
> >> >>
> >> >> You want MAP_SHARED and O_SYNC.
> >> >>
> >> >
> >> >
> >> > To use that I need to have a file descriptor to a device, do I
> >> not?  However, I do not have a base flash driver to give me that
> >> file descriptor.  Am I missing something with that call?
> >> >
> >>
> >> /dev/mem
> >>
> >Okay, I now have access to the flash memory, however when I write
> to it the writes do not take.  I have tried calling msync() on the
> mapping to no avail.  I have opened the fd with O_SYNC, but cannot
> get things to work right.
> >
> >Here are the calls:
> >
> >	int fd = open("/dev/mem", O_SYNC | O_RDWR);
> >	uint16_t * flash = (uint16_t *)mmap(NULL, NOR_FLASH_SIZE,
> >			(PROT_READ | PROT_WRITE), MAP_PRIVATE, fd,
> >			NOR_FLASH_BASE_ADRS);
> 
> What board and CPU are you using?  Is your flash really at
> 0xFC800000, or is
> that the virtual address that VxWorks puts it at?

I am using a custom board based on the AMCC Kilauea development board.  It uses a 405EX CPU.  Yes, the flash is really at 0xFC000000.


More information about the Linuxppc-dev mailing list