Що таке / 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 до різних підсистем, підключених до 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 - це не менш погана ідея (хоча, визнаю, набагато складніше).

Сподіваємось, це відповідає на ваше запитання.


1
"Так чому ж керування аудіозаписом виконується і через VideoCore (інакше для управління ним не знадобиться VCHIQ)?" -> Зауважте, що /dev/vhciqдля запуску аудіо вам не потрібно мати доступу - в цьому випадку це тому, що для цього використовується ОП omxplayer, що, мабуть, не ідеально.
goldilocks

Хм. Я думаю, що є драйвер ALSA, який створює відповідні наземні інтерфейси користувача. Я нічого не знаю про omxplayer, окрім 5-секундного пошуку в Google, і цікаво, чи робить це щось цікаве з додатковим доступом до аудіо (наприклад, з використанням апаратного кодека) або просто тупо відкриває пристрій, який йому не потрібен. Захоплююче, і я також уявляю, що драйвер ALSA використовує VHCIQ під кришками (безпосередньо в межах ядра, natch). Акуратні речі!
BJ Black

1
Я не маю уявлення, чи справді це відбувається, але міркування ... У графічному процесорі є апаратне MPEG-декодування, яке може включати MP3-аудіо (жоден спосіб не знайти), а апаратний декодер, швидше за все, споживає трохи менше соку, ніж програмне декодування. Зовсім не варто для вартості безпеки, але, можливо, цікаво.
BJ Black

1
Ага. Акуратний. Просто переглядаючи pqru.qr.ai, і схоже, що драйвер ALSA дійсно використовує VHCIQ під кришками (не потрібно говорити з / dev / vhciq, оскільки він може викликати API ядра безпосередньо, але все ж ...).
BJ Black

2
Звичайно. В основному, тут відбувається те, що чіп Broadcom розрізаний на дві основні частини - процесор (саме з цим Linux спілкується та працює програмне забезпечення загального призначення) та графічний процесор (який працює за незалежною прошивкою та обробляє відео тощо). VCHIQ - це інтерфейс, який CPU використовує для розмови з GPU. Це спрощення, але, мабуть, досить добре зараз.
BJ Black

0

У моєму випадку у мене була така ж проблема, коли я створив нового користувача, окрім користувача за замовчуванням, і у мене були проблеми не тільки зі звуком, але і з конфігурацією wifi, з доступом до послідовного порту тощо ... Потім я відкрив / etc / груповий файл. І я додав свого користувача до всіх груп, куди було вставлено користувач 'pi', і все працювало чудово. Так:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.