/ Dev / vchiq trong Raspberry Pi là gì?


10

Tôi đang sử dụng Raspberry Pi 3 và raspbian jessie và tôi đã gặp / dev / vchiq bằng cách thử gọi chương trình (omxplayer) với perg-cgi để phát một số nhạc trên RiPi của tôi. Và tôi không làm cho nó hoạt động.

Khi tôi mở nó bằng trình duyệt của mình (ví dụ: localhost / muzikica / pusti.pl) [apache2], nó báo " không thể mở phiên bản vchiq ". Vì vậy, tôi đã thay đổi quyền / dev / vchiq của tệp thành xx7 và nó đã hoạt động cho đến khi tôi không khởi động lại RiPi của mình. Vì vậy, đã tìm ra nó và thêm dữ liệu www (người dùng đang thực hiện chương trình của tôi mà tập lệnh pusti.pl của tôi sẽ gọi) vào nhóm video, bởi vì / dev / vchiq là một phần của nhóm video. Va no đa hoạt động!

Bây giờ, cái quái gì là / dev / vchiq xD và tại sao dữ liệu www cần ít nhất các quyền đọc và ghi để phát âm thanh trên Raspberry Pi của tôi?

Cảm ơn trước.

Câu trả lời:


12

Tôi ngạc nhiên khi Google toàn năng không có câu trả lời sẵn sàng cho câu hỏi "VCHIQ là gì?" Tôi là một người đam mê hạt nhân lâu năm và không phải là nhân viên Broadcom, tôi cũng không phải là chuyên gia BCM283 *, nhưng đây là những gì tôi đã tìm thấy (có thể) cho hậu thế:

Từ nhánh nhân Raspberry Pi :

Giao diện truyền thông Kernel to VideoCore cho dòng sản phẩm BCM2708.

Điều đáng chú ý ở đây là VideoCore là (điều ngạc nhiên bất ngờ) bộ điều khiển video cho SoC mà Pi chạy, và có vẻ như đây là một cách thuận tiện để chạy các IOCTL trực tiếp ít nhiều cho các hệ thống con khác được nối vào GPU . Rằng điều này bao gồm video không có gì đáng ngạc nhiên, nhưng tôi đoán nó có ý nghĩa rằng giao diện máy ảnh có silicon trong VideoCore với tất cả các công cụ mã hóa video cần làm.

Vậy tại sao điều khiển âm thanh cũng chạy qua VideoCore (nếu không, nó sẽ không cần VCHIQ để điều khiển nó)? Tôi nghi ngờ rằng, thực tế là VC có hỗ trợ phần cứng cho H.264 và các codec khác (và vì bạn có thể định tuyến âm thanh qua HDMI), đây chỉ là nơi dễ nhất để đặt silicon. Chà, điều đó và thực tế là chip BCM có hai MMU (một cho VC + ARM, một cho sử dụng HĐH bình thường-- xem sơ đồ trên trang 5 ), giúp DMA có thể sao chép không (không cần sao chép mọi thứ vào silicon âm thanh - chỉ cần nói với nó rằng một đoạn bộ nhớ thuộc về nó chứ không phải CPU. Tuy nhiên, nếu họ thực sự làm điều này dưới vỏ bọc, nhưng tại sao bạn lại không?).

Lưu ý rằng các IOCTL trên VCHIQ không thực sự truyền dữ liệu theo từng se - chúng thiết lập DMA và các hoạt động khác giữa các khối bộ nhớ và gửi lệnh đến các bit khác nhau. Điều này có thể cực kỳ nguy hiểm, vì bạn có thể có khả năng làm hỏng cấu trúc dữ liệu nhân bên trong từ không gian người dùng, làm sập GPU, xoay quanh dữ liệu bị hỏng, v.v. Vì vậy, đừng đặt / dev / vhciq thành chế độ 777 !!!

Trong mọi trường hợp, câu trả lời ngắn gọn cho "VCHIQ là gì?" Đây là:

VCHIQ là giao diện lệnh giữa nhân Linux đang chạy và các thiết bị ngoại vi (trong số những thứ khác) trong silicon VideoCore. / dev / vhciq cung cấp quyền truy cập không gian người dùng chung vào các lệnh đó để sử dụng bởi (tối thiểu) cả hệ thống con camera và âm thanh. Đây là một giao diện nguy hiểm để tiếp xúc với các chương trình ngẫu nhiên, do đó các quyền hạn chế có phần hạn chế theo mặc định.

Có những người tùy thuộc vào nhãn cầu của họ trong phần cứng BCM trong cộng đồng RPi; Tôi không phải là một trong số họ (có lẽ tôi bị sâu mắt cá chân sau vài giờ nghiên cứu :-)). Điều đó nói rằng, tôi nghĩ rằng đây là một tổng quan cấp cao khá và sẽ hoan nghênh bổ sung / chỉnh sửa.

Theo như lý do tại sao dữ liệu www yêu cầu sự cho phép, đó sẽ là vì chương trình CGI của bạn đang sinh ra các quy trình con như người dùng đó. Tôi không biết rõ về trình phát cụ thể đó, nhưng thực tế tốt hơn thường là chạy một số trình nền đặc biệt để điều khiển chương trình gây nhiễu âm thanh và điều khiển nó từ CGI bằng cách sử dụng ổ cắm UNIX hoặc giao diện tương tự thay vì trực tiếp sinh ra một đứa trẻ.

