Raspberry Pi에서 / dev / vchiq 란 무엇입니까?


10

Raspberry Pi 3과 raspbian jessie를 사용하고 있으며 perg-cgi로 프로그램 (omxplayer)을 호출하여 RiPi에서 음악을 재생할 수 있도록 / dev / vchiq 를 발견했습니다. 그리고 나는 그것을 작동시키지 않습니다.

브라우저로 열었을 때 (예 : localhost / muzikica / pusti.pl) [apache2] " vchiq 인스턴스를 열지 못했습니다 "라고 말했습니다 . 그래서 / dev / vchiq 파일의 권한을 xx7로 변경했으며 RiPi를 다시 시작하지 않을 때까지 작동했습니다. 그래서 / dev / vchiq 는 비디오 그룹의 일부 이기 때문에 www-data (내 pusti.pl 스크립트가 호출하는 프로그램을 실행하는 사용자)를 비디오 그룹에 추가했습니다. 그리고 효과가있었습니다!

이제 / dev / vchiq xD 가 무엇 이며 왜 www-data가 Raspberry Pi에서 사운드를 재생하기 위해 최소한 읽기 및 쓰기 권한이 필요한가요?

미리 감사드립니다.

답변:


12

전능하신 Google에 "VCHIQ 란 무엇입니까?"라는 질문에 대한 답변이 준비되어 있지 않은 것에 놀랐습니다. 나는 오랜 커널 괴짜이며 Broadcom 직원이 아니며 BCM283 * 전문가도 아니지만 다음과 같은 후손을 위해 찾은 것입니다.

로부터 라즈베리 파이 커널 지점 :

BCM2708 제품군의 커널 대 VideoCore 통신 인터페이스.

여기서 주목할 가치가있는 것은 VideoCore가 Pi가 실행하는 SoC의 비디오 컨트롤러 (놀랍게도)라는 점이며, 이는 GPU에 연결된 다양한 서브 시스템에 대해 거의 또는 전혀 직접적인 IOCTL 을 실행하는 편리한 방법 인 것 같습니다. . 여기에는 비디오가 포함되어 있다는 것은 놀라운 일이 아니지만 비디오가 코덱에 필요한 모든 코덱을 고려할 때 카메라 인터페이스에 VideoCore 내에 실리콘이 있는 것이 합리적이라고 생각합니다 .

그렇다면 왜 오디오 제어가 VideoCore를 통해서도 실행됩니까 (그렇지 않으면 VCHIQ가 제어하지 않아도됩니까)? VC가 H.264 및 기타 코덱에 대한 하드웨어 지원 (HDMI를 통해 오디오를 라우팅 할 수 있기 때문에)을 지원한다는 사실을 감안할 때 실리콘을 넣는 것이 가장 쉬운 장소라고 생각합니다. BCM 칩에는 두 개의 MMU가 있는데 (하나는 VC + ARM, 다른 하나는 일반적인 OS 사용 -5 페이지의 다이어그램 참조 ), 무 복사 DMA를 가능하게합니다 (사물을 복사 할 필요 없음). 오디오 실리콘-단지 메모리 덩어리가 CPU가 아니라 CPU에 속한다고 알려주십시오. Dunno 아직 실제로 커버 아래 에서이 작업을 수행한다면 왜 그렇지 않습니까?).

VCHIQ의 IOCTL은 실제로 데이터 자체를 전송하지 않습니다. 즉, 메모리 청크간에 DMA 및 기타 작업을 설정하고 다양한 비트로 명령을 보냅니다. 사용자 공간에서 내부 커널 데이터 구조를 망칠 수 있고, GPU 충돌, 손상된 데이터 주변 슬링 등을 할 수 있으므로 매우 위험 할 수 있습니다. 따라서 / dev / vhciq를 모드 777로 설정하지 마십시오 !!!

어쨌든 "VCHIQ 란 무엇입니까?" 여기있어:

VCHIQ는 실행중인 Linux 커널과 VideoCore 실리콘의 주변 장치 사이의 명령 인터페이스입니다. / dev / vhciq는 카메라 및 오디오 하위 시스템에서도 사용되는 명령에 대한 일반 사용자 공간 액세스를 제공합니다. 임의의 프로그램에 노출되는 것은 상당히 위험한 인터페이스이므로 기본적으로 다소 제한적인 권한입니다.

RPi 커뮤니티의 BCM 하드웨어에서 자신의 시선에 맞는 사람들이 있습니다. 나는 그들 중 하나가 아닙니다 (두 시간의 연구 후에 아마도 발목이 깊습니다 :-)). 즉, 이것은 괜찮은 수준의 개요이며 추가 / 수정을 환영합니다.

www-data에 권한이 필요한 이유는 CGI 프로그램이 해당 사용자로서 하위 프로세스를 생성하기 때문입니다. 나는 특정 플레이어를 잘 모르지만 일반적으로 특수 데몬을 실행하여 사운드에 인터페이스하고 자식을 직접 생성하는 대신 UNIX 소켓 또는 유사한 인터페이스를 사용하여 CGI에서 제어하는 ​​프로그램을 제어하는 ​​것이 좋습니다.

