999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

達(dá)芬奇平臺的嵌入式Linux圖像采集與顯示

2014-09-06 10:49:55祝夏雨熊九龍王志虎王曉明
關(guān)鍵詞:嵌入式設(shè)備系統(tǒng)

祝夏雨,熊九龍,王志虎,王曉明

(國防科技大學(xué) 機(jī)電工程與自動(dòng)化學(xué)院,長沙 410073)

?

達(dá)芬奇平臺的嵌入式Linux圖像采集與顯示

祝夏雨,熊九龍,王志虎,王曉明

(國防科技大學(xué) 機(jī)電工程與自動(dòng)化學(xué)院,長沙 410073)

在模式識別等領(lǐng)域,需要進(jìn)行實(shí)時(shí)快速的圖像處理。本文設(shè)計(jì)了基于達(dá)芬奇系列芯片TMS320DM6446的硬件平臺,介紹了建立Linux開發(fā)環(huán)境的方法,利用Video4Linux和framebuffer實(shí)現(xiàn)了基于嵌入式Linux的USB攝像頭圖像采集與顯示,采集到的圖像可以直接送給DSP內(nèi)核,進(jìn)行高速的圖像處理。

達(dá)芬奇;Linux;圖像采集;DM6446;Video4Linux;framebuffer;USB攝像頭

引 言

嵌入式圖像采集系統(tǒng)具有體積小、成本低、穩(wěn)定性高等優(yōu)點(diǎn),在遠(yuǎn)程可視電話、計(jì)算機(jī)視覺、網(wǎng)絡(luò)會議等領(lǐng)域應(yīng)用廣泛。然而,一些圖像處理領(lǐng)域,如無人駕駛、模式識別,對運(yùn)算速度、運(yùn)算量要求較高,傳統(tǒng)的基于ARM芯片的嵌入式圖像采集系統(tǒng)往往無法滿足這一要求。

TI公司的達(dá)芬奇技術(shù)集成了DSP內(nèi)核和ARM內(nèi)核,是典型的基于共享存儲的嵌入式多處理器環(huán)境[1]。它既具有ARM對外設(shè)強(qiáng)大的管理能力,又擁有DSP對數(shù)據(jù)信號的高速處理能力,因而可以很好地滿足圖像處理對運(yùn)算速度和運(yùn)算量的要求。

Linux操作系統(tǒng)具有內(nèi)核穩(wěn)定、功能強(qiáng)大、支持多種硬件平臺、源代碼開放、可裁剪和低成本等眾多優(yōu)點(diǎn),使其在嵌入式領(lǐng)域備受青睞。

本文在基于達(dá)芬奇技術(shù)的嵌入式linux平臺上,利用OV511為控制芯片的網(wǎng)眼2000 USB攝像頭為采集模塊,使用Video4Linux內(nèi)核API接口函數(shù)以及framebuffer編寫相應(yīng)的程序,實(shí)現(xiàn)了圖像的采集與顯示,為DSP內(nèi)核后續(xù)的圖像處理奠定了基礎(chǔ)。

1 系統(tǒng)的硬件結(jié)構(gòu)

本文使用的系統(tǒng)硬件平臺采用TI公司的TMS320DM6446處理器(簡稱DM6446),它是一款雙核嵌入式處理器,內(nèi)部集成了ARM926EJS內(nèi)核和C64x+DSP內(nèi)核,DSP的數(shù)據(jù)處理能力達(dá)到4752 MIPS。該款芯片的ARM子系統(tǒng)是采用管道流水線的32位RISC處理器,工作頻率高達(dá)297 MHz,帶有獨(dú)立的16 KB的指令Cache,8 KB的數(shù)據(jù)Cache,16 KB RAM,16 KB ROM[2]。其片上外設(shè)還包括USB接口、10M/100M以太網(wǎng)卡、UART接口、SPI接口。在處理器豐富資源的基礎(chǔ)上,還進(jìn)行了擴(kuò)展,配置了128 MB 32位的SDRAM和128 MB的FLASH。另外,還配有分辨率為320×240的256色LCD。系統(tǒng)框圖如圖1所示。

圖1 系統(tǒng)框圖

2 Linux開發(fā)環(huán)境建立及內(nèi)核定制

2.1 主機(jī)開發(fā)環(huán)境的建立

ARM的開發(fā)一般需要三個(gè)系統(tǒng),即Windows系統(tǒng)、PC-Linux系統(tǒng)、ARM-Linux系統(tǒng)。其各自的功能如圖2所示。

圖2 三系統(tǒng)功能圖

三系統(tǒng)的搭建有兩種方法:一種是三臺分立的單系統(tǒng)機(jī)器組合,一種是一臺雙系統(tǒng)PC機(jī)和一臺單系統(tǒng)ARM開發(fā)板。本文采用后一種方式,一可以節(jié)約硬件資源,二可以使開發(fā)流程、開發(fā)環(huán)境的搭建更加簡單。