Thật vậy, một nhà cung cấp bảo mật đã bị trả lại một thời gian trước khi cho phép máy chủ web của họ truy cập vào máy của họ. Có lẽ họ đã làm điều này để dễ dàng quản lý quy trình hơn là viết loại lớp giữa này, nhưng đó là một bảo mật không-không. Cung cấp cho apache về cơ bản quyền truy cập vào GPU DMA là một ý tưởng tồi tệ không kém (mặc dù tôi khó khai thác hơn nhiều).

Hy vọng điều này trả lời câu hỏi của bạn.


1
"Vậy tại sao điều khiển âm thanh cũng chạy qua VideoCore (nếu không nó sẽ không cần VCHIQ để điều khiển nó)?" -> Lưu ý rằng bạn không cần truy cập để /dev/vhciqchạy âm thanh nói chung - trong trường hợp này là do OP đang sử dụng omxplayerđể làm điều đó, điều này có thể không lý tưởng.
goldilocks

Hừm. Tôi hy vọng có trình điều khiển ALSA tạo giao diện đất người dùng phù hợp. Tôi không biết gì về omxplayer ngoài tìm kiếm Google 5 giây và tự hỏi liệu nó có làm gì thú vị với quyền truy cập bổ sung vào âm thanh đó không (như sử dụng codec phần cứng) hay chỉ cần mở một thiết bị ngu ngốc mà nó không cần. Hấp dẫn và tôi cũng tưởng tượng rằng trình điều khiển ALSA sử dụng VHCIQ dưới vỏ bọc (trực tiếp trong kernelspace, natch). Thứ gọn gàng!
BJ Đen

1
Tôi không biết đây có phải là điều thực sự xảy ra hay không, nhưng suy đoán ... GPU có giải mã MPEG phần cứng và có thể bao gồm âm thanh MP3 (không thể tìm thấy một cách nào đó) và bộ giải mã phần cứng có thể sẽ tiêu thụ ít hơn một chút nước trái cây hơn giải mã phần mềm. Hoàn toàn không xứng đáng với chi phí bảo mật, nhưng có thể thú vị.
BJ Đen

1
Huh. Khéo léo. Chỉ cần xem qua pqru.qr.ai và có vẻ như trình điều khiển ALSA thực sự sử dụng VHCIQ dưới vỏ bọc (không cần nói chuyện với / dev / vhciq vì nó có thể gọi API hạt nhân trực tiếp, nhưng vẫn ...).
BJ Đen

2
Chắc chắn rồi. Về cơ bản những gì đang xảy ra ở đây là chip Broadcom được cắt thành hai phần chính - CPU (đó là những gì Linux nói và chạy phần mềm đa năng) và GPU (chạy phần mềm độc lập và xử lý video, v.v.). VCHIQ là giao diện mà CPU sử dụng để nói chuyện với GPU. Đây là một đơn giản hóa, nhưng có thể đủ tốt cho bây giờ.
BJ Đen

0

Trong trường hợp của tôi, tôi gặp vấn đề tương tự khi tôi tạo một người dùng mới bên cạnh người dùng mặc định và tôi gặp vấn đề không chỉ về âm thanh mà cả cấu hình của wifi, truy cập vào cổng nối tiếp, v.v ... Sau đó, tôi đã mở / etc / tập tin nhóm. Và tôi đã thêm người dùng của mình vào tất cả các nhóm nơi người dùng 'pi' được chèn và mọi thứ đều hoạt động hoàn hảo. Như sau:

gốc: x: 0:
daemon: x: 1:
thùng: x: 2:
hệ thống: x: 3:
adm: x: 4: pi, carlos 
tty: x: 5: pi, carlos
đĩa: x: 6:
lp: x: 7:
thư: x: 8:
tin tức: x: 9:
uucp: x: 10:
người đàn ông: x: 12:
proxy: x: 13:
kmem: x: 15:
quay số: x: 20: pi, carlos
fax: x: 21:
giọng nói: x: 22:
cdrom: x: 24: pi, carlos
đĩa mềm: x: 25:
băng: x: 26:
sudo: x: 27: pi, 
âm thanh carlos : x: 29: pi, carlos , nhấn
nhúng: x: 30:
dữ liệu www: x: 33:
sao lưu: x: 34:
Toán tử: x: 37:
danh sách: x: 38:
irc: x: 39:
src: x: 40:
gnats: x: 41:
bóng: x: 42:
không tưởng: x: 43:
video: x: 44: pi, carlos
sasl: x: 45:
plugdev: x: 46: pi, carlos
nhân viên: x: 50:
trò chơi: x: 60: pi, carlos 
người dùng: x: 100: pi, carlos
nhóm: x: 65534:
đầu vào: x: 101: pi, carlos
hệ thống-tạp chí: x: 102:
systemd-timesync: x: 103:
hệ thống mạng: x: 104:
giải quyết hệ thống: x: 105:
systemd-bus-proxy: x: 106:
crontab: x: 107:
netdev: x: 108: pi, carlos
pi: x: 1000:
tin nhắn: 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
ánh sáng: x: 113:
epmd: x: 114:
ssl-cert: x: 115:
Carlos: x: 1001:
rtkit: x: 116:
nhấn: x: 117:
truy cập xung: x: 118:
 

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.