Что такое / dev / vchiq в Raspberry Pi?

10

Я использую Raspberry Pi 3 и raspbian jessie, и я наткнулся на / dev / vchiq , пытаясь вызвать программу (omxplayer) с помощью perg-cgi, которая будет воспроизводить музыку на моем RiPi. И я не могу заставить его работать.

Когда я открыл его с помощью своего браузера (например, localhost / muzikica / pusti.pl) [apache2], он сказал « не удалось открыть экземпляр vchiq ». Поэтому я изменил права доступа к файлу / dev / vchiq на xx7 , и он работал до тех пор, пока я не перезапустил свой RiPi. Так что понял и добавил www-data (пользователь, который выполняет мою программу, которую вызовет мой скрипт pusti.pl) в группу видео, потому что / dev / vchiq является частью группы видео. И это сработало!

Теперь, что, черт возьми, это / dev / vchiq xD и почему www-data нужны как минимум разрешения на чтение и запись для воспроизведения звука на моем Raspberry Pi?

Заранее спасибо.

Бојан Драшко
источник

Ответы:

12

Я поражен, что всемогущий Google не имеет готового ответа на вопрос "что такое VCHIQ?" Я давний фанат ядра, а не сотрудник Broadcom, и я не эксперт BCM283 *, но вот что я нашел (возможно) для потомков:

Из ветви ядра Raspberry Pi :

Интерфейс связи между ядром и VideoCore для семейства продуктов BCM2708.

Здесь стоит отметить, что VideoCore является (неожиданным сюрпризом) видеоконтроллером для SoC, на котором работает Pi, и может показаться, что это удобный способ запуска более или менее прямых IOCTL для различных подсистем, подключенных к графическому процессору. , То, что это включает в себя видео, не является большим сюрпризом, но я думаю, что имеет смысл, что интерфейс камеры имеет свой кремний в VideoCore, учитывая все то, что видео кодек должен делать.

Так почему же управление звуком выполняется через VideoCore (в противном случае ему не понадобится VCHIQ для управления им)? Я подозреваю, что, учитывая тот факт, что VC имеет аппаратную поддержку H.264 и других кодеков (а также потому, что вы можете маршрутизировать звук через HDMI), это было просто самое простое место, чтобы установить кремний. Хорошо, это и тот факт, что чип BCM имеет два MMU (один для VC + ARM, другой для обычного использования ОС - см. Диаграмму на стр. 5 ), что делает возможным нулевое копирование DMA (нет необходимости копировать вещи в аудио кремний - просто скажите ему, что часть памяти принадлежит ему, а не процессору. Не знаю пока, действительно ли они делают это под прикрытием, но почему бы и нет?).

Обратите внимание, что IOCTL в VCHIQ на самом деле не передают данные сами по себе - они устанавливают DMA и другие операции между частями памяти и отправляют команды разным битам. Это может быть очень опасно, так как вы потенциально можете испортить внутренние структуры данных ядра из пространства пользователя, разбить графический процессор, обойти поврежденные данные и т. Д. Так что не устанавливайте / dev / vhciq в режим 777 !!!

В любом случае, короткий ответ на вопрос "что такое VCHIQ?" Вот:

VCHIQ - это командный интерфейс между работающим ядром Linux и периферийными устройствами (среди прочего) в кремнии VideoCore. / dev / vhciq обеспечивает общий доступ пользователей к этим командам для использования (как минимум) камерой и аудиоподсистемами. Это довольно опасный интерфейс для доступа к случайным программам, поэтому по умолчанию это несколько ограничивающие права.

В сообществе RPi есть люди, которым по душе аппаратные средства BCM; Я не один из них (я, возможно, по щиколотку после пары часов исследований :-)). Тем не менее, я думаю, что это достойный обзор высокого уровня и будет приветствоваться дополнения / исправления.

Поскольку www-data требует разрешения, это может быть связано с тем, что ваша CGI-программа порождает дочерние процессы от имени этого пользователя. Я не очень хорошо знаю этот конкретный проигрыватель, но обычно лучше запускать какой-то специальный демон для управления программой, которая взаимодействует со звуком, и управления ею из CGI с использованием сокета UNIX или аналогичного интерфейса, а не непосредственным порождением дочернего элемента.

В самом деле, поставщик безопасности некоторое время назад был арестован за то, что позволил своему корневому веб-серверу получить доступ к своей машине. Вероятно, они сделали это, чтобы упростить управление процессами, а не писать этот тип среднего уровня, но это безопасность, нет-нет. Предоставление Apache в основном беспрепятственного доступа к графическому процессору DMA - тоже плохая идея (хотя, я признаю, гораздо сложнее ее использовать).

