неа, ваапче не так :)
согласен. этих подробностей не знаю.
запись значения в память, посредством /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
их удобно показывает, вместе с таблицей соответствия секций сегментам. Есть системный вызов ptrace, который вообще-то может изменить секцию кода,
Пусть меня поправят
про то чтобы вебсокет сервер открывался с адресной строки броузера, я никогда не слышал.
в основном потоке только принимаешь соединения. А все общение делаешь в новом треде.
попробуй сперва случай попроще, когда клиент инициатор диалога, а сервер отвечает на запросы
почему переход от 0 на 1 при ввключении устройства не интерпретируется, а при переходе с 0 на 1 в конце передачи интерпретируется именно как стоп-бит
почему тогда переход от стоп бита на лог. 1 интерпретируется?
То есть до получения стартового бита( перехода с 1 на 0) он не начинает работу?
pfg21, чрезмерно уверенный тон ответов. "Не всё знаею", а пишешь -- как будто экспертным мнением делишься. И не в первый раз, и не только по этому топику.
Это не "ты привёл цепочку действий", это ты какую-то бредовую фантазию привёл, без каких либо документальных потверждений.
Если внимательно прочитать этот комментарий, то он как раз об этом. Но и без того, любая книжка по внутренностям линукса это делает. Половина главы 15 LDD, например, буквально об этом.
Хука под файл
/dev/mem
конечно нет. Есть поле mmap в структуреfile_operations
, позволяющее любой файловой системе или драйверу предоставить свою реализациюmmap
для файлов которые они обслуживают. Опять же, любая книжка по внутренностям ядра об этом рассказывает.