Vote count:
0
I'm using a Raspberry Pi B+, and I'm trying to mmap two different sections of /dev/mem
- the first to be able to set two pins' functions from location 0x2020 0004
(0x04
bytes long), the other to manipulate the BSC Slave functions on the BCM2835 chip on the Pi from location 0x2021 4000
(0x1C
bytes long).
static uint32_t * initMapMem(int fd, uint32_t addr, uint32_t len)
{
return (uint32_t *) mmap((void*)0x0, len,
PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_SHARED|MAP_LOCKED,
fd, addr);
}
int initialise(void) {
int fd;
fd = open("/dev/mem", O_RDWR | O_SYNC) ;
if (fd < 0)
{
fprintf(stderr, "This program needs root privileges. Try using sudo.\n");
return 1;
}
pinReg = initMapMem(fd, 0x20200004, 0x4);
bscReg = initMapMem(fd, 0x20214000, 0x1C);
close(fd);
if (bscReg == MAP_FAILED)
{
fprintf(stderr, "Bad, mmap failed.\n");
return 1;
}
if (pinReg == MAP_FAILED)
{
fprintf(stderr, "Bad, mmap failed.\n");
return 1;
}
return 0;
}
initialise()
is called out of main()
. Stepping through the program with gdb
I find that bscReg
gets positioned right, but pinReg
returns as MAP_FAILED
(aka 0xFFFFFFFF
) with errno
set to EINVAL
. Doesn't matter which way it's done, either - pinReg
always finds itself as MAP_FAILED
when mmap
ed first or second.
How do I get pinReg
to a valid value?
asked 1 min ago
Issues mmaping the same file twice
Aucun commentaire:
Enregistrer un commentaire