UVC 攝像頭在 RK3399 上的應用

Andyshrk發表於2019-11-18

USB 攝像頭在 RK3399 上的應用

1、簡介

UVC 全稱 USB Video Class 、是 USB-IF 定製的一套標準,所有遵循這一標準的 USB 介面攝像頭在 Windows Linux 等系統下,幾乎能直接使用,達到類似免驅的效果。

當然了,並不是說真正的不需要驅動,而是隻要某個 USB 介面的攝像頭遵循了 UVC標準,它就能被 Window、Linux 系統中一套通用的驅動所驅動,而不需要你再安裝其他的驅動。比如 Linux 核心中就有一套針對 UVC 裝置的通用驅動:drivers/media/usb/uvc , 只要開啟了這套驅動,幾乎所有的 UVC 攝像頭都可以直接使用。

2、Leez P710 的 USB 介面

Leez P710 是基於 RK3399 設計的開發板,根據 TRM,RK3399 有 2 個 USB2.0 控制器 和 2 個 USB 3.0 控制,P710 把它們的 USB 介面都留了出來,這為 P710 提供了靈活的連線介面。我們剛好可以利用它提供的 USB 介面連線 USB 攝像頭。

3、開啟核心的 UVC 驅動

我使用的是 mainline 的核心,當前版本為 5.3-rc2.

在 核心原始碼根目錄下執行 make ARCH=arm64 menuconfig 命令,開啟 UVC 相關配置:

然後編譯核心,dts 使用這裡的:rk3399-leez-p710.dts

先燒寫這裡的韌體: 百度網盤 下載, 提取碼為 t4xg 。刷韌體的方法可以參考 Debian10 for Leez P710

系統起來後,通過 scp 命令把前面編譯的 Imagedtb 拷貝到開發板上,替換掉原來的 Imagedtb,然後通過 reboot 命令重啟系統:

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 原始碼路徑換成你自己的。

系統起來後,接入你的 usb 攝像頭,然後執行 dmesg 命令檢視核心 log, 可以看到 uvc 已經被系統識別到:

執行 v4l2-ctl -d /dev/video0 --list-formats-ext 命令可以檢視你的攝像頭支援的格式:

4、 執行 mjpg-streamer

mjpg-streamergithub 上一個開源的 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 地址。

採集到的圖象效果可以看這裡 mjpg stream

更多原創請掃碼關注公眾號:HackforFun

相關文章