Мне присвоен физический адрес, в частности 0x000000368d76c0
. Я пытаюсь сделать mmap
в моей программе. Код, который я используюПочему mmap не работает?
void *mmap64;
off_t offset = 0x000000368d76c0;
int memFd = open("/dev/mem", O_RDWR);
if (-1 == memFd)
perror("Error ");
mmap64 = mmap(0, sizeof(uint64_t), PROT_WRITE | PROT_READ, MAP_SHARED, memFd, offset);
if (MAP_FAILED == mmap64) {
perror("Error ");
return -1;
}
По какой-то причине, когда я запускаю этот код я получаю отказ от mmap
. В частности, он говорит Error Invalid argument
. Я уверен, что это из-за значения offset
, но я не знаю, что с ним не так.
Я был бы признателен за любую помощь по этому вопросу.
Вы имеете в виду 'address' by' adddress' в аргументах 'mmap()'? – MikeCAT
@MikeCAT Я имею в виду аргумент 'offset'. – flashburn
[mmap (2) - Страница руководства Linux] (http://man7.org/linux/man-pages/man2/mmap.2.html) говорит: «' offset »должно быть кратным размеру страницы, как было возвращено 'sysconf (_SC_PAGE_SIZE)'». Какая ценность в вашей системе? Ссылка: [sysconf (3) - страница руководства Linux] (http://man7.org/linux/man-pages/man3/sysconf.3.html) – MikeCAT