/ 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 :

Kernel to VideoCore อินเตอร์เฟสการสื่อสารสำหรับตระกูลผลิตภัณฑ์ BCM2708

มีอะไรน่าสังเกตอยู่ที่นี่คือ VideoCore คือ (เซอร์ไพรส์เซอร์ไพรส์) คอนโทรลเลอร์วิดีโอสำหรับ SoC ที่ Pi ทำงานและจะปรากฏว่านี่เป็นวิธีที่สะดวกในการใช้IOCTL โดยตรงมากขึ้นหรือน้อยลงไปยังระบบย่อยต่างๆติดอยู่กับ GPU . นั่นรวมถึงวิดีโอไม่น่าแปลกใจ แต่ฉันคิดว่ามันสมเหตุสมผลที่อินเตอร์เฟสกล้องมีซิลิกอนภายใน VideoCoreเนื่องจากทุกสิ่งที่ตัวแปลงสัญญาณวิดีโอจำเป็นต้องทำ

เหตุใดการควบคุมเสียงจึงทำงานผ่าน VideoCore เช่นกัน ฉันสงสัยว่าด้วยความจริงที่ว่า VC มีฮาร์ดแวร์รองรับ H.264 และตัวแปลงสัญญาณอื่น ๆ (และเนื่องจากคุณสามารถกำหนดเส้นทางเสียงผ่าน HDMI) มันจึงเป็นสถานที่ที่ง่ายที่สุดในการใส่ซิลิคอน นั่นคือข้อเท็จจริงและความจริงที่ว่าชิป BCM มีสอง MMUs (หนึ่งสำหรับ VC + ARM อีกหนึ่งสำหรับการใช้งานระบบปฏิบัติการปกติ - ดูไดอะแกรมบน pg 5 ) ซึ่งทำให้ DMA เป็นศูนย์ที่เป็นไปได้ (ไม่จำเป็นต้องคัดลอกสิ่งต่าง ๆ ออดิโอซิลิกอน - แค่บอกว่าหน่วยความจำอันหนึ่งเป็นของมันไม่ใช่ซีพียู Dunno แต่ถ้าพวกเขาทำสิ่งนี้ภายใต้ฝาครอบ แต่ทำไมคุณถึงไม่ทำ?)

โปรดทราบว่า IOCTLs บน VCHIQ ไม่ได้ถ่ายโอนข้อมูลจริง ๆ - พวกเขาตั้งค่า DMA และการดำเนินการอื่น ๆ ระหว่างหน่วยความจำและส่งคำสั่งไปยังบิตต่าง ๆ สิ่งนี้อาจเป็นอันตรายอย่างยิ่งเนื่องจากคุณอาจใช้สกรูกับโครงสร้างข้อมูลเคอร์เนลภายในจาก userspace, ขัดข้อง GPU, ยกระดับข้อมูลที่เสียหายเป็นต้นดังนั้นอย่าตั้ง / dev / vhciq เป็นโหมด 777 !!!

ไม่ว่าในกรณีใดคำตอบสั้น ๆ ของ "VCHIQ คืออะไร" นี่มันคือ:

VCHIQ เป็นอินเตอร์เฟสคำสั่งระหว่างเคอร์เนล Linux ที่ใช้งานและอุปกรณ์ต่อพ่วง (เหนือสิ่งอื่นใด) ในซิลิกอน VideoCore / dev / vhciq จัดเตรียมการเข้าถึงพื้นที่ผู้ใช้ทั่วไปให้กับคำสั่งเหล่านั้นสำหรับการใช้งานโดย (อย่างน้อยที่สุด) กล้องและระบบย่อยเสียงเช่นกัน มันเป็นอินเทอร์เฟซที่อันตรายพอสมควรที่จะเปิดเผยโปรแกรมแบบสุ่มดังนั้นค่าเริ่มต้นจะ จำกัด สิทธิ์

มีคนที่ขึ้นอยู่กับดวงตาของพวกเขาในฮาร์ดแวร์ BCM ในชุมชน RPi; ฉันไม่ได้เป็นหนึ่งในพวกเขา (บางทีฉันข้อเท้าลึกหลังจากสองสามชั่วโมงของการวิจัย :-)) ที่กล่าวว่าฉันคิดว่านี่เป็นภาพรวมระดับสูงที่เหมาะสมและยินดีต้อนรับการเพิ่มเติม / การแก้ไข

เท่าที่ทำไม www-data ต้องได้รับอนุญาตนั่นอาจเป็นเพราะโปรแกรม CGI ของคุณกำลังวางไข่กระบวนการลูกในฐานะผู้ใช้นั้น ฉันไม่ทราบว่าผู้เล่นเฉพาะรายเก่ง แต่วิธีปฏิบัติที่ดีกว่าปกติคือการใช้ดีมอนพิเศษเพื่อควบคุมโปรแกรมที่เชื่อมต่อกับเสียงและควบคุมจาก CGI โดยใช้ซ็อกเก็ต UNIX หรืออินเตอร์เฟสที่คล้ายกันแทนที่จะวางไข่โดยตรงกับเด็ก

อันที่จริงผู้ขายระบบรักษาความปลอดภัยกลับมาพักหนึ่งเพื่อให้รูทเว็บเซิร์ฟเวอร์เข้าถึงเครื่องของตนได้ พวกเขาอาจทำสิ่งนี้เพื่อทำให้การจัดการกระบวนการง่ายขึ้นแทนที่จะเขียนเลเยอร์ประเภทนี้ แต่มันไม่มีความปลอดภัย การให้ apache โดยทั่วไปแล้วการเข้าถึง GPU DMA นั้นเป็นความคิดที่ไม่ดีเท่า ๆ กัน

