Я вражений тим, що у всемогутнього Google немає готової відповіді на питання "що таке VCHIQ?" Я давній гек ядра і не працівник Broadcom, а також не експерт по BCM283 *, але ось що я знайшов для (можливо) нащадків:
Від гілки ядра Raspberry Pi :
Ядро для інтерфейсу зв'язку VideoCore для сімейства продуктів BCM2708.
Тут варто відзначити, що VideoCore - це (здивування сюрпризу) відеоконтролера для SoC, на якому працює Pi, і, здається, це зручний спосіб запускати більш-менш прямі IOCTL до різних підсистем, підключених до GPU . Те, що це стосується відео, не є великим сюрпризом, але, мабуть, має сенс, що інтерфейс камери має кремній у 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 є люди, які наближаються до очних яблук. Я не з них (я, мабуть, заглиблений через пару годин досліджень :-)). Зважаючи на це, я вважаю, що це гідний огляд на високому рівні і я вітаю доповнення / виправлення.
Що стосується того, чому для даних www потрібен дозвіл, це пов’язано з тим, що ваша програма CGI нерестує дочірні процеси як цього користувача. Я не знаю добре цього гравця, але кращою практикою було б зазвичай запустити якийсь спеціальний демон для управління програмою, яка поєднує звук та керує ним із CGI, використовуючи розетку UNIX або подібний інтерфейс, а не безпосередньо нерестуючи дитину.
Дійсно, постачальник безпеки на деякий час повернувся за те, що дозволив кореневому веб-серверу отримати доступ до своєї машини. Вони, ймовірно, робили це для того, щоб полегшити управління процесом, а не писати цей тип середнього шару, але це безпека - ні. Надання апашем в основному безперебійного доступу до GPU DMA - це не менш погана ідея (хоча, визнаю, набагато складніше).
Сподіваємось, це відповідає на ваше запитання.
/dev/vhciq
для запуску аудіо вам не потрібно мати доступу - в цьому випадку це тому, що для цього використовується ОПomxplayer
, що, мабуть, не ідеально.