실제로 보안 공급 업체는 웹 서버가 자신의 컴퓨터에 루트로 액세스 할 수 있도록 잠시 중단 되었습니다. 아마도 이런 유형의 중간 계층을 작성하는 대신 프로세스 관리를 쉽게하기 위해이 작업을 수행했을 수도 있지만 보안은 아닙니다. 아파치에 기본적으로 GPU DMA에 대한 무제한 액세스를 제공하는 것은 똑같이 나쁜 생각입니다 (허용하기는 훨씬 어렵습니다).

희망적으로 이것은 귀하의 질문에 대답합니다.


1
"왜 오디오 제어가 VideoCore를 통해서도 실행됩니까 (그렇지 않으면 VCHIQ가 제어하지 않아도됩니까?)" -> /dev/vhciq일반적으로 오디오를 실행 하기 위해 액세스 할 필요는 없습니다 .이 경우에는 OP가이 omxplayer를 수행 하기 때문에 사용 하는 것이 바람직하지 않습니다.
goldilocks

흠. 적절한 사용자 랜드 인터페이스를 만드는 ALSA 드라이버가있을 것으로 기대합니다. 나는 5 초 구글 검색 이외의 omxplayer에 대해 아무것도 알지 못하고 (하드웨어 코덱을 사용하는 것과 같이) 오디오에 대한 추가 액세스로 흥미로운 일을하고 있는지 또는 필요없는 장치를 어리석게 여는 지 궁금합니다. 또한 ALSA 드라이버는 VHCIQ를 커버 아래 (커널 공간 내에서 직접) 사용한다고 상상합니다. 깔끔한 물건!
BJ Black

1
이것이 실제로 일어날 일인지 모르겠지만 추측 ... GPU에는 하드웨어 MPEG 디코딩이 있으며 MP3 오디오 (참조를 찾을 수 없음)를 포함 할 수 있으며 하드웨어 디코더는 약간 덜 소비합니다 소프트웨어 디코딩보다 주스. 보안 비용으로 가치가 없지만 흥미로울 수 있습니다.
BJ Black

1
허. 산뜻한. pqru.qr.ai살펴보면 ALSA 드라이버가 실제로 커버 아래에서 VHCIQ를 사용하는 것처럼 보입니다 (커널 API를 직접 호출 할 수 있기 때문에 / dev / vhciq와 대화 할 필요는 없지만 여전히 ...).
BJ Black

2
확실한. 기본적으로 Broadcom 칩은 두 가지 주요 부분, 즉 CPU (Linux가 범용 소프트웨어와 통신하고 실행하는 것)와 GPU (독립 펌웨어를 실행하고 비디오 등을 처리하는 것)로 구분됩니다. VCHIQ는 CPU가 GPU와 통신하는 데 사용하는 인터페이스입니다. 이것은 단순화이지만 현재로서는 충분할 것입니다.
BJ Black

0

내 경우에는 기본 사용자 이외의 새 사용자를 만들 때도 동일한 문제가 발생했으며 소리뿐만 아니라 Wi-Fi 구성, 직렬 포트 액세스 등의 문제가 발생했습니다. 그런 다음 / etc를 열었습니다. / 그룹 파일. 그리고 사용자 'pi'가 삽입 된 모든 그룹에 사용자를 추가했으며 모든 것이 완벽하게 작동했습니다. 다음과 같이 :

루트 : x : 0 :
데몬 : x : 1 :
빈 : x : 2 :
시스템 : x : 3 :
adm : x : 4 : pi, carlos 
tty : x : 5 : pi, 카를로스
디스크 : x : 6 :
lp : x : 7 :
메일 : x : 8 :
뉴스 : x : 9 :
uucp : x : 10 :
남자 : x : 12 :
프록시 : x : 13 :
kmem : x : 15 :
전화 걸기 : x : 20 : pi, 카를로스
팩스 : x : 21 :
음성 : x : 22 :
cdrom : x : 24 : pi, 카를로스
플로피 : x : 25 :
테이프 : x : 26 :
sudo를 X : 27 : PI 카를로스 
오디오 X : 29 : PI 카를로스 눌러
딥 : x : 30 :
www-data : x : 33 :
백업 : x : 34 :
연산자 : x : 37 :
목록 : x : 38 :
irc : x : 39 :
src : x : 40 :
모기 : x : 41 :
그림자 : x : 42 :
utmp : x : 43 :
비디오 : x : 44 : pi, Carlos
sasl : x : 45 :
plugdev : x : 46 : pi, 카를로스
직원 : x : 50 :
게임 : x : 60 : pi, carlos 
사용자 : x : 100 : pi, carlos
그룹 없음 : x : 65534 :
입력 : x : 101 : pi, 카를로스
시스템 저널 : x : 102 :
시스템 시간 동기화 : x : 103 :
systemd-network : x : 104 :
시스템 해결 : x : 105 :
시스템 버스 프록시 : x : 106 :
crontab : x : 107 :
netdev : x : 108 : pi, 카를로스
pi : x : 1000 :
메시지 버스 : x : 109 :
ssh : x : 110 :
블루투스 : x : 111 :
아바 히 : x : 112 :
spi : x : 999 : pi, carlos 
i2c : x : 998 : pi, carlos 
gpio : x : 997 : pi, Carlos
lightdm : x : 113 :
epmd : x : 114 :
SSL 인증서 : x : 115 :
카를로스 : x : 1001 :
rtkit : x : 116 :
프레스 : x : 117 :
펄스 액세스 : x : 118 :
 

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.