в GPIO пин прокинул пятерку с 7 по 9 биты, т.е. тем самым включил прерывание при высоком уровне
Может прерывания нужно как-то явно включать процессорной командой, не знаешь?
PS.EXCM и установкой PS.INTLEVEL в значение ниже уровня прерываний которые нужно разрешить и 2) установкой битов в регистре INTENABLE соответствующих конкретным IRQ которые нужно разрешить. ты утверждаешь что mmap при мапинге /dev/mem будет напрямую писать в физическую память ??
mmap не будет никуда писать. Но mmap может отобразить любую область физической памяти в адресное пространство процесса для прямого доступа.тогда получается любой пользователь может получить доступ к любому участку физической памяти без каких-либо проверок, только за'mmap'ив /dev/mem в своей проге ??
/dev/mem. mmap в mem_fops, mem_fops указаны как fops в массиве devlist для устройства с минорным кодом DEVMEM_MINOR, этот массив обрабатывается здесь, где регистрируются устройства с мажорным кодом MEM_MAJOR. Устройство с кодом 1, 1 -- это /dev/mem и есть, как можно увидеть здесь …но это совсем не в тему
…в контексте вопроса сие не имеет значения.
код, реализующий mmap под /dev/mem, не приводил :)
это потребует наличие в хуке кода обработки доступов пользователя к /dev/mem.
open, которым файл открывают.сильно сомневаюсь что такой хук будет внедрен, смысл в нем ??
mmap для /dev/mem, в чём ты конкретно сомневаешься, я не понял? в каком месте бредовость ??
mmap отлавливает это изменение…
…и формирует файловый запрос на запись. запрос получает драйвер VFS разбирает путь
выявляет подстрочку /dev
/dev/mem работает только пока он в /dev, а если его перенести в какое-нибудь другое место, то он работать перестанет?и направляет его в драйвер udev ответственный за этот путь
не все знаю, чего в этом криповатого ??
Цепочку действий для записи значения в память с помощью спец.файла /dev/mem я привел чуть выше.
Приведи свою.
Я сильно сомневаюсь что в функции mmap есть хук под файл /dev/mem
/dev/mem конечно нет. Есть поле mmap в структуре file_operations, позволяющее любой файловой системе или драйверу предоставить свою реализацию mmap для файлов которые они обслуживают. Опять же, любая книжка по внутренностям ядра об этом рассказывает. неа, ваапче не так :)
согласен. этих подробностей не знаю.
запись значения в память, посредством /dev/mem, проходит кучу прослоек
mmap отображает фал на произвольную память, котрую ему выдал менджер памяти. ты записываешь в эту область, mmap отлавливает это изменение и формирует файловый запрос на запись. запрос получает драйвер VFS разбирает путь, выявляет подстрочку /dev и направляет его в драйвер udev ответственный за этот путь. udev перенаправляет запрос в драйвер, ответственный за /dev/mem, и только он разбирает файловый запрос и пишет напрямую в указанный адрес физической памяти.
/dev/mem и передаёшь его fd в системный вызов mmap, в ядре вызывается функция mmap_mem зарегистрированная здесь. Эта функция, как можно увидеть здесь, вызывает remap_pfn_range для выделенного участка виртуальной памяти, а в качестве параметра pfn, определяющего номер страницы физической памяти, как написано здесь, передаёт vma->vm_pgoff, т.е. смещение, переданное mmap, но выраженное в страницах. Т.е. не "произвольную память, котрую ему выдал менджер памяти", а вполне конкретную физическую память, которую ты попросил в вызове mmap. обычно -O3 для отладки с макс. кол-вом символов
-O3 -- это максимальная оптимизация. Максимальная отладочная информация -- -g3. Уровень отдладочной информации выбранной ключом -g не влияет на сгенерированный код. Отвечая на твой вопрос, что предотвращает запись в секцию .text - флаги секций. У каждой секции есть свои флаги, которые отвечают за возможности работы с этими секциями.
readelf -l их удобно показывает, вместе с таблицей соответствия секций сегментам.
djEban, конкретно по этим двум топикам -- нет. Мой опыт в основном получен из разборок с реальными системами и эмуляторами и из взаимодействия с людьми делающими железо. Хотя, можно упомянуть "Digital Design and Computer Architecture" Харрис и Харрис и какой-нибудь базовый учебник по верилогу, типа FPGA Prototyping by Verilog Examples.