nixp.ru v3.0

25 мая 2017,
четверг,
19:19:35 MSK

DevOps с компанией «Флант»
BADC0DEh написал 24 октября 2005 года в 16:34 (330 просмотров) Ведет себя как мужчина; открыл 20 тем в форуме, оставил 45 комментариев на сайте.

Не получается использовать эту функцию, ман (http://wВw.linuxdoc.ru/manpages/man2/mmap.2.html) зачитал до дыр.

Задача следующая: надо поиметь возможность писать/читать в заданную область памяти (0×40000000). Это не на х86, но значения не имеет.

int fd;

byte readval;

void *map_base;

if((fd = open(«/dev/mem», O_RDWR | O_SYNC)) == -1) {

printf(«File dev.mem ne otkrqt \n»);

exit(-1);

}

/* Map one page */

map_base = mmap(0×0, 0xF, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0×0);

if(map_base == (void *) -1){

close(fd);

exit(-1);

}

Если плохо сформулировал, могу сформулировать по-другому.

(нужно писать и читать в пару байтов по адресу 0×40000000, они отвечают за управление lcd матрицей, как это сделать?

Longobard

ИМХО ты не можешь получить доступ к памяти другого процесса (если он не дочерний ессно).

rgo

BADC0DEh

для того чтобы через mmap добраться до 0×40000000, в адресном пространстве твоего процесса должен быть свободен непрерывный кусок такого и даже чуть большего размера. Ты уверен что он есть такой?

Но зачем тебе mmap? Чем тебе lseek, write и read не нравится?

ИМХО ты не можешь получить доступ к памяти другого процесса (если он не дочерний ессно).

Имея права рута можно делать всё что угодно.

BADC0DEh

Дело в том, что у меня отдельная от компа плата с процом ARM9200, я могу с ней общаться либо через RS232 или через Ethernet. Вот, я туда залил линух через RS, он некоторые устройства на плате проинициализировал. Я к разъему подключаю lcd матрицу. Она подключается на шину данных, на прямую. Обратиться к ней можно если обращаться к адресам с 0×40000000 по 0×4FFFFFFF. На самом деле там 2 адреса, для записи, чтения (регистры) — команды и данных. Если 3-й бит адреса установлен в данном адресном пространстве, это команда, если нет — данное. Вот, и у меня не получается туда записать.

Вроде, достаточно подробно изложил суть.

PS: Приложение я заливаю на плату через ftp, и запускаю под root.

vkle

Возможно у того Линукса который ты залил в АРМ есть какие-то специальные операции ввода-вывода?

Есть вариант реализовать такую функцию на ассемблере для АРМ. Я так понимаю у тебя какая-то производственная ЭВМ или контроллер. Какой?