Thread (44 messages) 44 messages, 12 authors, 2009-11-01

RE: Accessing flash directly from User Space

From: Jonathan Haws <hidden>
Date: 2009-10-27 22:25:01

quoted
quoted
quoted
How can I get that pointer?  Unfortunately I cannot simply use
the
quoted
quoted
quoted
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?
quoted
=20
/dev/mem
=20
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 ava=
il.  I have opened the fd with O_SYNC, but cannot get things to work right.

Here are the calls:

	int fd =3D open("/dev/mem", O_SYNC | O_RDWR);
	uint16_t * flash =3D (uint16_t *)mmap(NULL, NOR_FLASH_SIZE,
			(PROT_READ | PROT_WRITE), MAP_PRIVATE, fd,
			NOR_FLASH_BASE_ADRS);

When I do flash[0] =3D 0x1234, and then check the value, they do not match.

	flash[0] =3D 0x1234;
	msync(flash, NOR_FLASH_SIZE, MS_SYNC | MS_INVALIDATE);
	printf("flash[0] =3D %#04x\n", flash[0]);

That prints flash[0] =3D 0x7f45.  I have verified that I am reading the cor=
rect values.  I can display the flash contents in U-Boot and 7f45 is what i=
s in the first 16 bits of flash.

Why can I not write to flash?  What am I doing wrong?

Thanks!

Jonathan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help