freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于嵌入式linux與s3c2410平臺視頻采集(編輯修改稿)

2025-01-06 23:24 本頁面
 

【文章內(nèi)容簡介】 因此不能直接把 Linux 作為操作系統(tǒng),需要針對具體的應用通過配置內(nèi)核、裁減 shell 和嵌入式 C 庫對系統(tǒng)定制,使整個系統(tǒng)能夠存放到容量較小的 Flash 中。 Linux 的動態(tài)模塊加載,使 Linux 的裁減極為方便 ,高度模塊化的部件使添加非常容易。正因為 Linux 的上述優(yōu)點,在本設計實現(xiàn)的平臺上,使用的操作系統(tǒng)是對 Linux 進行了定制的ArmLinux。它啟用了 MMU(內(nèi)存管理單元),是針對支持 MMU 的處理器設計的。 開發(fā)環(huán)境的建立 絕大多數(shù) Linux 的軟件開發(fā)都以 native 方式進行,即本機開發(fā) 、調(diào)試,本機運行的方式。這種方式通常不適于嵌入式系統(tǒng)的軟件開發(fā),因為對于嵌入式系統(tǒng)的開發(fā),它沒有足夠的資源在本機(即嵌入式系統(tǒng)平臺)運行開發(fā)工具和調(diào)試工具。通常的嵌入式系統(tǒng)軟件開發(fā)采用交叉編譯調(diào)試的方式。交叉編譯調(diào)試環(huán)境建立在宿主機上,對應的開發(fā)板叫做目標板(即嵌入式 ARM2410 系統(tǒng))。 北京理工大學本科生畢業(yè)設計(論文) 7 通常宿主機和目標板上的處理器不同,宿主機通常為 Intel 處理器,而目標板如圖 11 所示為 SAMSUNG S3C2410,所以程序需要使用針對處理器特點的編譯器才能生成在相應平臺上可運行的代碼。對于嵌入式 Linux,宿主機 PC上應安裝 Linux 系統(tǒng)。之后,在宿主機上建立交叉編譯調(diào)試的開發(fā)環(huán)境,開發(fā)環(huán)境的具體建立這里不細談。本設計采用移植性很強的 C 語言在宿主機上編寫視頻采集程序,再利用交叉編譯調(diào)試工具編譯鏈接生成可執(zhí)行代碼,最后向 目標 平臺移植。 使用的系統(tǒng)平臺硬件功能框圖如圖 11 所示。該平臺采用 Samsung 公司的處理器 S3C2410。該處理器內(nèi)部集成了 ARM 公司 ARM920T 處理器核的 32位微控制器,資源豐富,帶獨立的 16KB 的指令 Cache 和 16KB 數(shù)據(jù) Cache、 LCD 控制器、 RAM 控制器、 NAND 閃存控制器、 3 路 UART、 4 路 DMA、 4 路帶 PWM 的 Timer、并行 I/O 口、 8 路 10 位 ADC、 Touch Screen 接口、 I2C接口、 I2S 接口、 2 個USB接口控制器、 2 路 SPI,主頻最高可達 203MHz。 通過以太網(wǎng)控制器芯片DM9000E 擴展了一個網(wǎng)口,另外引出了一個 HOST USB 接口。通過在 USB 接口上外接一個帶 USB 口的攝像頭,將采集到的視頻圖像數(shù)據(jù)放入輸入緩沖區(qū)中。然后,保存成文件的形式 并 運行移植到平臺上的圖像處理程序,對緩沖的圖像數(shù)據(jù)直接進行相關(guān)處理 。 最后,通過網(wǎng)絡接口將圖像發(fā)送到 Inter 上。 本設計重要 討論觸摸屏、圖象的采集及處理部分。 圖 11 系統(tǒng)平臺 北京理工大學本科生畢業(yè)設計(論文) 8 第 2 章 USB 攝像頭圖像采集和處理 由于嵌入式 Linux 具有成本低、代碼開放、移植性好的特點,其用于嵌入式系統(tǒng)的優(yōu)勢和發(fā)展?jié)摿κ遣蝗葜靡傻?。軟件部分的搭建主要依賴于以下三個部分: ① Boatloader:可以從 SAMSUNG 公司的官方網(wǎng)站獲取,經(jīng)過交叉編譯生成映像文件,然后通過 JTAG 接口將映像燒寫到目標板,實現(xiàn)引導程序的裝載。 ② Kernel:本系統(tǒng)采用 版本的內(nèi)核。 ③ 文件系統(tǒng):由于本系 統(tǒng)要進行動態(tài)的擦寫 FLASH,所以采用了支持此功能的 YAFFS 文件系統(tǒng)。 Linux 平臺的驅(qū)動一般分為字符設備、塊設備和網(wǎng)絡設備三種類型。而在Linux 下要使系統(tǒng)所掛接的外部設備正常工作,必須加載相應的驅(qū)動程序。Linux 下對于一個硬件的驅(qū)動,可以有兩種方式:一種是直接加載到系統(tǒng)的內(nèi)核當中去,另一種是以模塊方式進行加載,就是在編譯內(nèi)核的時候,同時生成可重定位的目標文件( .o 文件)。項目中所用的 S3C2410 的實驗板的 USB 主控器驅(qū)動程序模塊為 。在 Linux 下要采集視頻類數(shù) 據(jù),需要加載 Video4Linux 驅(qū)動模塊 。然后再加相應的攝像頭驅(qū)動程序。在設計開發(fā)中,我們所使用的攝像頭采用的 USB 控制器為 ov511+,所對應的驅(qū)動程序模塊為 。所以在系統(tǒng)啟動時必須要通過如下命令: insmod insmod insmod 來加載所需要的模塊。通過開源項目 spca5xx 可以得到上邊所需模塊的全部源代碼。上層軟件部分我參考了 vidcat, vgrabber, w3cam, gqcam 這幾種軟件的操作過程,重點參照了 vidcat 進行了 V4L 編程,使用了 和 中的函數(shù),經(jīng)過交叉編譯,在實驗板上實現(xiàn)了實時圖像采集的 功能 。 北京理工大學本科生畢業(yè)設計(論文) 9 在圖 21 中顯示了各個模塊之間的關(guān)系,其中從上到下的箭頭流向表示通過各個模塊啟動和配置攝像頭,從下到上的箭頭流向表示由攝像頭所采集的圖像數(shù)據(jù)經(jīng)各個模塊 顯示 到用戶指定的位置。 圖 21 圖象采集各模塊之間的關(guān)系 Linux 下采集并顯示 USB攝像頭數(shù)據(jù) Linux 下攝像頭的驅(qū)動程序是以 81 為主設備號,在編寫應用程序的時候,要通過 打開一個具有該主設備號的設備文件來建立與設備驅(qū)動程序的通信,我所使用的 Linux 沒有該文件,所以需要手工創(chuàng)建,并建立其軟連接,因為要對文件進行操作,所以要改變其訪問權(quán)限為 666。我用到的 模塊即為視頻部分的標準 Video for Linux (簡稱 V4L)。這個標準定義了一套接口,內(nèi)核、驅(qū)動、應用程序以這個接口為標準進行通信。 在 ArmLinux 系統(tǒng)平臺下運行 。在啟動后,啟用了 MMU,系統(tǒng)進入保護模式,所以應用程序就不能直接讀寫外設的 I/O 區(qū)域(包括 I/O 端口和 I/O 內(nèi)存),這時一般就要借 助于該外設的驅(qū)動來進入內(nèi)核完成這個工作。本系統(tǒng)中的視頻采集分兩步實現(xiàn):一是為 USB 口數(shù)碼攝像頭在內(nèi)核中寫入驅(qū)動,二是要再寫入上層應用程序獲取視頻數(shù)據(jù)。 北京理工大學本科生畢業(yè)設計(論文) 10 USB口數(shù)碼攝像頭的驅(qū)動實現(xiàn) 在 Linux 下,設備驅(qū)動程序可以看成 Linux 內(nèi)核與外部設備之間的接口。設備驅(qū)動程序向應用程序屏蔽了硬件實現(xiàn)了的細節(jié),使得應用程序可以像操作普通文件一樣來操作外部設備,可以使用和操作文件中相同的、標準的系統(tǒng)調(diào)用接口函數(shù)來完成對硬件設備的打開、關(guān)閉、讀寫和 I/O 控制操作,而驅(qū)動程序的主要任務也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。 本系統(tǒng)平臺使用的嵌入式ArmLinux 系統(tǒng)在內(nèi)核主要功能上與 Linux 操作系統(tǒng)沒 有 本質(zhì)區(qū)別,所以驅(qū)動程序要 實現(xiàn)的任務也一樣,只要編譯時使用的編譯器、部分頭文件和庫文件等涉及到具體處理器體系結(jié)構(gòu),這些都可以在 Makefile 文件中具體指定。 Video4Linux(簡 V4L)是 Linux 中關(guān)于視頻設備的內(nèi)核驅(qū)動,它為針對視頻設備的應用程序編程提供一系列接口函數(shù),這些視頻設備包括現(xiàn)今市場上流行的 TV 卡、視頻捕捉卡和 USB 攝像頭等。對于 USB 口攝像頭,其驅(qū)動程序中需要提供基本的 I/O 操作接口函數(shù) open、 read、 write、 close 的實現(xiàn)。對中斷的處理實現(xiàn),內(nèi)存映射功能以及對 I/O通道的控制接口函數(shù) ioctl的實現(xiàn)等,并把它們定義在 struct file_operations 中。這樣當應用程序?qū)υO備文件進行諸如 open、 close、 read、 write 等系統(tǒng)調(diào)用操作時, Linux 內(nèi)核將通過file_operations 結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。例如,當應用程序?qū)υO備文件執(zhí)行讀操作時,內(nèi)核將調(diào)用 file_operations 結(jié)構(gòu)中的 read 函數(shù)。在系統(tǒng)平臺上對 USB口數(shù)碼攝像頭驅(qū)動,首先把 USB控制器驅(qū)動模塊靜 態(tài)編譯進內(nèi)核,使平臺中支持 USB 接口,再在需要使用攝像頭采集時,使用 insmode 動態(tài)加載其驅(qū)動模塊,這樣攝像頭就可正常工作了,接著進行了下一步對視頻流的采集編程。 Video4Linux 下的攝像頭采集編程 在 USB 攝像頭被驅(qū)動后,只需要再編寫一個對視頻流采集的應用程序就可以了。根據(jù)嵌入式系統(tǒng)開發(fā)特征,先在宿主機上編寫應用程序,再使用交叉編譯器進行編譯鏈接,生成在目標平臺的可執(zhí)行文件。宿主機與目標板通信采用北京理工大學本科生畢業(yè)設計(論文) 11 打印終端的方式進行交叉調(diào)試,成功后移植到目標平臺。本設計編寫采集程序是在安裝 Linux 操作系 統(tǒng)的宿主機 PC機上進行的,下面是具體論述。 程序中定義的數(shù)據(jù)結(jié)構(gòu) struct voide_capability grab_cap。 struct voide_picture grab_pic。 struct voide_mmap grab_buf。 struct voide_mbuf grab_vm; 這些數(shù)據(jù)結(jié)構(gòu)都是由 Video4Linux 支持的,它們的用途如下: *video_capability 包含攝像頭的基本信息,例如設備名稱、支持的最大最小分辨率、信號源信息等,分別對應著結(jié)構(gòu)體中 成員變量 name[32]、maxwidth、 maxheight、 minwidth、 minheight、 channels(信號源個數(shù) )、 type等; *voide_picture 包含設備采集圖像的各種屬性,如 brightness(亮度 )、hue(色調(diào) )、 contrast(對比度 )、 whiteness(色度 )、 depth(深度 )等; *video_mmap 用于內(nèi)存映射; *voido_mbuf 利用 mmap 進行映射的幀信息,實際上是輸入到攝像頭存儲器緩沖中的幀信息,包括 size(幀的大?。?、 frames(最多支持 的幀數(shù))、offsets(每幀相對基址的偏移)。 程序中用到的主要系統(tǒng)調(diào)用函數(shù)有: open(/dev/v4l/voideo0,int flags)。 //打開設備 close(fd)。 //關(guān)閉設備 mmap(void *start,size_t length,int prot,int flags,int fd,off_t offset)。 //獲得文件的信息 munmap(void *start,size_tlength)。 //文件的起始和長度信息 ioctl(int fd,int cmd,?) 。 //控制 I/O通道 前面提到 Linux 系統(tǒng)中把設備看成設備文件,在用戶空間可以通過標準的I/O系統(tǒng)調(diào)用函數(shù)操作設備文件,從而達到與設備通信交互的目的。當然,在設備驅(qū)動中要提供對這些函數(shù)的相應支持。這里說明一下 ioctl(int fd,int 北京理工大學本科生畢業(yè)設計(論文) 12 cmd,?) 函數(shù),它在用戶程序中用來控制 I/O 通道,其中, fd 代表設備文件描述符, cmd 代表用戶程序?qū)υO備的控制命令,省略號一般是一個表示類型長度的參數(shù),也可沒有。 采集程序?qū)崿F(xiàn)過程 首先打開視頻設備 ,攝像頭在系統(tǒng)中對應的設備文件為 /dev/v4l /video0,采用系統(tǒng)調(diào)用函數(shù) grab_fd=open(/dev/v4l/video0,O_RDWR), grab_fd 是設備打開后返回的文件描述符(打開錯誤返回 1),以后的系統(tǒng)調(diào)用函數(shù)就可使用它來對設備文件進行操作了。接著,利用 ioctl( grab_fd,VIDIOCGCAP,amp。grab_cap)函數(shù)讀取 struct video_capability 中有關(guān)攝像頭的信息。該函數(shù)成功返回后,這些信息從內(nèi)核空間拷貝到用戶程序空間 grab_cap 各成員分量 中,使用 printf 函數(shù)就可得到各成員分量信息,例如printf(maxheight=%d,)獲得最大垂直分辨率的大小。不規(guī)則 的使用 ioctl(grab_fd,VIDIOCGPICT,amp。grab_pic)函數(shù)讀取攝像頭緩沖中voideo_picture 信息。在用戶空間程序中可以改變這些信息,具體方法為先給分量賦新值,再調(diào)用 VIDIOCSPICT ioctl 函數(shù),例如: =3。 if(ioct1(grab_fd,VIDIOCSPICT,amp。grab_pic)0) { perror(VIDIOCSPICT)。return 1。 }。 完成以上初始化設備工作后,就可以對視頻圖像截取了,有兩種方法:一種是 read()直接讀取;另外一種 mmap()內(nèi)存映射。 read()通過內(nèi)核緩沖區(qū)來讀取數(shù)據(jù);而 mmap()通過把設備文件映射到內(nèi)存中,繞過了內(nèi)核緩沖區(qū),最快的磁盤訪問往往還是慢于最慢的內(nèi)存訪問,所以 mmap()方式加速了 I/O 訪問。另外, mmap()系統(tǒng)調(diào)用使得進程之間通過映射同一文件實現(xiàn)共享內(nèi)存,各進程可以像訪問普通內(nèi)存一樣對文件進行訪問,訪 問時只需要使用指針而不用調(diào)用文件操作函數(shù)。因為 mmap()的以上優(yōu)點,所以在程序?qū)崿F(xiàn)中采用了內(nèi)存映射方式,即 mmap()方式。 利用 mmap()方式視頻裁取具體進行操作如下。 北京理工大學本科生畢業(yè)設計(論文) 13 1) 先使用 ioct1(grab_fd,VIDIOCGMBUF,amp。grab_vm)函數(shù)獲得攝像
點擊復制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1