Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux + gcc
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Макс_Мат
Добрый день, у меня такой вопрос: мне нужно под линухом обратиться к ячейке ОЗУ, в которой развернуто ядро и файловая система, по произвольному адресу. Прокатит ли такое в gcc?
int* adr = 0x8000a4;
*(adr) = 0x1A;

нутром чую, что нет, а как быть?
Макс_Мат
Добрый день, у меня такой вопрос: мне нужно под линухом обратиться к ячейке ОЗУ, в которой развернуто ядро и файловая система, по произвольному адресу. Прокатит ли такое в gcc?
int* adr = 0x8000a4;
*(adr) = 0x1A;

нутром чую, что нет, а как быть?
Alex03
Цитата(Макс_Мат @ Jan 15 2008, 18:18) *
Добрый день, у меня такой вопрос: мне нужно под линухом обратиться к ячейке ОЗУ, в которой развернуто ядро и файловая система, по произвольному адресу. Прокатит ли такое в gcc?
int* adr = 0x8000a4;
*(adr) = 0x1A;

нутром чую, что нет, а как быть?

А при чём тут GCC то? Да и ARM тоже?

Если Вы уверены что Вам это действительно надо то возможно у Вас есть чёнить типа /proc/kmem, /dev/mem и т.д, (т.е. память отражена на некий файл файловой системы) обычно доступны только root-у. Опять же надо разбираться в физических и виртуальных адресах и т.д.
Ну а правильный подход - драйвер.
vshemm
Конечно прокатит, вылезет SIGSEGV smile.gif
Что бы сделать то, что Вы хотите, нужно использовать /dev/mem и /dev/kmem (и только под рутом). Первое устройство - это физическая память, второе - память ядра после страничной странсляции (виртуальная).
zltigo
Цитата(Макс_Мат @ Jan 15 2008, 16:18) *
нутром чую..

Moderator:
Учтите! Кроспосты на форуме запрещены.
Темы объединил.
Макс_Мат
Спасибо по поводу /dev/mem. Поправте, если не прав: монтируем например /dev/mem0 в каталог например /mnt/ozu , далее в программе открываем его как файл и чтение/запись нужного адреса, т.е. такое прокатит?

Еще вопросик, а прокатит ассемблерная вставка? ось никаких финтов не выдаст?
vshemm
Цитата(Макс_Мат @ Jan 15 2008, 17:52) *
Спасибо по поводу /dev/mem. Поправте, если не прав: монтируем например /dev/mem0 в каталог например /mnt/ozu , далее в программе открываем его как файл и чтение/запись нужного адреса, т.е. такое прокатит?

Еще вопросик, а прокатит ассемблерная вставка? ось никаких финтов не выдаст?

Нет, открываем: fd = open("/dev/mem", O_RDWR, 0);
Перемещаемся куда нужно: lseek(fd, offset, SEEK_SET);
Читаем: read(fd, buffer, 0x1000);

Только учтите, это физическая память, придется делать трансляцию адресов. Из юзерспейса придется извращаться - вручную парсить каталог страниц, адрес которого находится в CR3 (на х86 архитектуре), доступа к которому тоже нет smile.gif
Действительно, проще написать драйвер smile.gif
Макс_Мат
Большое спасибо! Мне подходит такой вариант (я на arm). Но написание дров давно волнует - займусь на досуге. Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.