LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Hardware (http://www.linuxquestions.org/questions/linux-hardware-18/)
-   -   Newbie question about usage of mmap (http://www.linuxquestions.org/questions/linux-hardware-18/newbie-question-about-usage-of-mmap-385516/)

justin8086 11-22-2005 11:29 AM

Newbie question about usage of mmap
 
Hi there,

I have a PCI device and I tried to write a short code to access it in user space with mmap.

first I "cat /proc/bus/pci/devices" and get the device's address: 0x00001800.

then I write the following code:

#include <sys/mman.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

int main(void)
{
void *map;
int fd;
int src = 0;
ulong base;
ulong length;

base = 0x00001800;
length = 0xFF;

fd = open("/dev/mem", O_RDWR);
printf("%d\n",fd);
map = mmap(NULL, (size_t)length, (PROT_READ | PROT_WRITE), MAP_SHARED, fd,(off_t)base);
if (map == MAP_FAILED)
{
printf("map failed: %s\n",strerror(errno));
exit(1);
}

memcpy(map+0x85,&src, 1);

return 0;
}

I run the code and got the error says that "Invalid Argument", I guess that is because of some misuse of mmap, but where is the error?

TIA

justin

ioerror 11-22-2005 02:10 PM

The offset (the last arg to mmap) must be multiple of the page size (4K on x86, 8K on 64-bit archs). Try just using an offset of zero and taking the 0x1800 into account when accessing the memory.


All times are GMT -5. The time now is 11:50 PM.