Страница 1 из 1

Работа с физической памятью как?

Добавлено: 20 авг 2003, 12:25
Anonymous
Мне необходимо из моей программы на С++ обратится к ячейки памяти с фиксированным адресом для чтения/записи если кто может подсказать как это сделать под Linux или где прочитать буду бесконечно признателен.
P.S. Если мой вопрос показался вам лаймерским просьба не пинать меня ногами сильно. Я только недавно начал пытаться программировать под Linux. :oops:

Добавлено: 20 авг 2003, 13:02
mend0za
по мойму - из user space никак
тут вам не здесь
программы имеют дело только с виртуальными адресами, которые маппятся на реальные в ядре

Добавлено: 20 авг 2003, 15:18
Llama
Объясни, зачем тебе обращаться к фиксированому адресу - и тебе объяснт, как грамотно этого избежать.

Добавлено: 20 авг 2003, 15:47
dimm_coder
Скорее всего, Colobok путает понятия физическая и виртуальная память - а именно для него это одно и то же. В любом случае, уточни, для что ты пытаешься сделать своей программой и тогда можно будет рассмотреть возможные решения проблемы (если она еще останется)

Добавлено: 21 авг 2003, 09:56
Anonymous
Программа пишется для взаимодействия с платой (плата не стандартная и драйверов к ней нет), плата пишет и читает данные в эту ячейку и таким образом осуществляется взаимодействие с программным обеспечение. Как я понимаю (поправьте меня пожалуйста если я не прав) что бы реализовать работу с платой в Linux надо написать драйвер/модуль который необходимо встроить в ядро ОС?

Добавлено: 21 авг 2003, 10:17
dimm_coder
в любой современной ОС для непосредственного доступа к железу необходимо аботать в 0-ом кольце - а это драйвер обычно, ну уже потом можно взаимодействовать с этим драйвером через некоторый интерфейс из 3-его кольца, т.е. пользовательского режима... далее написание драйвера обычно зависит от того куда и как эта плата цепляется (имеется в виду через какой интерфейс PC) ... в принципе в сети, пожалуй, можно найти достаточно инфы... попробуй в поисковике - Linux Device Drivers , Alessandro Rubini правда на англ. яз. - мот поможет хотя бы получить представление о написании драйверов

Добавлено: 22 авг 2003, 12:20
Anonymous
Большое спасибо всем за помощь

Добавлено: 22 авг 2003, 13:01
Llama
Лдно замечание: если плата пишет в фиксированую ячейку памяти, то предстоит нехилая работенка: как минимум, нужно запретить ядру размещать программы в этом участке памяти. Или это не ячейка памяти а порт ввода/вывода?

Добавлено: 22 авг 2003, 13:31
dimm_coder
скорее должен быть порт ввода-вывода, либо плата должна поддерживать некоторый интерфейс инициализации - когда ей будут сообщены адреса по которым она сможет работать ... далее мне кажется сомнительно что плата сама по себе может писать в оперативную память компа - чтоли некоторая DMA из платы в память - в любом случае для этого тем более необходим интерфейс инициализации
т.е.
либо - порты ввода -вывода (логично )
либо - наличие некоторого интерфейса апаратной инициализации для платы когда ей можно назначить некоторые адреса (например ядром )

Добавлено: 22 авг 2003, 22:34
Jek
А если порты - то всё просто (если нужно только по-быстрому протестить некритичную к скорости обмена данными железку):
man: ioperm(2)
inb, outb (функции не документированы, поскольку зловредны)

Добавлено: 07 сен 2003, 00:36
AlekseyKondratenko
See man 4 mem. Use mmap of /dev/mem.

Добавлено: 27 сен 2003, 01:21
GreenDeath
См. книгу:

Linux Device Drivers, 2nd Edition

http://www.xml.com/ldd/chapter/book/index.html