Re[2]: mur помоги. (драйвер)
От: unkn2000  
Дата: 05.05.04 11:43
Оценка:
Здравствуйте, Murr, Вы писали:

M>Здравствуйте, Аноним, Вы писали:


M>Давно не занимался программированием, так что просьба отнестись к тому, что я буду писать, со здоровым скептицизмом.


M>i_size — это размер данных inode. Все эти generic функции оперируют указателем и концепцией размеров inode, т.е. ты читаешь — указатель перемещается. Больше данных чем есть прочитать нельзя. Ну обойти это можно просто — напиши в i_size столько сколько нужно, можно написать максимум. Ну либо писать свой read, который плюет на проверки, связанные с размером (но тогда надо делать cut&paste кучи полезного кода).



M>Насчет 512 Кб странно — надо смотреть

M>А какая хоть ошибка возвращается?

Ни каких ошибок не возвращается.
Просто iobuf->length / blocksize всегда не больше 128 страниц (512К).
Выделяю 256К байт под буффер — всё нормально 64 страницы.
Но если больше, например 1М байт — то страниц 128.

Вообщем то у меня уже всё работает.

Проблема была больше аппаратная.
Дело в том что если устройство не поддерживает в балк в себя,
то при последоватьльной записи в память в\в данных по адрессам,
которые идут друг за другом или в один и тот же адресс, система (PCI) виснит намертво.
Чипсет пытается их как-то упаковать в один пакет и передать за один балк.
А устройство не поддерживает такой передачи в себя — коллизия.
Решается либо интервалами между передачей байт или слов,
либо писать так чтобы адресса не стояли рядом ( сначало в 1 и 3 регистр (адресс в\в) устройства, а потом в 5, 2, 4).
Но это грубо. лучше если устройство поддерживает в себя балк.
Но не все разработчики это делают.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.