Рубрика «linux kernel» - 9

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

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

Основываясь на собственном скромном опыте, могу сказать, что прерывания далеко не самая освященная тема в сообществе Linux. Из-за своих особенностей, а так же сильной привязки к аппаратной части, все обучающие материалы посвященные прерываниям лишены реального и легко воспроизводимого примера. Данный факт мешает пониманию того, что очень часто прерывания и GPIO неразделимы, особенно в области встраиваемого Linux. Многие начинают верить, что GPIO это очень простая и скучная вещь (которая кстати и стала таковой благодаря подсистеме sysfs).
Читать полностью »

механизмы контейнеризации

Продолжаем цикл статей о механизмах контейнеризации. В прошлый раз мы говорили об изоляции процессов с помощью механизма «пространств имён» (namespaces). Но для контейнеризации одной лишь изоляции ресурсов недостаточно. Если мы запускаем какое-либо приложение в изолированном окружении, мы должны быть уверены в том, что этому приложению выделено достаточно ресурсов и что оно не будет потреблять лишние ресурсы, нарушая тем самым работу остальной системы. Для решения этой задачи в ядре Linux имеется специальный механизм — cgroups (сокращение от control groups, контрольные группы). О нём мы расскажем в сегодняшней статье.
Читать полностью »

В процессе работы над ОС Фантом, которая вообще не Юникс никаким местом, мне, тем не менее, захотелось сделать в нём Unix-compatible подсистему. Не то, чтобы прямо POSIX, но что-то достаточно близкое. Отчасти из любопытства, отчасти для удобства, отчасти как ещё один migration path. (Ну и вообще было интересно, насколько трудно написать простенький Юникс «из головы».) В качестве цели номер 1 была поставлена задача запустить quake 1 for Unix, которая и была достигнута.

В процессе, естественно, появились open/close/r/w/ioctl, и появилось ощущение, что последний неприлично, постыдно устарел. В качестве упражнения для размятия мозга я реализовал (в дополнение к обычному ioctl) некоторый альтернативный API, который бы позволил управлять свойствами устройств более гибким и удобным с точки зрения пользователя способом. Этот API, конечно, имеет свои очевидны минусы, и, в целом, эта статья — RFC, aka request For Comments.

Итак, API на уровне пользователя:

// returns name of property with sequential number nProperty, or error
errno_t listproperties( int fd, int nProperty, char *buf, int buflen );

errno_t getproperty( int fd, const char *pName, char *buf, int buflen );
errno_t setproperty( int fd, const char *pName, const char *pValue );

Правила:

  1. Никаких дефайнов с номерами, только имена.
  2. Никаких бинарных данных, только строки

Читать полностью »

namespaces

Последние несколько лет отмечены ростом популярности «контейнерных» решений для ОС Linux. О том, как и для каких целей можно использовать контейнеры, сегодня много говорят и пишут. А вот механизмам, лежащим в основе контейнеризации, уделяется гораздо меньше внимания.

Все инструменты контейнеризации — будь то Docker, LXC или systemd-nspawn,— основываются на двух подсистемах ядра Linux: namespaces и cgroups. Механизм namespaces (пространств имён) мы хотели бы подробно рассмотреть в этой статье.

Начнём несколько издалека. Идеи, лежащие в основе механизма пространств имён, не новы. Ещё в 1979 году в UNIX был добавлен системный вызов chroot() — как раз с целью обеспечить изоляцию и предоставить разработчикам отдельную от основной системы площадку для тестирования. Нелишним будет вспомнить, как он работает. Затем мы рассмотрим особенности функционирования механизма пространств имён в современных Linux-системах.
Читать полностью »

Разрабатывая CRIU, мы поняли, что текущий интерфейс получения информации о процессах не идеален. К тому же, подобная проблема была успешно решена для сокетов. Мы попытались перенести эти наработки на процессы и получили достаточно хорошие результаты, о которых вы узнаете, дочитав эту статью до конца.

Недостатки текущего интерфейса

Прочитав заголовок, возникает вопрос:”A чем же старый интерфейс не угодил”? Многие из вас знают, что сейчас информация о процессах собирается по файловой системе procfs. Здесь каждому процессу соответствует директория, которая содержит несколько десятков файлов.

$ ls /proc/self/ 
attr             cwd      loginuid    numa_maps      schedstat  task
autogroup        environ  map_files   oom_adj        sessionid  timers
auxv             exe      maps        oom_score      setgroups  uid_map
cgroup           fd       mem         oom_score_adj  smaps      wchan
clear_refs       fdinfo   mountinfo   pagemap        stack
cmdline          gid_map  mounts      personality    stat
comm             io       mountstats  projid_map     statm
coredump_filter  latency  net         root           status
cpuset           limits   ns          sched          syscall

Читать полностью »