หวังว่านี่จะตอบคำถามของคุณ


1
"เหตุใดการควบคุมเสียงจึงทำงานผ่าน VideoCore ด้วย (ไม่เช่นนั้นไม่จำเป็นต้องใช้ VCHIQ ในการควบคุม) -> โปรดทราบว่าคุณไม่จำเป็นต้องเข้าถึงเพื่อ/dev/vhciqเรียกใช้เสียงโดยทั่วไป - ในกรณีนี้เป็นเพราะ OP ใช้omxplayerเพื่อทำซึ่งอาจไม่เหมาะ
goldilocks

อืมมม ฉันคาดหวังว่าจะมีไดรเวอร์ ALSA ที่สร้างอินเทอร์เฟซผู้ใช้ที่ดินที่เหมาะสม ฉันไม่รู้อะไรเลยเกี่ยวกับ omxplayer นอกเหนือจากการค้นหาของ Google 5 วินาทีและสงสัยว่ามันทำอะไรที่น่าสนใจกับการเข้าถึงเสียงเพิ่มเติม (เช่นการใช้ตัวแปลงสัญญาณฮาร์ดแวร์) หรือเพียงแค่เปิดอุปกรณ์ที่ไม่จำเป็นอย่างโง่เขลา ที่น่าสนใจและฉันยังนึกภาพว่าคนขับ ALSA ใช้ VHCIQ ภายใต้หน้ากาก (ภายใน kernelspace natch โดยตรง) สิ่งที่เรียบร้อย!
BJ Black

1
ฉันไม่รู้ว่านี่คือสิ่งที่เกิดขึ้นจริง แต่เป็นการเก็งกำไร ... GPU มีฮาร์ดแวร์ถอดรหัส MPEG และอาจรวมถึงเสียง MP3 (ไม่สามารถหาวิธีอ้างอิงได้) และตัวถอดรหัสฮาร์ดแวร์น่าจะใช้งานน้อยลง น้ำผลไม้กว่าถอดรหัสซอฟต์แวร์ ไม่คุ้มค่ากับความปลอดภัย แต่น่าสนใจ
BJ Black

1
ฮะ. เรียบร้อย เพียงแค่มองผ่านpqru.qr.aiและดูเหมือนว่าไดร์เวอร์ ALSA ใช้ VHCIQ ภายใต้หน้ากาก (ไม่จำเป็นต้องคุยกับ / dev / vhciq เพราะมันสามารถเรียกเคอร์เนล API โดยตรง แต่ก็ยัง ... )
BJ Black

2
แน่ใจ โดยทั่วไปสิ่งที่เกิดขึ้นที่นี่คือชิป Broadcom แบ่งออกเป็นสองส่วนหลักคือ CPU (ซึ่งเป็นสิ่งที่ Linux พูดถึงและใช้งานซอฟต์แวร์วัตถุประสงค์ทั่วไป) และ GPU (ที่ใช้เฟิร์มแวร์อิสระและจัดการวิดีโอเป็นต้น) VCHIQ เป็นอินเตอร์เฟสที่ CPU ใช้เพื่อพูดคุยกับ GPU นี่คือการทำให้เข้าใจง่าย แต่น่าจะดีพอสำหรับตอนนี้
BJ Black

0

ในกรณีของฉันฉันมีปัญหาเดียวกันเมื่อฉันสร้างผู้ใช้ใหม่นอกเหนือจากผู้ใช้เริ่มต้นและฉันมีปัญหาไม่เพียง แต่เสียง แต่ยังกำหนดค่าของ wifi การเข้าถึงพอร์ตอนุกรม ฯลฯ ... แล้วฉันเปิด / etc ไฟล์ / กลุ่ม และฉันเพิ่มผู้ใช้ของฉันในทุกกลุ่มที่ใส่ 'pi' ของผู้ใช้และทุกอย่างทำงานได้อย่างสมบูรณ์ ดังต่อไปนี้:

root: x: 0:
daemon: 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:
kmem: x: 15:
dialout: x: 20: pi, carlos
แฟกซ์: 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-data: x: 33:
สำรอง: x: 34:
ผู้ประกอบการ: x: 37:
รายการ: x: 38:
irc: x: 39:
src: x: 40:
gnats: x: 41:
เงา: x: 42:
utmp: x: 43:
วิดีโอ: x: 44: pi, carlos
sasl: x: 45:
plugdev: x: 46: pi, carlos
พนักงาน: x: 50:
เกม: x: 60: pi, 
ผู้ใช้carlos : x: 100: pi, carlos
กลุ่ม nog: x: 65534:
อินพุต: x: 101: pi, carlos
systemd-journal: x: 102:
systemd-timesync: x: 103:
ระบบเครือข่าย: x: 104:
systemd-resol: x: 105:
systemd-bus-proxy: x: 106:
crontab: x: 107:
netdev: x: 108: pi, carlos
pi: x: 1000:
messagebus: x: 109:
ssh: x: 110:
บลูทู ธ : 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:
Carlos: x: 1001:
rtkit: x: 116:
กด: x: 117:
การเข้าถึงชีพจร: x: 118:
 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.