Hiểu trình điều khiển thiết bị Linux của webcam


11

Theo tôi biết, trình điều khiển thiết bị là một phần của SW có khả năng giao tiếp với một loại thiết bị cụ thể được gắn vào máy tính.

Trong trường hợp webcam USB, trình điều khiển có trách nhiệm là UVC hỗ trợ mọi thiết bị tuân thủ UVC. Điều này có nghĩa là cho phép HĐH hoặc chương trình máy tính khác truy cập các chức năng phần cứng mà không cần biết chi tiết chính xác về phần cứng đang được sử dụng.

Vì lý do này, tôi đã cài đặt trình điều khiển thiết bị UVC Linux bằng cách chạy:

opkg install kernel-module-uvcvideo

Webcam đã được công nhận bởi nhân Linux : dev/video0. Tuy nhiên, tôi vẫn không thể thực hiện truyền phát video với FFmpeg, vì tôi đã thiếu API V4L2. Tôi đã cài đặt V4L2, bằng cách cấu hình kernel.

Các truy vấn của tôi là:

  • Trình điều khiển UVC và V4L2 được liên kết với nhau như thế nào?
  • Mục đích của API V4L2 là gì?
  • Nếu tôi chưa cài đặt UVC trước, nó sẽ được cài đặt với V4L2?

LinuxTV đề cập: Việc triển khai trình điều khiển uvcvideo chỉ tuân thủ API V4L2 . Điều này có nghĩa là UVC là một phần của API V4L2?

Câu trả lời:


7

Lớp video USB (UVC) là một đặc điểm kỹ thuật mà các webcam USB, v.v., được cho là phù hợp. Bằng cách này, chúng có thể được sử dụng trên bất kỳ hệ thống nào thực hiện hỗ trợ cho các thiết bị tuân thủ UVC.

V4L2 là hệ thống con video hạt nhân linux mà việc triển khai UVC linux phụ thuộc vào. Nói cách khác, trong nhân hỗ trợ UVC yêu cầu V4L2, nhưng không phải là cách khác.

API V4L2 đề cập đến giao diện lập trình không gian người dùng , được ghi lại ở đây .


Nếu tôi hiểu, kernel không có V4L2, không thể hỗ trợ các thiết bị tuân thủ UVC, ngay cả khi trình điều khiển uvc được cài đặt.
dempap

2
Đúng. Trình điều khiển là một phần của kernel; mặc dù chúng có thể được biên dịch thành các mô-đun riêng biệt, chúng được biên dịch bằng nguồn kernel. Nếu đó không phải là phiên bản nguồn giống như kernel đang chạy của bạn, chúng sẽ không hoạt động và nếu chúng không được biên dịch từ cùng một cấu hình, có thể có sự không nhất quán đáng kể. Ví dụ: nếu bạn không tích hợp lõi âm thanh (ALSA) vào kernel (hoặc có sẵn dưới dạng mô-đun), thì trình điều khiển phần cứng mô-đun cho card âm thanh là vô dụng.
goldilocks

13

Thật đáng ngạc nhiên khi bạn có thể tìm thấy bao nhiêu tài liệu cho Video4Linux2 - và không ai trong số đó thực sự giải thích Video4Linux .

Đầu tiên, Video4Linux2 là khung trình điều khiển Linux . Trình điều khiển khung không thực sự kiểm soát các thiết bị trực tiếp. Thay vào đó, họ cung cấp một mô hình trừu tượng của một số loại thiết bị, trong trường hợp này là thiết bị video cho các ứng dụng sử dụng. Khung trình điều khiển cung cấp ba lợi ích chính:

  1. Cung cấp API hợp nhất cho các ứng dụng sử dụng với rất nhiều thiết bị vật lý, cho dù được kết nối bằng USB, PCIe, MIPI, Ethernet hoặc loại bus truyền dữ liệu khác
  2. Trong kernel, các khung chứa loại mã cần thiết trong hầu hết tất cả các trình điều khiển thiết bị của một lớp cụ thể, do đó giảm đáng kể khối lượng mã khác nhau
  3. Trong kernel, các khung công tác cung cấp một kế hoạch chi tiết để viết các trình điều khiển cấp thấp mới thực sự kiểm soát phần cứng, do đó đơn giản hóa việc phát triển trình điều khiển.

Vì vậy, trình điều khiển V4L2 là trình điều khiển cấp cao điều khiển trình điều khiển UVC, điều khiển trình điều khiển USB có thể đang lái trình điều khiển phần cứng cấp thấp hơn.

Mô hình Matryoshka này rất phổ biến trong cây trình điều khiển nhân Linux. V4L2 là một trong những ví dụ phức tạp hơn vì một số thiết bị máy ảnh yêu cầu truy cập các nhóm thiết bị phụ lớn trong một số lớp điều khiển máy ảnh và định tuyến đầu ra của máy ảnh trong số các thành phần khác nhau như bộ xử lý hình ảnh.

Bạn vẫn có thể truy cập trình điều khiển UVC trực tiếp từ không gian người dùng bằng tệp thiết bị và các cuộc gọi hệ thống "ioctl", mà không cần thông qua trình điều khiển V4L2 và bạn vẫn có thể truy cập trực tiếp trình điều khiển USB từ không gian người dùng bằng tệp thiết bị và "ioctl".

Là một khung chung cung cấp chức năng chung cho nhiều loại thiết bị, V4L2 không cung cấp cho bạn tất cả các chức năng mà trình điều khiển UVC có thể cung cấp (giả sử rằng thiết bị của bạn thực sự cung cấp nhiều chức năng UVC hơn mức cần thiết để hỗ trợ V4L2) .

Vì vậy, nếu bạn có một thiết bị UVC cung cấp tất cả các chức năng được chỉ định trong thông số UVC, thì để thực sự sử dụng một số chức năng này, bạn sẽ cần truy cập trực tiếp vào trình điều khiển UVC thông qua tệp thiết bị và hệ thống "ioctl" gọi, giả sử rằng trình điều khiển UVC nhân Linux trên thực tế hỗ trợ tất cả các đặc tả UVC.

Tuy nhiên, ý nghĩa của

Việc triển khai trình điều khiển uvcvideo chỉ tuân thủ API V4L2

là trong trình điều khiển UVC nhân Linux hiện tại trên thực tế không cung cấp bất kỳ hỗ trợ chức năng UVC nào nhiều hơn mức cần thiết cho V4L2.

Bản thân hỗ trợ V4L2 trong kernel không cung cấp hỗ trợ UVC hoặc USB hoặc hỗ trợ phần cứng USB cấp thấp hơn.

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.