1
我希望在Linux用户空间中的OMAP3530上写入硬件寄存器。请找到下面的代码。 Mmap返回错误:访问Linux用户空间中的硬件寄存器
内存映射失败。错误-1
MMAP:权限被拒绝
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#define BASE_ADDRESS 0x48050000
int main()
{
int mem;
unsigned int *value;
void *ptr;
/* Open /dev/mem */
if ((mem = open ("/dev/mem", O_RDONLY | O_SYNC)) == -1)
fprintf(stderr, "Cannot open /dev/mem\n"), exit(1);
ptr = mmap (0, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, mem, BASE_ADDRESS);
if(ptr == (void *) -1) {
printf("Memory map failed. error %i\n", ptr);
perror("mmap");
}
value = (unsigned int*)(ptr + 0x4BC+((1-1)*0x90)+(0*0x04));
*value = 479*799*3-4;
printf("value = %i", value);
value = (unsigned int*)(ptr + 0x4C4+((-1)*0x90));
*value = 1;
printf("value = %i", value);
value = (unsigned int*)(ptr + 0x4C8+((-1)*0x90));
*value = 1;
printf("value = %i", value);
return 0;
}
更改了mem = open(“/ dev/mem”,O_RDWR | O_SYNC),仍然出现错误:内存映射失败。错误1 mmap:不允许操作 – user1016711 2013-03-25 12:55:38
upps,对不起,我得到了x86的错误,但对于ARM OMAP3530它有效。谢谢! – user1016711 2013-03-25 13:04:06