TEACHERS
GALLERY
PRICING
SIGN IN
TRY ZURU
GET STARTED
Loop
Audio
Interval:
5s
10s
15s
20s
60s
Play
1 of 23
Slide Notes
Download
Go Live
Управление оборудованием
Share
Copy
Download
0
8
Published on Jul 01, 2017
No Description
View Outline
MORE DECKS TO EXPLORE
PRESENTATION OUTLINE
1.
Управление оборудованием
и ядром ОС Linux
Photo by
Synthesis Studios
2.
Модули ядра
ko (kernel object) - установка через insmod
проверка загрузки - modprobe
список активных модулей и зависимостей - lsmod
3.
Конфигурация ядра
/boot/*.config - флаги сборки ядра
установка из исходных текстов: make config (menuconfig, xconfig, ...)
4.
Связь с оборудованием
udev - управляет /dev и создаёт узлы устройств для обнаруженного оборудования
конфигурация - /etc/udev/rules.d (глобальная в /lib/udev/rules.d)
управление - udevadm (есть тестирование правил), после изменения udevadm control --reload
5.
udev
Запуск команды при обнаружении или отключении устройства
Сигнал в D-Bus
Использует sysfs для взаимодействия с устройствами и, если необходимо, modprobe
6.
udev
KERNEL - имя устройства из ядра (в sysfs), SUBSYSTEM - связь с подсистемой ядра, DRIVER - название драйвера, NAME, SYMLINK - основное и дополнительные имена устройства (в /dev)
ATTR{name}=="значение" - отбор
MODE="0xxx" - режим файла в /dev
7.
Подстановки udev
%n - название устройства (из NAME или по умолчанию)
%k - название из sysfs
8.
Путь в sysfs
/sys/SUBSYSTEM/NAME/ATTR - значение атрибутов
просмотр - через udevinfo или usbview
9.
Запуск программ
PROGRAM=="..." - должна возвратить имя устройства
ENV{name}=="value" - переменная окружения
RUN+="..." - запуск программы при подключении устройства
10.
D-Bus
Desktop Bus - способ передачи сигналов и запросов выполнения действий для Linux-систем
В systemd реализован в sd-bus
Поддерживает системные шины (для всех) и шину сеанса (для пользователя)
11.
D-Bus
Имена шин похожи на класс Java (например, org.freedesktop.NetworkManager), поддерживают каналы сообщение и вызовы методов
Управление - dbus* и qdbus (в qt), сам процесс - dbus-daemon, Интегрирован с udev (например, через udiskctl)
12.
Отладка D-Bus
dbus-monitor - отслеживание сообщений, dbus-send - запуск действия
d-feet - графический инструмент для просмотра доступных шин, интерфейсов, методов и их вызова (устанавливается отдельно)
13.
Пример запроса к D-Bus
dbus-send --session --dest=org.freedesktop.ScreenSaver --type=method_call --print-reply --reply-timeout=1000 /ScreenSaver org.freedesktop.ScreenSaver.GetSessionIdleTime
14.
Альтернативный вызов
qbus org.kde.screensaver /ScreenSaver GetSessionIdleTime
Блокировка экрана - qdbus org.kde.screensaver /ScreenSaver Lock
15.
Подсистема звука
Исторически первая - OSS, затем - ALSA, сейчас PulseAudio
В D-Bus (KDE) - интерфейсы org.kde.mix /Mixers/.../alsa_...
16.
OSS
Поддержка /dev/mixer (управление громкостью), /dev/dsp (цифровой поток), /dev/audio (16-битный поток), /dev/midi - MIDI-устройства
Содержит проприетарный код
17.
ALSA
Замена OSS, поддерживает его через oss-proxy
Утилиты alsa* (например, alsa-mixer)
Каждое устройство - уникальный ID (из /sys/class/sound), входит в ядро с Linux 2.6
18.
Диагностика alsa
alsaloop - подключает вывод входного устройства к вводу выводного (например, микрофон к наушникам)
speaker-test - проверка звука
aplay - информация об устройствах и вывод звука
19.
Конфигурация alsa
/etc/modprobe.d/alsa-base.conf - опции устройств (index влияет на выбор адаптера по умолчанию, только один должен быть 0)
cat /proc/asound/modules - список модулей ядра
20.
PulseAudio
Поддержка громкости для разных приложений и смешивание потоков
Расширяется плагинами
Совместимость с OSS/ALSA: padsp (и далее название программы)
21.
PulseAudio
Card - физический адаптер
Sink - вход для звукового потока
Source - источник звукового потока
Управление - pactl и patricks, в терминах связей объектов
22.
Пример настройки
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
23.
Спасибо за внимание
Вопросы?
Photo by
Leo Reynolds
Friend of Haiku Deck
Haiku Deck Pro User
×
Error!