UVC 全稱 USB Video Class 、是 USB-IF 定製的一套標準,全部遵循這一標準的 USB 接口攝像頭在 Windows Linux 等系統下,幾乎能直接使用,達到相似免驅的效果。html
固然了,並非說真正的不須要驅動,而是隻要某個 USB 接口的攝像頭遵循了 UVC標準,它就能被 Window、Linux 系統中一套通用的驅動所驅動,而不須要你再安裝其餘的驅動。好比 Linux 內核中就有一套針對 UVC 設備的通用驅動:drivers/media/usb/uvc
, 只要打開了這套驅動,幾乎全部的 UVC 攝像頭均可以直接使用。linux
Leez P710 是基於 RK3399 設計的開發板,根據 TRM,RK3399 有 2 個 USB2.0 控制器 和 2 個 USB 3.0 控制,P710 把它們的 USB 接口都留了出來,這爲 P710 提供了靈活的鏈接接口。咱們恰好能夠利用它提供的 USB 接口鏈接 USB 攝像頭。git
我使用的是 mainline 的內核,當前版本爲 5.3-rc2.github
在 內核源碼根目錄下執行 make ARCH=arm64 menuconfig
命令,打開 UVC 相關配置:ide
而後編譯內核,dts 使用這裏的:rk3399-leez-p710.dtsspa
先燒寫這裏的固件: 百度網盤 下載, 提取碼爲 t4xg
。刷固件的方法能夠參考 Debian10 for Leez P710設計
系統起來後,經過 scp
命令把前面編譯的 Image
和 dtb
拷貝到開發板上,替換掉原來的 Image
和 dtb
,而後經過 reboot
命令重啓系統:3d
scp -r andy@172.16.12.67:~/your/linux/arch/arm64/boot/Image . scp -r andy@172.16.12.67:~/your/linux/arch/arm64/boot/dts/rockchip/rk3399-leez.dtb . cp Image /boot/Image cp rk3399-leez-p710.dtb /boot/dtb/rockchip/rk3399-leez.dtb sync reboot
注意把上面的用戶名、IP 地址、Linux 源碼路徑換成你本身的。code
系統起來後,接入你的 usb 攝像頭,而後執行 dmesg
命令查看內核 log, 能夠看到 uvc 已經被系統識別到:orm
運行 v4l2-ctl -d /dev/video0 --list-formats-ext
命令能夠查看你的攝像頭支持的格式:
mjpg-streamer
是 github 上一個開源的 uvc 視頻應用,它能夠獲取 uvc 攝像頭的視頻流,而後經過局域網傳輸,能夠直接在開發板上編譯這個代碼並運行:
git clone https://github.com/andyshrk/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental/ apt install cmake libjpeg62-turbo-dev make
若是一切順利,你很快就能編譯完代碼,而後執行下面的命令運行該應用:
./mjpg_streamer -o "output_http.so -w ./www" -i "input_uvc.so"
在局域網內,任何電腦的網頁端打開以下網址:http://172.16.33.179:8080/?action=stream
你就能實時看到攝像頭採集到的視頻流。
須要注意的是,上面的 ip 地址是你開發板的 ip 地址。
更多原創請掃碼關注公衆號:HackforFun