Надеюсь, это ответит на ваш вопрос.

BJ Black
источник
1
«Так почему же управление аудиосистемой проходит через VideoCore (иначе для управления им не понадобится VCHIQ)?» -> Обратите внимание, что вам вообще не нужен доступ для /dev/vhciqзапуска аудио - в этом случае это потому, что для этого используется OP omxplayer, что, вероятно, не идеально.
Златовласка
Хм. Я ожидаю, что есть драйвер ALSA, который создает соответствующие пользовательские наземные интерфейсы. Я ничего не знаю о omxplayer, кроме 5-секундного поиска в Google, и удивляюсь, делает ли он что-нибудь интересное с таким дополнительным доступом к аудио (например, с помощью аппаратного кодека) или просто тупо открывает устройство, которое ему не нужно. Захватывающе, и я также представляю, что драйвер ALSA использует VHCIQ под прикрытием (непосредственно в kernelspace, natch). Аккуратные вещи!
BJ Black
1
Я понятия не имею, так ли это на самом деле, но предположение ... У графического процессора есть аппаратное декодирование MPEG, которое может включать MP3-звук (не может найти ссылку в любом случае), а аппаратный декодер, вероятно, будет потреблять немного меньше Сок, чем программное обеспечение для декодирования. Совершенно не стоит затрат на охрану, но, возможно, интересно.
BJ Black
1
Да. Ухоженная. Просто просматривая pqru.qr.ai, и похоже, что драйвер ALSA действительно использует VHCIQ под прикрытием (не нужно разговаривать с / dev / vhciq, потому что он может напрямую вызывать API ядра, но все же ...).
BJ Black
2
Конечно. По сути, здесь происходит то, что чип Broadcom разделен на две основные части: процессор (с которым Linux общается и использует универсальное программное обеспечение) и графический процессор (который выполняет независимую прошивку, обрабатывает видео и т. Д.). VCHIQ - это интерфейс, используемый ЦП для связи с графическим процессором. Это упрощение, но, скорее всего, пока достаточно.
BJ Black
0

В моем случае у меня была такая же проблема, когда я создал нового пользователя помимо пользователя по умолчанию, и у меня были проблемы не только со звуком, но и с конфигурацией Wi-Fi, доступом к последовательному порту и т. Д. Затем я открыл / etc / групповой файл. И я добавил своего пользователя во все группы, в которые был вставлен пользователь 'pi', и все работало отлично. Следующее:

корень: х: 0:
демон: x: 1:
bin: x: 2:
sys: x: 3:
адм: x: 4: пи, Карлос 
tty: x: 5: пи, Карлос
диск: х: 6:
LP: X: 7:
почта: х: 8:
новости: х: 9:
uucp: x: 10:
человек: х: 12:
прокси: х: 13:
км: х: 15:
дозвон: х: 20: пи, карлос
факс: x: 21:
голос: х: 22:
cdrom: x: 24: пи, Карлос
дискета: х: 25:
лента: х: 26:
sudo: x: 27: пи, Карлос 
аудио: x: 29: пи, Карлос , пресса
провал: х: 30:
www-данные: x: 33:
резервная копия: x: 34:
оператор: х: 37:
список: x: 38:
irc: x: 39:
источник: x: 40:
мошки: х: 41:
тень: х: 42:
utmp: x: 43:
видео: x: 44: пи, Карлос
sasl: x: 45:
plugdev: x: 46: пи, Карлос
персонал: х: 50:
игры: x: 60: пи, Карлос 
пользователи: x: 100: пи, Карлос
nogroup: x: 65534:
вход: х: 101: пи, Карлос
systemd-journal: x: 102:
systemd-timesync: x: 103:
systemd-network: x: 104:
systemd-resol: x: 105:
systemd-bus-proxy: x: 106:
crontab: x: 107:
netdev: x: 108: пи, Карлос
пи: х: 1000:
Шина сообщений: x: 109:
ssh: x: 110:
блютуз: х: 111:
авахи: х: 112:
spi: x: 999: пи, Карлос 
i2c: x: 998: пи, Карлос 
gpio: x: 997: пи, Карлос
lightdm: x: 113:
epmd: x: 114:
ssl-cert: x: 115:
Карлос: х: 1001:
rtkit: x: 116:
нажмите: x: 117:
импульсный доступ: x: 118:
 

Маркос Круз
источник