![]() |
Os Linux
Есть устройство, которое кладет по прямому доступу в ОЗУ информацию. Ему доступны только первые 16 MB памяти (работает с 24 разрядами) Есть задача, которая загружается с диска (т.е. не имеет фиксированных адресов) Как этой задаче получить информацию от устройства ? 1 Как выделить динамически память в первых 16 мб ОЗУ. 2 Как получить реальные адреса этой области для передачи устройству. |
ruslandh
Я думаю, вы не очень то понимаете, как работает операционная система в защищённом режиме -- каждая задача имеет своё адресное пространство, т.е. то, что у одного процесса лежит по адресу 0x12345678, не совпадает с тем, что лежит в другом процессе по тому же адресу. Т.е. к физичесскому адресу обратиться из пользовательского(работающего в 3-ем кольце) процесса невозможно ни в одной современной ОСи. Отсюда вывод -- ищите информацию про написание драйверов под линукс, (неуважаемый мной) журнал программист, какжется публиковал ну очень вводную статью на эту тему. Добавлено: А вот и эта статья: http://www.programme.ru/index.phtml?...1/082001_1.htm |
Спасибо.
Про драйверы все понятно - но нужны конкретные запросы к ядру, в общем эта задача и есть драйвер - непонятно как раз, как привязаться к конкретным адресам. (Отредактировал(а) ruslandh - 1:02 29-01-2002) |
ruslandh
А поподробнее про само устройство можно узнать? |
Устройство передачи данных - какая разница ?
Шина ISA. (Отредактировал(а) ruslandh - 9:15 30-01-2002) |
Доброго времени суток! Уменя была похожая проблема С обменом по EPP протоколу. Если ты знаеш конкректные физические адреса регистров, попробуй следующие например ioperm(0x387,5,1)
эта команда даёт разрешение работать с конкретными адресами в ВНИМАНИЕ !!! только UNIX, Linux outb()- запись в регистры inb()- считать из них |
Здравствуйте !
По-моему Вы что-то путаете - это-же обращение к адресам портов, а не адресам ОЗУ ? Или это общий механизм ? Что очень странно. <font size=dfontsize1 class=bgc1>Исправлено: ruslandh, 8:05 11-02-2002 |
Спасибо Всем, узнал:
char *buffer = kmalloc (size, GFP_KERNEL | GFP_DMA) unsigned long buffer_phys = virt_to_bus (buffer); Можно использовать только в ядре Linux |
Время: 21:50. |
Время: 21:50.
© OSzone.net 2001-