Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Доступ к адресам в Linux (http://forum.oszone.net/showthread.php?t=30884)

ruslandh 28-01-2002 23:24 210605

Os Linux

Есть устройство, которое кладет по прямому доступу в ОЗУ информацию.
Ему доступны только первые 16 MB памяти (работает с 24 разрядами)
Есть задача, которая загружается с диска (т.е. не имеет фиксированных адресов)
Как этой задаче получить информацию от устройства ?
1 Как выделить динамически память в первых 16 мб ОЗУ.
2 Как получить реальные адреса этой области для передачи устройству.


ivank 28-01-2002 23:59 210606

ruslandh
Я думаю, вы не очень то понимаете, как работает операционная система в защищённом режиме -- каждая задача имеет своё адресное пространство, т.е. то, что у одного процесса лежит по адресу 0x12345678, не совпадает с тем, что лежит в другом процессе по тому же адресу. Т.е. к физичесскому адресу обратиться из пользовательского(работающего в 3-ем кольце) процесса невозможно ни в одной современной ОСи.

Отсюда вывод -- ищите информацию про написание драйверов под линукс, (неуважаемый мной) журнал программист, какжется публиковал ну очень вводную статью на эту тему.

Добавлено:

А вот и эта статья: http://www.programme.ru/index.phtml?...1/082001_1.htm

ruslandh 29-01-2002 00:57 210607

Спасибо.
Про драйверы все понятно - но нужны конкретные запросы к ядру, в общем эта задача и есть драйвер - непонятно как раз, как привязаться к конкретным адресам.

(Отредактировал(а) ruslandh - 1:02 29-01-2002)

ivank 29-01-2002 09:24 210608

ruslandh
А поподробнее про само устройство можно узнать?

ruslandh 30-01-2002 09:12 210609

Устройство передачи данных - какая разница ?
Шина ISA.


(Отредактировал(а) ruslandh - 9:15 30-01-2002)

SK 03-02-2002 17:59 210610

Доброго времени суток! Уменя была похожая проблема С обменом по EPP протоколу. Если ты знаеш конкректные физические адреса регистров, попробуй следующие например ioperm(0x387,5,1)
эта команда даёт разрешение работать с конкретными адресами в
ВНИМАНИЕ !!! только UNIX, Linux
outb()- запись в регистры
inb()- считать из них

ruslandh 09-02-2002 02:11 210611

Здравствуйте !
По-моему Вы что-то путаете - это-же обращение к адресам портов, а не адресам ОЗУ ? Или это общий механизм ? Что очень странно.

<font size=dfontsize1 class=bgc1>Исправлено: ruslandh, 8:05 11-02-2002

ruslandh 25-02-2002 06:48 210612

Спасибо Всем, узнал:

char *buffer = kmalloc (size, GFP_KERNEL | GFP_DMA)
unsigned long buffer_phys = virt_to_bus (buffer);

Можно использовать только в ядре Linux


Время: 21:50.

Время: 21:50.
© OSzone.net 2001-