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