本系統(tǒng)PC機(jī)采用WindowsXP+VMware虛擬機(jī)+Linux的開發(fā)環(huán)境。其中VMware采用的是6.0版本,Linux采用的是較為成熟的Redhat9,內(nèi)核版本是2.4.20。

2.2 交叉編譯環(huán)境的建立

在進(jìn)入嵌入式開發(fā)之前,還需要建立一個(gè)交叉開發(fā)環(huán)境,這是一套編譯器、連接器和libc庫等組成的開發(fā)環(huán)境[3]。其開發(fā)模型如圖3所示。

圖3 交叉開發(fā)模式

圖3中,TARGET是目標(biāo)板,HOST是開發(fā)主機(jī)。在開發(fā)主機(jī)上,可以安裝開發(fā)工具,編輯、編譯目標(biāo)板的Linux引導(dǎo)程序、內(nèi)核和文件系統(tǒng),然后在目標(biāo)板上運(yùn)行。這種在主機(jī)環(huán)境下開發(fā),在目標(biāo)板上運(yùn)行的開發(fā)模式叫做交叉開發(fā)。

構(gòu)建交叉開發(fā)環(huán)境,首先要安裝交叉編譯工具鏈。Linux使用GUN的工具,社區(qū)的開發(fā)者已經(jīng)編譯出了常用體系結(jié)構(gòu)的工具鏈,從因特網(wǎng)上下載ARM體系結(jié)構(gòu)的編譯器,安裝即可。安裝后需要在環(huán)境變量PATH中添加路徑,該路徑必須是工具鏈的安裝路徑,這樣就可以直接使用arm-linux-gcc命令了。

2.3 內(nèi)核定制

嵌入式系統(tǒng)的存儲空間有限,要將Linux用于嵌入式系統(tǒng)就得對Linux操作系統(tǒng)進(jìn)行定制(或叫裁剪),使整個(gè)Linux系統(tǒng)能夠存放到容量較小的開發(fā)板FLASH中[4]。

由于本系統(tǒng)采用OV511芯片的USB攝像頭進(jìn)行圖像采集,所以在定制內(nèi)核時(shí),一定要使內(nèi)核支持USB總線和OV511攝像頭。此外,視頻采集設(shè)備的正常使用依賴于對 Video4Linux驅(qū)動(dòng)程序的支持,所以在定制內(nèi)核時(shí)也要添加這一項(xiàng)支持。

在定制內(nèi)核時(shí),應(yīng)該選中:

[*]Video for Linux

[*]support for usb

[*]USB ov511 Camera Support

3 基于Video4Linux的圖像采集

Video4Linux(簡稱V4L)是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng),它為針對視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù),這些視頻設(shè)備包括TV卡、視頻捕捉卡和USB攝像頭等。在Linux環(huán)境下,利用V4L應(yīng)用程序接口獲取視頻圖像,可以通過調(diào)用open()、ioctl()等函數(shù),像操作普通文件一樣,進(jìn)行視頻硬件初始化、硬件屬性設(shè)置和硬件中斷調(diào)用等操作。

視頻采集程序的基本流程如圖4所示。

圖4 視頻采集流程

V4L模塊提供的主要API函數(shù)有:VIDIOCGCAP函數(shù),以數(shù)據(jù)結(jié)構(gòu)video_capability返回視頻采集設(shè)備的基本信息,包括設(shè)備名稱、設(shè)備類型、信道數(shù)、最大及最小像素高度和寬度等;VIDIOCSPICT函數(shù),使用數(shù)據(jù)結(jié)構(gòu)video_picture來獲取和設(shè)置采集圖像幀的屬性,如亮度、色調(diào)、對比度、調(diào)色板等[5];VIDIOCGMBUG函數(shù),使用數(shù)據(jù)結(jié)構(gòu)video_mbuf獲得攝像頭設(shè)備圖像存儲的相關(guān)信息;VIDIOCMCAPTURE函數(shù)用于視頻采集。以上函數(shù)都可以在videodev.h文件中查看定義。

首先必須聲明兩個(gè)頭文件sys/types.h、linux/videodev.h,接著利用open函數(shù)打開視頻設(shè)備,其中設(shè)備文件為/dev/video0。隨后,調(diào)用ioctl(fd, VIDIOCGCAP, &capability)函數(shù)的VIDIOCGCAP宏命令,獲取有關(guān)視頻設(shè)備的基本信息。接著,調(diào)用ioctl(fd, VIDIOCGPICT, &picture)函數(shù)的VIDIOCGPICT宏命令,獲取所采集圖像的屬性。至此,圖像采集的前期準(zhǔn)備工作已經(jīng)完成。接著就是關(guān)鍵的圖像采集部分。

