Задать вопрос
  • Есть ли модуль реального времени в AI Thinker ESP32 (ESP32 CAM)?

    jcmvbkbc
    @jcmvbkbc
    Контроллер который может работать когда весь остальной ESP32 находится в состоянии сна. 669569677749e831696479.png
    На его базе можно сделать часы реального времени, если озаботиться его непрерывным питанием.
    Написано
  • Какая сложность у std::sort?

    jcmvbkbc
    @jcmvbkbc
    Основание логарифма не имеет значения, потому что смена основания эквивалентна домножению на константу, которую в O-записи игнорируют.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    ты утверждаешь что mmap при мапинге /dev/mem будет напрямую писать в физическую память ??

    pfg21, mmap не будет никуда писать. Но mmap может отобразить любую область физической памяти в адресное пространство процесса для прямого доступа.

    тогда получается любой пользователь может получить доступ к любому участку физической памяти без каких-либо проверок, только за'mmap'ив /dev/mem в своей проге ??

    Почти. Любой пользователь который может открыть /dev/mem.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    pfg21, функция mmap_mem -- этот самый "хук". Она зарегистрирована здесь как обработчик mmap в mem_fops, mem_fops указаны как fops в массиве devlist для устройства с минорным кодом DEVMEM_MINOR, этот массив обрабатывается здесь, где регистрируются устройства с мажорным кодом MEM_MAJOR. Устройство с кодом 1, 1 -- это /dev/mem и есть, как можно увидеть здесь
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    …но это совсем не в тему

    …в контексте вопроса сие не имеет значения.

    pfg21, твой последний вопрос был, я напомню, "в каком месте бредовость", в контексте этого вопроса это имеет непосредственное значение.

    код, реализующий mmap под /dev/mem, не приводил :)

    Я из этого могу сделать только вывод о том, что ты мои ответы не читаешь. Потому что я приводил ссылку на этот код, вот в этом комментарии: "Эта функция, как можно увидеть здесь, вызывает…". Как тебя после этого воспринимать хоть сколько-нибудь серьёзно -- непонятно.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    это потребует наличие в хуке кода обработки доступов пользователя к /dev/mem.

    pfg21, Нет, не потребует. Потому что проверкой доступа занимается вызов open, которым файл открывают.

    сильно сомневаюсь что такой хук будет внедрен, смысл в нем ??

    Я выше приводил ссылки в код ядра реализующий mmap для /dev/mem, в чём ты конкретно сомневаешься, я не понял?
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    в каком месте бредовость ??

    pfg21, в каждом предложении. Конкретно:

    mmap отлавливает это изменение…

    когда пользователь обращается к отображённой памяти, вызов mmap уже давно закончился и не может "отловить это изменение". Ты имел в виду подсистему виртуальной памяти?

    …и формирует файловый запрос на запись. запрос получает драйвер VFS разбирает путь

    Т.е., я правильно понимаю, мы отобразили файл в память (а это значит, откыли его перед этим), а теперь "mmap, отловивший изменения в памяти" посылает запрос, в котором фигурирует путь до этого файла? А если файл тем временем удалили? Или переименовали? Или удалили и создали другой файл с таким же именем на его месте?

    выявляет подстрочку /dev

    Т.е., я правильно понимаю, что по-твоему /dev/mem работает только пока он в /dev, а если его перенести в какое-нибудь другое место, то он работать перестанет?

    и направляет его в драйвер udev ответственный за этот путь

    Что это за термин, "драйвер udev"? devtmpfs?
    Написано
  • Как общаться с устройствами ввода вывода на Си в 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.

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

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

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

    ровно это в коде и происходит.