Обращение к памяти по абсолютному адресу
Просто, насколько я понимаю, простое обращение по указателю, приведет обращение к области памяти {offset области памяти,выделенной ОС программе} + {адрес указателя}. Если не так - поправьте пожалуйста.
При этом надо не получить segmentation fault.
Как из С обратиться к области памяти по абсолютному адресу?
а никак... как ты правильно заметил, адрес, содержащийся в указателе - это смещение относительно начала области памяти, выделенной процессу. логически - от 0х0 до 0хFFFFFFFF. обратится к памяти другого процесса в общем случае нельзя.
а зачем это надо?
а зачем это надо?
Проблема следующая:
Есть ethernet коммутатор (точнее - мост, основанный на Micrel CENTAUR KS8695P), который работает на основе армовского процессора.
В его (как я понял процессора) регистрах содержится необходимая информация, которую требуется прочитать/переписать.
Устроено все так, что обращение к регистрам идет при обращении к памяти (оперативной видимо) по заданным адресам:
host memory address space.
Проблема следующая:
Есть ethernet коммутатор (точнее - мост, основанный на Micrel CENTAUR KS8695P), который работает на основе армовского процессора.
В его (как я понял процессора) регистрах содержится необходимая информация, которую требуется прочитать/переписать.
Устроено все так, что обращение к регистрам идет при обращении к памяти (оперативной видимо) по заданным адресам:
ну брат ты шутник... вообще то весь наш предыдущий разговор теряет смысл, потому что у процессоров ARM абсолютно другая архитектура и приципы работы с памятью. я то говорил про Linux. а у вас есть компилятор C для ARM? :)
ну брат ты шутник... вообще то весь наш предыдущий разговор теряет смысл, потому что у процессоров ARM абсолютно другая архитектура и приципы работы с памятью. я то говорил про Linux. а у вас есть компилятор C для ARM? :)
Так там и стоит линукс на ядре 2.4.16-rmk2.
Компилятор есть. Более того, им уже скомпилированы и запущены рабочие программы. =)
----------------
Итого: из user-space получить доступ к нужным регистрам невозможно. Как решение проблемы придется использовать экспорт данных из модуля ядра в пользовательское пространство. Через /proc скорее всего буду делать.