Управление оборудованием

Published on Jul 01, 2017

No Description

PRESENTATION OUTLINE

Управление оборудованием

и ядром ОС Linux

Модули ядра

  • ko (kernel object) - установка через insmod
  • проверка загрузки - modprobe
  • список активных модулей и зависимостей - lsmod

Конфигурация ядра

  • /boot/*.config - флаги сборки ядра
  • установка из исходных текстов: make config (menuconfig, xconfig, ...)

Связь с оборудованием

  • udev - управляет /dev и создаёт узлы устройств для обнаруженного оборудования
  • конфигурация - /etc/udev/rules.d (глобальная в /lib/udev/rules.d)
  • управление - udevadm (есть тестирование правил), после изменения udevadm control --reload

udev

  • Запуск команды при обнаружении или отключении устройства
  • Сигнал в D-Bus
  • Использует sysfs для взаимодействия с устройствами и, если необходимо, modprobe

udev

  • KERNEL - имя устройства из ядра (в sysfs), SUBSYSTEM - связь с подсистемой ядра, DRIVER - название драйвера, NAME, SYMLINK - основное и дополнительные имена устройства (в /dev)
  • ATTR{name}=="значение" - отбор
  • MODE="0xxx" - режим файла в /dev

Подстановки udev

  • %n - название устройства (из NAME или по умолчанию)
  • %k - название из sysfs

Путь в sysfs

  • /sys/SUBSYSTEM/NAME/ATTR - значение атрибутов
  • просмотр - через udevinfo или usbview

Запуск программ

  • PROGRAM=="..." - должна возвратить имя устройства
  • ENV{name}=="value" - переменная окружения
  • RUN+="..." - запуск программы при подключении устройства

D-Bus

  • Desktop Bus - способ передачи сигналов и запросов выполнения действий для Linux-систем
  • В systemd реализован в sd-bus
  • Поддерживает системные шины (для всех) и шину сеанса (для пользователя)

D-Bus

  • Имена шин похожи на класс Java (например, org.freedesktop.NetworkManager), поддерживают каналы сообщение и вызовы методов
  • Управление - dbus* и qdbus (в qt), сам процесс - dbus-daemon, Интегрирован с udev (например, через udiskctl)

Отладка D-Bus

  • dbus-monitor - отслеживание сообщений, dbus-send - запуск действия
  • d-feet - графический инструмент для просмотра доступных шин, интерфейсов, методов и их вызова (устанавливается отдельно)

Пример запроса к D-Bus

  • dbus-send --session --dest=org.freedesktop.ScreenSaver --type=method_call --print-reply --reply-timeout=1000 /ScreenSaver org.freedesktop.ScreenSaver.GetSessionIdleTime

Альтернативный вызов

  • qbus org.kde.screensaver /ScreenSaver GetSessionIdleTime
  • Блокировка экрана - qdbus org.kde.screensaver /ScreenSaver Lock

Подсистема звука

  • Исторически первая - OSS, затем - ALSA, сейчас PulseAudio
  • В D-Bus (KDE) - интерфейсы org.kde.mix /Mixers/.../alsa_...

OSS

  • Поддержка /dev/mixer (управление громкостью), /dev/dsp (цифровой поток), /dev/audio (16-битный поток), /dev/midi - MIDI-устройства
  • Содержит проприетарный код

ALSA

  • Замена OSS, поддерживает его через oss-proxy
  • Утилиты alsa* (например, alsa-mixer)
  • Каждое устройство - уникальный ID (из /sys/class/sound), входит в ядро с Linux 2.6

Диагностика alsa

  • alsaloop - подключает вывод входного устройства к вводу выводного (например, микрофон к наушникам)
  • speaker-test - проверка звука
  • aplay - информация об устройствах и вывод звука

Конфигурация alsa

  • /etc/modprobe.d/alsa-base.conf - опции устройств (index влияет на выбор адаптера по умолчанию, только один должен быть 0)
  • cat /proc/asound/modules - список модулей ядра

PulseAudio

  • Поддержка громкости для разных приложений и смешивание потоков
  • Расширяется плагинами
  • Совместимость с OSS/ALSA: padsp (и далее название программы)

PulseAudio

  • Card - физический адаптер
  • Sink - вход для звукового потока
  • Source - источник звукового потока
  • Управление - pactl и patricks, в терминах связей объектов

Пример настройки

  • pactl set-sink-port 'alsa_output.pci-0000_00_1b.0.analog-stereo' 'analog-output'
  • pactl set-sink-volume 'id' 65535 (100%)
  • Клиенты находят по env PULSE_SERVER

Спасибо за внимание

Вопросы?
Photo by Leo Reynolds

Friend of Haiku Deck

Haiku Deck Pro User