Здравствуйте, unkn2000, Вы писали:
U>Я изменил код:
U>U> int RC = remap_page_range(vma->vm_start,
U> __pa(KBuffer),
U> size,
vma->>>vm_page_prot);
U> for(i = 0; i < 256; i++) KBuffer[i] = 55;
U> return RC;
U>
U>Теперь remap_page_range не может повлиять на содержимое буфера, но результат тот же.
U>Как быть?
U>Я пробовал вообще выносить весь код выделения, отображение и инициализации памяти в функцию probe (она вызывается при загрузке драйвера, когда подключается устройство до вызова мной mmap). А в DrvMmap только возвращал значение возращённое remap_page_range. Но результаты те же.
Хмм... Ну вообще-то инициализация в теле mmap хука не есть good. Что дальше делает ядро с vma_struct с ходу не могу сказать. Хотя надо как-нть в этом покопаться. Я делаю всю инициализацию уже после всего, регистрируя некий ioctl.
int fd = open( ... );
char* ubuf = ( char* ) mmap( ... );
...
unsigned int junk;
int rc = ioctl( fd, INIT_CMD, &junk );
for(i = 0; i < 256; i++) fprintf( stderr, "%d ", ubuf[ i ] );