1.引言linux
本篇介紹USB攝像頭的使用,實現的功能是經過攝像頭進行拍照,生成jpg格式圖片。
git
2.環境介紹github
2.1.硬件windows
1) 網上的一個第三方作的NUC972開發板:微信
有興趣購買的朋友,能夠去他們的淘寶店購買:app
https://s.click.taobao.com/X8mza8wide
2) USB攝像頭工具
京東購買連接:https://u.jd.com/D18Rf8 ui
2.2.軟件spa
1) Uboot繼續使用以前文章用的,無須改動。
2) Kernel在上一篇基礎上,要作必定的修改,用來支持USB攝像頭識別。
3) Rootfs在上一篇用Buildroot生成的基礎上,無須改動。
3.內核配置
Linux 內核中已經包含了USB攝像頭的驅動,只要勾選上相關配置便可。
配置完,保存,編譯,以後下載到板子裏。
插入USB攝像頭,打印信息以下:
說明驅動已經OK了。
4.libjpeg庫安裝
以前buildroot編出來的根文件系統裏是有jpeglib庫的,版本是libjpeg.so.9.1.0,因爲咱們應用程序依賴的版本是8.0,因此單獨編譯了一個。
步驟以下:
1) 解壓jpegsrc.v8b.tar.gz
2) 進入到解壓後的jpeg-8b目錄裏,執行
./configure CC=arm-linux-gcc LD=arm-linux-ld --host=arm-linux --prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr --exec-prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr
其中:
–prefix參數是強制設定install以後生成文件的存放目錄,這裏將其放到了交叉編譯工具鏈文件夾的/usr 目錄下,放到這裏的緣由是由於後面編譯應用程序時會在交叉工具鏈的目錄下查找相關的庫。
topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ ./configure CC=arm-linux-gcc LD=arm-linux-ld --host=arm-linux --prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr --exec-prefix=/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr
3)make 編譯
topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ make
4)最後make install
topsemic@topsemic-virtual-machine:~/nuc972/tool/jpeg-v8b/jpeg-8b$ make install
在/home/topsemic/nuc972/toolchain/arm_linux_4.8/usr/lib下生成相應的庫。
注:以前buildroot生成的文件系統裏其實已經有了libjpeg,在上面能夠看到文件爲libjpeg.so.9.1.0,或者咱們登錄到板子上
find / -name "libjpeg*" 查找下,在/usr/lib目錄下也能夠看到
這三者的關係是:
使用ls -al 查看
其中libjpeg.so 和libjpeg.so.9是軟鏈接文件,至關於windows下的快捷方式,若是咱們在winscp下查看,能夠看到他們的圖標上有個箭頭
真正使用的庫文件是libjpeg.so.9.2.0
5)咱們須要將新編譯的libjpeg庫放到板子上,方法是先把板子上原有的三個文件刪掉,而後經過winscp拷貝libjpeg.so.8.0.2到板子的/usr/lib目錄下,
最後使用ln -s 源文件 目標文件 命令,新建兩個軟鏈接
5.應用程序
應用程序的編譯步驟以下:
1) 進入到v4l2_demo目錄
2) make編譯
3) 生成的可執行文件是bin目錄下的mainapp
4) 將其放到板子裏,運行結果以下:
# ./mainapp
----------- connected --------------
v4l2_open function open /dev/video0 success!
driver: uvcvideo
card: USB2.0 PC CAMERA
bus_info: usb-nuc970-ehci-2
version: 199276
capabilities: 84000001
Device /dev/video0: supports capture.
Device /dev/video0: supports streaming.
fmt.type: 1
pix.pixelformat: YUYV
pix.width: 640
pix.height: 480
pix.field: 1
Frame buffer 5: address = 0xb6c88000, length = 614400
Frame buffer 5: address = 0xb6bf2000, length = 614400
Frame buffer 5: address = 0xb6b5c000, length = 614400
Frame buffer 5: address = 0xb6ac6000, length = 614400
Frame buffer 5: address = 0xb6a30000, length = 614400
open /dev/video success!
call yuyv_to_rgb function
yuyv_to_rgb function excute OK!
path3=./jpeg1.jpg 1
程序在不斷的拍攝並保存圖像,圖像名稱爲jpegx.jpeg(x爲1,2,3 依次增長)
6.結束語
本期相關的資料在https://github.com/TopSemic/NUC972_Linux 中
本篇爲你們介紹了Linux下USB攝像頭的簡單使用,歡迎你們多交流,能夠在網頁下方留言討論,或者發郵件:Topsemic@sina.com ,微信公衆號以下,歡迎關注:
本文分享自微信公衆號 - TopSemic嵌入式(TopSemic)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。