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

Все о программировании под *nix
Anonymous

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

Сообщение Anonymous »

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

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

по мойму - из user space никак
тут вам не здесь
программы имеют дело только с виртуальными адресами, которые маппятся на реальные в ядре
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

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

dimm_coder
Интересующийся
Сообщения: 65
Зарегистрирован: 19 авг 2003, 10:56
Откуда: Anwerpen, Belgium / Belarus
Контактная информация:

Сообщение dimm_coder »

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

Anonymous

Сообщение Anonymous »

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

dimm_coder
Интересующийся
Сообщения: 65
Зарегистрирован: 19 авг 2003, 10:56
Откуда: Anwerpen, Belgium / Belarus
Контактная информация:

Сообщение dimm_coder »

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

Anonymous

Сообщение Anonymous »

Большое спасибо всем за помощь

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

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

dimm_coder
Интересующийся
Сообщения: 65
Зарегистрирован: 19 авг 2003, 10:56
Откуда: Anwerpen, Belgium / Belarus
Контактная информация:

Сообщение dimm_coder »

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

Аватара пользователя
Jek
Неотъемлемая часть форума
Сообщения: 425
Зарегистрирован: 25 авг 2002, 08:50
Откуда: Minsk
Контактная информация:

Сообщение Jek »

А если порты - то всё просто (если нужно только по-быстрому протестить некритичную к скорости обмена данными железку):
man: ioperm(2)
inb, outb (функции не документированы, поскольку зловредны)
"Но в декабре я по ошибке позвонил вместо
модема на винчестер." (Linus Torvalds, "Just for fun")

AlekseyKondratenko

Сообщение AlekseyKondratenko »

See man 4 mem. Use mmap of /dev/mem.

GreenDeath

Сообщение GreenDeath »

См. книгу:

Linux Device Drivers, 2nd Edition

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

Ответить