Ядро Linux: как пройти физические страницы в mem_map из пространства пользователя, используя / dev / mem? - PullRequest
3 голосов
/ 24 ноября 2011

Мне нужно просмотреть все физические страницы, содержащиеся в mem_map в пространстве пользователя, через / dev / mem. Mmap не может быть использован. Единственная надежда состоит в том, чтобы использовать вызовы open / read. Я знаю физический адрес mem_map внутри ядра. Это код пользователя земли:

 /* open /dev/mem file*/
 if((fd = open("/dev/mem", O_RDONLY)) == -1) {
    printf("/dev/mem could not be opened.\n");
perror("open");
    exit(1);
  } else {
  printf("/dev/mem opened.\n");

 /* seek to the mem_map at mem_map_phy_addr */
 if(lseek(fd, mem_map_phy_addr, SEEK_SET) == -1) {
   perror("lseek");
 }
 else {
   printf("lseek ok\n");
 }

Теперь вопрос в том, как начать обход карты памяти? Какой пользовательский файл включает в себя «struct page»?

Спасибо.

1 Ответ

0 голосов
/ 26 ноября 2011

Во-первых, вам нужно получить смещение 'mem_map', которое является физическим адресом этого символа. Поскольку «mem_map» экспортируется, вы можете написать небольшой модуль ядра, чтобы получить этот адрес.

Затем вы можете выполнить lseek () с этим смещением (это адрес, который вы получили выше), и вы можете начать читать «mem_map» оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...