圖像采集有兩種方法:一種是用內(nèi)存映射方式讀取圖像,一種是直接讀取視頻設(shè)備。本文采用前者,獲取圖像的關(guān)鍵代碼如下:

struct video_mmap mmap;

/*定義video_mmap型結(jié)構(gòu)變量mmap*/

/*以下為設(shè)置圖像緩沖區(qū)信息*/

mmap.frame=1;

/*采集幀數(shù)為2幀,交替出現(xiàn),以完成顯示圖像的連續(xù)性*/

mmap.height=320; /*圖像高度*/

mmap.width=480; /*圖像寬度*/

mmap.format= picture.palette; /*圖像的調(diào)色板格式*/

struct video_mbuf mbuf;

ioctl(fd, VIDIOCGMBUG ,& mbuf);

/*獲取存儲圖像的內(nèi)存大小*/

unsigned char *map = mmap(0, mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0) /*內(nèi)存映像*/

ioctl(fd, VIDIOCMCAPTURE, & mmap) /*采集圖像*/

截取圖像后還要調(diào)用函數(shù)ioctl(fd, VIDIOCSYNC, &frame)進(jìn)行同步操作,函數(shù)返回0表示圖像已經(jīng)獲取完畢。圖像存儲在以map為起始地址,長度為mbuf.size的存儲空間中。map +mbuf.offsets[frame_current]處。其中frame_current=0,即為第一幀的位置,frame_current=1,為第二幀的位置。由于DSP內(nèi)核和ARM內(nèi)核是共享DDR內(nèi)存的,所以ARM可以直接傳遞該數(shù)據(jù)地址指針給DSP內(nèi)核進(jìn)行圖像處理,無需大塊的數(shù)據(jù)搬移。

4 基于FrameBuffer的圖像顯示

Framebuffer(幀緩沖),它作為基礎(chǔ)圖形設(shè)施,是出現(xiàn)在Linux2.2內(nèi)核當(dāng)中的一種驅(qū)動(dòng)程序接口,是作為其他高級圖形或者圖形應(yīng)用程序的基本函數(shù)庫。這種接口將顯示設(shè)備抽象為幀緩沖區(qū)。用戶可以將它看成是顯示內(nèi)存的一個(gè)映像,而不必關(guān)心物理顯存的位置、換頁機(jī)制等等具體細(xì)節(jié),這些都是由Framebuffer設(shè)備驅(qū)動(dòng)來完成的。只要將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀/寫操作,而寫操作可以立即反應(yīng)在屏幕上。該設(shè)備使用特殊的設(shè)備節(jié)點(diǎn),通常位于/dev目錄,如/dev/fb*。用戶若要使用它,需要在編譯內(nèi)核時(shí)選中FrameBuffer[6]。其簡單的使用程序如下:

struct fb_fix_screeninfo finfo;

struct fb_var_screeninfo vinfo;

int fb = open("/dev/fb0", O_RDWR);

ioctl ( fb, FBIOGET_FSCREENINFO, &finfo) ;

/*獲取與Framebuffer有關(guān)的固定的信息*/

ioctl( fb, FBIOGET_VSCREENINFO, &vinfo) ;

/*獲取與Framebuffer有關(guān)的可變信息*/

從vinfo和finfo中取得顯存起始地址、分辨率、色深等信息,然后根據(jù)這些計(jì)算出需映射的顯存的大小。

screensize=vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8;

/*計(jì)算顯存所需的字節(jié)數(shù),其中xres,yres,bits_per_pixel分別為x、y軸分辨率和色深*/

