mmap64 wrong physical mapping
I am writting an application that needs control over large (1gig+) portions of contiguous memory. I am currently doing this by using mem=1024m during boot. My system is a dual opteron with 5 gig of memory. In my program I have
if ((fd=open("/dev/mem", O_RDWR))<0)
{
perror("open");
exit(-1);
}
PtrMemoryBase = (void *) mmap64(
NULL,
size,
PROT_READ | PROT_WRITE,
MAP_FILE | MAP_SHARED,
fd,
base );
size = 0x400000000
I also have -D_FILE_OFFSET_BITS=64.
If base is between 1 and 3 gig the process works fine. When base is 4 gig + the mmap64 works but the memory does not seem to be mapped to the base location. I write a pattern to PtrMemoryBase then have my hardware start doing DMA transfers to the base address but I do not get the data I wrote to PtrMemoryBase.
Thanks for any help
Mark
Last edited by mark02k; 10-20-2004 at 09:47 AM.
|