• Нам нужно поговорить про Linux IIO

      IIO (промышленный ввод / вывод) — это подсистема ядра Linux для аналого-цифровых преобразователей (АЦП), цифро-аналоговых преобразователей (ЦАП) и различных типов датчиков. Может использоваться на высокоскоростных промышленных устройствах. Она, также, включает встроенный API для других драйверов.


      Читать дальше →
    • Создание образа Ubuntu для ARM «from scratch»

      • Tutorial

      Когда разработка только начинается часто еще непонятно какие именно пакеты пойдут в целевую rootfs.


      Иными словами хвататься за LFS, buildroot или yocto (или еще что-то) еще рано, а начинать уже нужно. Для богатых (у меня на пилотных образцах 4GB eMMC) есть выход раздать разработчикам дистрибутив, который позволит оперативно доставить что-то чего не хватает в данный момент, а затем мы всегда можем собрать списки пакетов и сформировать список для целевой rootfs.

      Читать дальше →
    • Функция buildargv с помощью Ragel

        Забавное использование Ragel State Machine Compiler для создания функции разбора строки на int argc, char *argv[].


        Все началось с того, что понадобилась функция buildargv, чтобы разбирать строку для последующей передачи в


        int main (int argc, char *argv[]) { body }

        Ну ладно подумал я, не может быть, чтобы нигде нельзя было позаимствовать, сейчас найдем… И не нашёл...


        Читать дальше →
      • auto git bisect на примере ядра Linux

          Данная заметка имеет собой цель продемонстрировать автоматический git bisect на примере ядра Linux. С последующим поиском официальной версии начиная с которой всё поломалось и последней хорошей версии.


          Git

          Читать дальше →
          • +28
          • 9.2k
          • 1
        • Вся правда о linux epoll

            Ну или почти вся...



            Я считаю, что проблема в современном интернете — это переизбыток информации разного качества. Найти материал по интересующей теме не проблема, проблема отличить хороший материал от плохого, если у вас мало опыта в данной области. Я наблюдаю картину, когда очень много обзорной информации "по верхам" (практически на уровне простого перечисления), очень мало углубленных статей и совсем нет переходных статей от простого к сложному. Тем не менее именно знание особенностей того или иного механизма и позволяет нам сделать осознанный выбор при разработке.


            В статье я постараюсь раскрыть то, что является фундаментальным отличием epoll от других механизмов, то что делает его уникальным, а так же привести статьи, которые просто необходимо прочитать для более глубокого осмысления возможностей и проблем epoll.


            Anyone can wield an axe, but it takes a true warrior to make it sing melees melody.

            Я предполагаю, что читатель знаком с epoll, по крайней мере прочел страницу man. О epoll, poll, select написано достаточно много, чтобы каждый кто разрабатывал под Linux, хоть раз о нем слышал.

            Читать дальше →
          • Заметка о новом интерфейсе linux kernel — gpio uapi

              Начиная с версии ядра 4.6-r1 нам стал доступен новый интерфейс для взаимодействия с подсистемой ядра gpio. Теперь существует три официальных способа работы с gpio и получения от них прерываний. Нет смысла углубляться в потребности для данной подсистемы, для малой части это суровые будни, для другой части веселое хобби, и для всех вместе в ядре была предоставлена новая возможность взаимодействия.


              Заметка носит популярный характер, так как основных преимуществ, которые шли в комплекте с нововведением, а именно упрощение работы с gpio в контексте ядра касаться не будем.

              Читать дальше →
              • +11
              • 10.7k
              • 3
            • Использование gpio-generic и irq_chip_generic для драйвера gpio

                Данная статья является логичным продолжением предыдущей и её прочтение рекомендуется после ознакомления с предшествующим материалом. Текущая заметка необходима для понимания последующего материала, дополнительного понимания подсистемы gpio в целом и способствует разработке собственных gpio драйверов. Положения данной статьи уже применимы не только к нашему виртуальному драйверу gpio, но и к любому mmio gpio драйверу в целом. Речь пойдет об упомянутой в предыдущей части "оптимизации".

                Читать дальше →
              • Драйвер виртуальных GPIO с контроллером прерываний на базе QEMU ivshmem для Linux

                • Tutorial
                Природа прерываний

                Трудно недооценить роль GPIO, особенно в мире встраиваемых систем ARM. Помимо того, что это крайне популярный материал для всех руководств для начинающих, GPIO обеспечивают способ для управления многими периферийными устройствами, выступают в качестве источника ценных прерываний, или даже могут быть единственным доступным способом общения с миром для SOC.

                Основываясь на собственном скромном опыте, могу сказать, что прерывания далеко не самая освященная тема в сообществе Linux. Из-за своих особенностей, а так же сильной привязки к аппаратной части, все обучающие материалы посвященные прерываниям лишены реального и легко воспроизводимого примера. Данный факт мешает пониманию того, что очень часто прерывания и GPIO неразделимы, особенно в области встраиваемого Linux. Многие начинают верить, что GPIO это очень простая и скучная вещь (которая кстати и стала таковой благодаря подсистеме sysfs).
                Читать дальше →
                • +15
                • 14.1k
                • 3
              • Кросскомпиляция Qt-4.8.0 под mingw32 (x86) в Gentoo (x86_64)

                image
                Нет никакой необходимости устанавливать Qt заранее на целевую систему, не нужно тянуть предварительно скомпилированные библиотеки для Windows.

                Я проделал данный трюк на двух платформах, на Gentoo x86_64 установленной на VitualBox c оболочкой KDE 4.8 и соответвующими библиотеками Qt, и на домашнем сервере Gentoo x86_64 (Intel® Core(TM) i5 CPU 760 @ 2.80GHz) без какой либо графической оболочки и без предустановленных библиотек Qt.
                Читать дальше →