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.
/dev/vhciq
chạy âm thanh nói chung - trong trường hợp này là do OP đang sử dụngomxplayer
để làm điều đó, điều này có thể không lý tưởng.