Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Монстры Linux есть?
Отправлено
vitalyn 27 мая 2009, г. 15:11
Ситуация такая. Есть PC с процессором ATOM, памяти 2G на борту. В него воткнута PCI карточка, которая через Bus Mastering напрямую с этой памятью работает. Пытаюсь mmap эту память пользовательской программе - не могу выделить более 256М, а надо как минимум 1G. Что делаю - в коммандной строке ядра указываю MEM=512M, т.е. первые 512 метров из имеющихся 2 гигов отдаю Linux в полное его использование, а а оставшиеся полтора гига хочу отмаппировать себе. Если прошу не больше 256М - всё нормально, а если больше - ругается, чтобы я увеличил vmalloc=<size> Пытаюсь задать этот vmalloc в командной строке ядра при его загрузке - загрузка вообще колом встаёт, сыпет всё время одно и то же сообщение, сейчас не помню какое. Затык в функции ioremap, которая отображает физическую память в логические адреса ядра. Выбрасываю эту функцию, поскольку из пространства ядра мне нет необходимости обращаться к этой памяти. Возможно зря, поскольку с нею всё работало (но только до 256М), возможно она что-то инициализирует в качестве побочного эффекта.
Короче, программа из юзерспейса пытается сделать mmap этой физически имеющейся памяти. В драйвере в обработчике dev_mmap делаю remap_pfn_range, который пытается отобразить физический адрес в пространство виртуальных адресов процесса и тут всё валится с грохотом. Linux думает, что отсутствуют страницы памяти.
Как объяснить этой скотине, что память физически присутствует, что она не своппируемая, что Linuxу вообще о ней заботиться не надо, надо всего лишь прописать адресацию, чтобы к это памяти можно было обратиться???
Составить ответ | Вернуться на конференцию.
Ответы