Sejauh yang saya tahu, driver perangkat adalah bagian dari SW yang dapat berkomunikasi dengan jenis perangkat tertentu yang terpasang pada komputer.
Dalam hal webcam USB, driver yang bertanggung jawab adalah UVC yang mendukung semua perangkat yang sesuai dengan UVC. Ini berarti bahwa memungkinkan OS atau program komputer lainnya untuk mengakses fungsi perangkat keras tanpa perlu mengetahui detail perangkat keras yang digunakan.
Untuk alasan ini, saya menginstal driver perangkat UVC Linux dengan menjalankan:
opkg install kernel-module-uvcvideo
Webcam telah diakui oleh kernel Linux: dev/video0
. Namun, saya masih tidak dapat melakukan streaming video dengan FFmpeg, karena saya kehilangan API V4L2. Saya menginstal V4L2, dengan mengkonfigurasi kernel.
Pertanyaan saya adalah:
- Bagaimana driver UVC dan V4L2 dihubungkan bersama?
- Apa tujuan dari V4L2 API?
- Jika saya belum menginstal UVC dulu, itu akan diinstal dengan V4L2?
LinuxTV merujuk: Implementasi driver uvcvideo hanya mematuhi API V4L2 . Ini berarti bahwa UVC adalah bagian dari V4L2 API?
Sungguh menakjubkan betapa banyak dokumentasi Anda dapat menemukan untuk Video4Linux2 - dan tidak ada yang benar-benar menjelaskan apa Video4Linux adalah .
Pertama, Video4Linux2 adalah kerangka kerja driver Linux . Driver framework sebenarnya tidak mengontrol perangkat secara langsung. Sebagai gantinya, mereka menyediakan model abstrak dari beberapa kelas perangkat, dalam hal ini perangkat video untuk digunakan aplikasi. Kerangka kerja pengemudi memberikan tiga manfaat utama:
Jadi, driver V4L2 adalah driver tingkat tinggi yang menggerakkan driver UVC, yang menggerakkan driver USB yang mungkin mengendarai driver perangkat keras yang bahkan lebih rendah.
Model Matryoshka ini sangat umum di pohon driver kernel Linux. V4L2 adalah salah satu contoh yang lebih kompleks karena beberapa perangkat kamera memerlukan akses kelompok besar sub-perangkat dalam beberapa lapisan yang mengontrol kamera dan merutekan output kamera di antara berbagai komponen seperti pengolah gambar.
Anda masih dapat mengakses driver UVC langsung dari userspace menggunakan file perangkat dan panggilan sistem "ioctl", tanpa melalui driver V4L2, dan Anda masih dapat mengakses driver USB yang mendasarinya langsung dari userspace menggunakan file perangkat itu dan "ioctl".
Menjadi kerangka kerja umum yang menyediakan fungsionalitas yang umum untuk berbagai perangkat, V4L2 tidak memberi Anda semua fungsionalitas yang dapat disediakan oleh driver UVC (dengan asumsi bahwa perangkat Anda benar-benar menyediakan fungsionalitas UVC lebih banyak daripada yang diperlukan untuk mendukung V4L2) .
Jadi jika Anda memiliki perangkat UVC yang menyediakan semua fungsi yang ditentukan dalam spesifikasi UVC, maka untuk benar-benar menggunakan beberapa fungsi ini, Anda perlu mengakses driver UVC langsung melalui file perangkat dan sistem "ioctl" panggilan, dengan asumsi bahwa driver UVC kernel Linux sebenarnya mendukung semua spesifikasi UVC.
Namun, arti dari
adalah bahwa dalam driver Linux kernel UVC saat ini sebenarnya tidak memberikan dukungan fungsi UVC lebih dari yang diperlukan untuk V4L2.
Dukungan V4L2 di kernel tidak dengan sendirinya memberikan dukungan UVC atau USB atau dukungan perangkat keras USB tingkat rendah.
sumber