Тихо и незаметно вышло в свет ядро Linux 4.4 LTS (Long-Term Support), о чем известил Линус Торвальдс. Новинка включает довольно значительные обновления, включая, например, 3D поддержку виртуальных дравейров GPU. Благодаря этому можно использовать аппаратную поддержку графики в guest VM. Также включена поддержка Open-Channel Solid State Drives (SSDs) посредством LightNVM.

Более того, Linux kernel 4.4 LTS поддерживает RAID5 MD, добавлена возможность непривилегированным пользователям запускать eBPF программы. Также стоит упомянуть поддержку поллинга для улучшения общей производительности high-end устройств хранения данных, mlock2() syscal и многое другое. Улучшена поддержка 64-битных ARM, решена проблема с утечкой памяти в Skylake CPU от Intel. Добавлена возможность работы слушающих TCP-сокетов в неблокирующем режиме, возможность определения потери TCP-пакетов с использованием RACK, добавлен KMS-драйвер для «малинки» (Raspberry Pi), а xconfig переведён на Qt5.

В новой версии принято примерно 13 тысяч исправлений, внесенный 1548 разработчиками. Примерно 44% всех изменений в новой версии ядра связано с драйверами устройств.
Читать полностью »

Купил я себе вот такую плату. A20, гиг оперативки, 4гб nand, и куча периферии. Тот же кубиборд, но с русским разрабом и не надо ждать месяц с али.
Лично для меня плюсами данной борды было:

  • На обратной стороне стоит sata-разьем — можно прицеплять hdd без вороха проводов. Очень важно, потому что немножко префекционист и не люблю, когда провода занимают объем больший, чем сама плата.
  • На плате разведено аж два lvds. То есть берем любую матрицу от ноута, отрезаем мелкий разъем, ставим на его место BLD2х15 и все. Если там не провод, а шлейф, то на али можно купить готовый провод за пару долларов. Китайские ноутбучные матрицы стоят копье по сравнению с готовыми экранами тех же разрешений и размеров.
  • Почти все разъемы идут по одному краю платы. Вот никогда не понимал, что движет разработчиком платы в тот момент, когда он ставит разьемы по всем четырем сторонам? Первая малина яркий тому пример. Зачем? Корпус нормальный не сделаешь, на столе занимает места раз в 6-9 больше, чем сама размером, если куда вставить — надо выпаивать все эти разъемы...

Но есть у платы и небольшой минус. Плата новая и разраб сделал под нее только buildroot c QT. А некоторым этого мало… Мне хотелось полноценную систему, как на десктопе. Зачем? Об этом и статья.
Читать полностью »

image

Год назад выполнял довольно интересную работу по разработке встраиваемого компьютера для одного предприятия, занимающегося электроникой. Компьютер ничего принципиально интересного не представлял: процессор Cortex A-8, работающий на субгигагерцовых частотах, 512Mb DDR3, 1Gb NAND, легковесная сборка Linux. Однако устройству, в который компьютер встраивался, а значит и ему самому, предстояло работать в довольно жестких условиях. Широкий температурный диапазон (от -40 до +85 градусов Цельсия), влагостойкость, стойкость к электромагнитным излучениям, киловольтные импульсы по питанию, защита от статики в 4 кВ и много чего интересного, что хорошо описано в различных ГОСТах на спецтехнику, – это все про него. Одно из основных требований заказчика – срок выработки на отказ не менее 10 лет. При этом производитель обеспечивает гарантийный ремонт изделия в течении пяти лет, потому вопрос не риторический, а денежный и серьезный. В изделие была заложена соответствующая элементная база. Прибор с честью прошел испытания и получил требуемые сертификаты, но разговор не про то. Проблемы начались когда была изготовлена установочная партия, и устройства разошлись по отделам и КБ для создания прикладного ПО. Пошли возвраты с формулировкой: «Чего-то не загружается».
Читать полностью »

Линус Торвальдс представил Linux Kernel 4.0 - 1

На днях Линус Торвальдс представил финальный релиз ядра Linux 4.0 (3.2). Выпуск нового релиза ядра прошел по плану, без особых проблем. При этом в Linux 4.0 обычное количество новых функций, Линус Торвальдс заявляет, что более инновационным (если можно так выразиться) будет версия 4.1, там будет больше новых функций и возможностей. Стоит отметить, что ранее релизу ядра планировалось присвоить версию 3.2, но после проведения голосования в блоге Торвальдса на Google Plus было решено выбрать V4.0.

Что касается версии 4.0, здесь достаточно много обновлений, которые имеют отношение к графическим драйверам. К примеру, добавлена поддержка аудио DisplayPort в драйвере Radeon DRM, плюс улучшен контроль скорости работы вентилятора.
Читать полностью »

Наблюдая за появляющимися драйверами в ядре Linux, не могу не отметить, что разработчики недостаточно хорошо знают инфраструктуру ядра, точнее внутренний API, значительно упрощающий жизнь при написании драйверов устройств. Сегодня я коснусь темы, посвящённой управляемым ресурсам. В частности поясню каким образом они работают и как упрощают разработку драйверов. Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js