Задать вопрос
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    не все знаю, чего в этом криповатого ??

    pfg21, чрезмерно уверенный тон ответов. "Не всё знаею", а пишешь -- как будто экспертным мнением делишься. И не в первый раз, и не только по этому топику.

    Цепочку действий для записи значения в память с помощью спец.файла /dev/mem я привел чуть выше.

    Это не "ты привёл цепочку действий", это ты какую-то бредовую фантазию привёл, без каких либо документальных потверждений.

    Приведи свою.

    Если внимательно прочитать этот комментарий, то он как раз об этом. Но и без того, любая книжка по внутренностям линукса это делает. Половина главы 15 LDD, например, буквально об этом.

    Я сильно сомневаюсь что в функции mmap есть хук под файл /dev/mem

    Хука под файл /dev/mem конечно нет. Есть поле mmap в структуре file_operations, позволяющее любой файловой системе или драйверу предоставить свою реализацию mmap для файлов которые они обслуживают. Опять же, любая книжка по внутренностям ядра об этом рассказывает.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    pfg21, выбери что-нибудь одно, либо

    неа, ваапче не так :)

    либо

    согласен. этих подробностей не знаю.

    И то и то вместе смотрится как-то крипово, как будто ты не человек разумный, а бот какой-то.

    запись значения в память, посредством /dev/mem, проходит кучу прослоек

    pfg21, запись значения в память происходит напрямую, нет никаких прослоек.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    mmap отображает фал на произвольную память, котрую ему выдал менджер памяти. ты записываешь в эту область, mmap отлавливает это изменение и формирует файловый запрос на запись. запрос получает драйвер VFS разбирает путь, выявляет подстрочку /dev и направляет его в драйвер udev ответственный за этот путь. udev перенаправляет запрос в драйвер, ответственный за /dev/mem, и только он разбирает файловый запрос и пишет напрямую в указанный адрес физической памяти.


    pfg21, прикольная фантазия.
    А теперь о реальности: когда ты открываешь файл /dev/mem и передаёшь его fd в системный вызов mmap, в ядре вызывается функция mmap_mem зарегистрированная здесь. Эта функция, как можно увидеть здесь, вызывает remap_pfn_range для выделенного участка виртуальной памяти, а в качестве параметра pfn, определяющего номер страницы физической памяти, как написано здесь, передаёт vma->vm_pgoff, т.е. смещение, переданное mmap, но выраженное в страницах. Т.е. не "произвольную память, котрую ему выдал менджер памяти", а вполне конкретную физическую память, которую ты попросил в вызове mmap.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    ты работаешь с памятью опосредовано :) через драйвер /dev/mem

    pfg21, ты создаёшь отображение памяти через драйвер. К отображённой памяти ты обращаешься напрямую, процессорными инструкциями.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    /dev/mem "не прямой путь"

    pfg21, в чём заключается его "непрямота"?
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    никому другому ядро не даст работать напрямую с памятью.

    pfg21, man ioperm, google mmap /dev/mem
    Написано
  • Почему clang выдает такой ассемблерный код?

    jcmvbkbc
    @jcmvbkbc
    обычно -O3 для отладки с макс. кол-вом символов

    Сергей Соловьев, -O3 -- это максимальная оптимизация. Максимальная отладочная информация -- -g3. Уровень отдладочной информации выбранной ключом -g не влияет на сгенерированный код.
    Написано
  • Что отвечает за предотвращение нежелательной записи в text секцию?

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

    Сергей Соловьев, это не совсем так. Флаги секций нужны во время статической линковки, чтобы поместить секцию в соответствующий сегмент. Вот флаги сегментов говорят загрузчику с каким доступом нужно мэппить сегменты ELF-файла в память. readelf -l их удобно показывает, вместе с таблицей соответствия секций сегментам.
    Написано
  • Что отвечает за предотвращение нежелательной записи в text секцию?

    jcmvbkbc
    @jcmvbkbc
    там я так понимаю все в пределах твоего процесса

    djEban, да
    Написано
  • Что отвечает за предотвращение нежелательной записи в text секцию?

    jcmvbkbc
    @jcmvbkbc
    Есть системный вызов ptrace, который вообще-то может изменить секцию кода,

    Сергей Соловьев, есть вызов mprotect, прямо предназначенный для изменения защиты регионов памяти.
    Написано
  • Почему функция неправильно изменяет динамический массив?

    jcmvbkbc
    @jcmvbkbc
    MaxShell, это базовая работа с указателями -- в любом учебнике по языку С.
    Написано
  • Как узнать, есть ли новые коммиты в подмодуле?

    jcmvbkbc
    @jcmvbkbc
    Александр Булитеров, коммит привязанный к основному репозиторию может быть частью множества бранчей в сабмодуле. Нужно либо найти это множество и выделить из него интересный вам бранч, либо как-то иначе узнать, в каком бранче искать обновления.
    Написано
  • Простейший web-server?

    jcmvbkbc
    @jcmvbkbc
    Пусть меня поправят

    Поправляю:

    про то чтобы вебсокет сервер открывался с адресной строки броузера, я никогда не слышал.

    в коде реализован сервер HTTP.

    в основном потоке только принимаешь соединения. А все общение делаешь в новом треде.

    всё прекрасно будет работать и из основного потока, это элементарный синхронный пример.

    попробуй сперва случай попроще, когда клиент инициатор диалога, а сервер отвечает на запросы

    ровно это в коде и происходит.
    Написано
  • Простейший web-server?

    jcmvbkbc
    @jcmvbkbc
    когда пытаюсь зайти с браузера chrome
    localhost:8080 This site can't be reached

    Проверь, что слушающий сокет видно в netstat после запуска сервера и если его видно, то попробуй заходить не на localhost:8080, а на http://127.0.0.1:8080.
    Написано
  • Почему светодиод тускнеет вместо выключения?

    jcmvbkbc
    @jcmvbkbc
    Помогите разобраться в чем причина

    Чтобы разобраться в чём причина нужно добавить схему подключения светодиода.
    Написано
  • Dbeaver C++ connection error?

    jcmvbkbc
    @jcmvbkbc
    в вопросе с тегом "С++" ожидаешь увидеть не скрин wireshark, а код на c++.
    Написано
  • Что за файлы и как с ними жить дальше?

    jcmvbkbc
    @jcmvbkbc
    Я не был уверен что это дампы процесса.

    Alex G., команда file хорошо справляется с распознаванием известных типов файлов.
    Написано
  • Как исправить ошибку буфера с UART?

    jcmvbkbc
    @jcmvbkbc
    проблема, увы не исчезла

    Павел Соколов, после чего именно? После соединения порта с самим собой?
    Написано
  • Возможно ли реализовать виртуальный uart на stm32?

    jcmvbkbc
    @jcmvbkbc
    почему переход от 0 на 1 при ввключении устройства не интерпретируется, а при переходе с 0 на 1 в конце передачи интерпретируется именно как стоп-бит

    Sneiksus, интерпретация состоит в том, что бит принимается и проверяется, что он -- "1", иначе -- ошибка фрейминга при приёме байта. То что в этом месте ожидался стоп-бит приёмник понимает просто считая принятые биты после старта.
    Написано
  • Возможно ли реализовать виртуальный uart на stm32?

    jcmvbkbc
    @jcmvbkbc
    почему тогда переход от стоп бита на лог. 1 интерпретируется?

    Sneiksus, как интерпретируется? Стоп-бит это тоже 1.

    То есть до получения стартового бита( перехода с 1 на 0) он не начинает работу?

    В первом приближении -- да.
    Есть ещё BREAK, когда в линию выдаются непрерывно нули, но это детали фрейминга более высокого уровня.
    Написано