Re[5]: Linux. Драйвер. Память.
От: vitka Россия  
Дата: 23.12.03 09:25
Оценка:
Здравствуйте, 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 ] );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.