Я поражен, что всемогущий 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 - тоже плохая идея (хотя, я признаю, гораздо сложнее ее использовать).
Надеюсь, это ответит на ваш вопрос.
/dev/vhciq
запуска аудио - в этом случае это потому, что для этого используется OPomxplayer
, что, вероятно, не идеально.