Accessing flash directly from User Space

Jonathan Haws Jonathan.Haws at
Wed Oct 28 06:59:31 EST 2009

I know this is probably a really dumb question, but a wise man once said that the only stupid question is the one that is not asked.

So, I have written a flash driver in VxWorks that simply addresses the flash directly and handles all the hardware accesses just fine.  I am porting that to Linux and need it to run in user space (mainly to simplify the interface with the user - I want to keep it the same as in VxWorks).  Here is a snippet of what my question is:

static uint8_t bflashEraseSector(int sa, int verbose)
	uint16_t * flash = (uint16_t *) NOR_FLASH_BASE_ADRS;
	uint32_t offset;


	/* We divide by 2 here to adjust for the 16-bit offset into the address */
	offset = sa * NOR_FLASH_SECTOR_SIZE / 2;



I am trying to get a pointer to NOR_FLASH_BASE_ADRS which is defined to be 0xFC000000.  I then dereference that directly to write to the flash.

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?

Thanks for the help!


PS - I know that I could simply use the MTD driver provided by the kernel, but I need to be able to keep the interface the same so we can use previously written code.

More information about the Linuxppc-dev mailing list