char * fbp = mmap ( 0 , screensize ,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

/*通過調(diào)用mmap()用來實(shí)現(xiàn)內(nèi)存映射IO*/

由此便可以直接操作大小為screensize,起始地址為fbp的內(nèi)存空間,利用Video4Linux采集的圖像數(shù)據(jù)映射到Framebuffer的內(nèi)存區(qū)域中,便可以直接顯示到LCD上了。

5 DSP核與ARM核之間的通信

如前所述,DaVinci是DSP和ARM雙核架構(gòu)的SOC芯片,ARM核負(fù)責(zé)芯片與外界的交互,DSP核處理相關(guān)算法,它們之間的通信和交互是通過引擎(Engine)和服務(wù)器(Server)來完成的[7],其框架如圖5所示。

圖5 Codec框架

Codec Engine是連接ARM和DSP的橋梁,是介于應(yīng)用層(ARM端的應(yīng)用程序)和信號處理層(DSP端的算法)之間的軟件模塊。ARM應(yīng)用程序調(diào)用Codec Engine的VISA(Video, Image, Speech, Audio)API,以VIDENC_process(a、 b、 c)為例。首先,Codec Engine的stub(ARM端)會把參數(shù)a、b、c以及要調(diào)用DSP端process函數(shù)這個(gè)信息打包;隨后,通過Engine SPI、OSAL和DSP Link傳遞給DSP;接著,Codec Engine的skeleton(DSP端)會解開這個(gè)包,把參數(shù)a、b、c轉(zhuǎn)換成DSP端對應(yīng)的參數(shù)x、y、z(比如ARM端傳遞的是虛擬地址,而DSP只能認(rèn)物理地址);最后,DSP端的Codec server(優(yōu)先級較低,負(fù)責(zé)和ARM通信的任務(wù))會根據(jù)process這一信息創(chuàng)建一個(gè)DSP端的process(x, y, x)任務(wù),最終實(shí)現(xiàn)VIDENC_process(a、b、c)的操作。

結(jié) 語

Linux代碼完全開源,系統(tǒng)具有良好的移植性,可方便地進(jìn)行各種擴(kuò)展,利用嵌入式Linux進(jìn)行的圖像采集和顯示運(yùn)行穩(wěn)定,效果良好。本文利用達(dá)芬奇平臺實(shí)現(xiàn)了圖像采集和顯示,采集到的圖像可以給DSP內(nèi)核進(jìn)行高速處理,為后續(xù)的工作奠定了基礎(chǔ),可廣泛應(yīng)用于對

Embedded Linux Image Acquisition and Display Based on DaVinci

Zhu Xiayu, Xiong Jiulong, Wang Zhihu, Wang Xiaoming

(School of Mechatronics Engineering and Automation, National University of Defense Technology, Changsha 410073,China)

Real time and fast image processing are needed in some field such as Pattern Recognition. This paper first designs the hardware platform based on TMS329DM6446, then introduces a method of building Linux development environment, finally achieves image acquisition and display of the USB camera based on Embedded Linux. The DSP kernel can realize image processing directly with high-speed.

DaVinci SoC; Linux; image acquisition; DM6446; Video4Linux; framebuffer; USB camera

TP391.41

A

猜你喜歡
嵌入式設(shè)備系統(tǒng)
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于MPU6050簡單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發(fā)平臺
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
500kV輸變電設(shè)備運(yùn)行維護(hù)探討
原來他們都是可穿戴設(shè)備
主站蜘蛛池模板: www.99精品视频在线播放| 久久婷婷六月| 欧美国产日韩一区二区三区精品影视| 久久熟女AV| 又爽又大又光又色的午夜视频| 青青草91视频| 高清色本在线www| 中文字幕无码电影| 中文字幕久久亚洲一区| 亚洲中文字幕精品| 蜜臀AV在线播放| 在线国产91| 污污网站在线观看| 亚洲无码视频一区二区三区| 中文字幕欧美成人免费| 国产97视频在线观看| 中文字幕免费在线视频| 亚洲天堂视频网站| 国产在线观看成人91| 国内精品视频区在线2021| 依依成人精品无v国产| 久久久91人妻无码精品蜜桃HD| 毛片免费网址| 国产欧美高清| 成人一区在线| 日韩无码真实干出血视频| 色综合激情网| 99热这里只有精品免费| 一级在线毛片| 精品1区2区3区| 欧美国产综合色视频| 日韩欧美高清视频| 亚洲日韩欧美在线观看| 午夜天堂视频| 亚洲天堂在线视频| 欧美天堂在线| 麻豆AV网站免费进入| 国产福利免费视频| 久久久久久久97| 中文字幕在线看| 亚洲欧美极品| 美女黄网十八禁免费看| 黄色网页在线观看| 色偷偷一区| 呦系列视频一区二区三区| 色综合五月婷婷| 国产国产人免费视频成18| 欧美在线伊人| 天天躁狠狠躁| 亚洲swag精品自拍一区| 久久久久亚洲精品成人网 | 国产精品久线在线观看| 特级欧美视频aaaaaa| 国产性精品| 免费无码AV片在线观看国产| 免费无码一区二区| 欧美特级AAAAAA视频免费观看| 五月丁香在线视频| 幺女国产一级毛片| 亚洲最大福利视频网| 亚洲美女操| 欧美国产三级| 国产在线精彩视频二区| 国产永久在线观看| 性色生活片在线观看| 国产在线精品人成导航| 福利一区三区| 国产不卡网| 午夜国产在线观看| 国产欧美视频综合二区| 91福利免费| 亚洲欧州色色免费AV| 久久久91人妻无码精品蜜桃HD| 玖玖精品视频在线观看| 国产h视频免费观看| 国产AV毛片| 99热6这里只有精品| 色成人综合| 综合五月天网| 国产精品黑色丝袜的老师| 无码免费试看| 久久精品66|