新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于S3C2410的嵌入式圖象傳輸系統(tǒng)設(shè)計(jì)

基于S3C2410的嵌入式圖象傳輸系統(tǒng)設(shè)計(jì)

作者: 時(shí)間:2012-05-17 來(lái)源:網(wǎng)絡(luò) 收藏

當(dāng)然,現(xiàn)在網(wǎng)上已經(jīng)有了這種攝象頭的通用驅(qū)動(dòng),可以從相關(guān)網(wǎng)站下載usb-2.4.31.patch.gz,然后將這個(gè)補(bǔ)丁打到內(nèi)核對(duì)應(yīng)的位置即可。但是對(duì)有些內(nèi)核版本的linux系統(tǒng),在打補(bǔ)丁時(shí),會(huì)產(chǎn)生 Config.in.rej和Makefile.rej。這時(shí)只需要將這兩個(gè)文件中修改失敗的部分手動(dòng)添加到對(duì)應(yīng)的Config.in和Makefile 中去就可以了。

3.1.3 linux內(nèi)核配置

對(duì)于已經(jīng)做過(guò)基本移植的linux在配置內(nèi)核的時(shí)有以下幾個(gè)方面是值得注意的:

1)因?yàn)橐玫絻?nèi)核中的編程接口函數(shù),所以在配置內(nèi)核時(shí)首先必須選中Video for Linux并且最好是直接編譯進(jìn)內(nèi)核而不用編譯成模塊的形式再加載;

2)要選中USB Support、OHCI、UHCI。并在USB Support下的USB Multimedia devices中選中對(duì)應(yīng)的攝象頭,對(duì)本系統(tǒng)來(lái)說(shuō),選擇USB SPCA5XX Sunplus Vimicro Sonix Cameras,并把它配置成Module。

3)配置完內(nèi)核后做make dep, make zImage, make module。則在對(duì)應(yīng)的spca5xx目錄下會(huì)生成spc5xx..o,可以把spc5xx..o通過(guò)NFS mount到目標(biāo)板上或者加到主文件系統(tǒng)ramdisk中的某個(gè)目錄下。然后在目標(biāo)板上做 insmod spca5xx.o就會(huì)找到攝象頭。

3.1.4 服務(wù)器端應(yīng)用程序的編寫(xiě)

完成驅(qū)動(dòng)程序和內(nèi)核配置后就開(kāi)始應(yīng)用程序的編寫(xiě)了,程序首先用交叉編譯器在宿主機(jī)上進(jìn)行編譯連接,生成的的可執(zhí)行文件通過(guò)NFS mount到目標(biāo)板上進(jìn)行調(diào)試。調(diào)試成功后再固化到文件系統(tǒng)ramdisk中去。其實(shí)現(xiàn)主要有下面幾個(gè)步驟:

1)初始化設(shè)備基本信息

2)打開(kāi)設(shè)備文件,讀取設(shè)備基本信息和信號(hào)源基本信息,并設(shè)置video_mmap并為定義的幀結(jié)構(gòu)分配緩沖區(qū)并初始化線(xiàn)程互斥量

3)創(chuàng)建圖象獲取的線(xiàn)程。該線(xiàn)程函數(shù)實(shí)現(xiàn)以?xún)?nèi)存影射的方式讀取設(shè)備中的數(shù)據(jù),鎖定線(xiàn)程互斥量,接著對(duì)幀結(jié)構(gòu)的各個(gè)元素賦值。并解鎖互斥量。使該過(guò)程做一個(gè)死循環(huán)。

4)創(chuàng)建一個(gè)基于連接的socket,并綁定到一個(gè)端口上,開(kāi)始在該端口上偵聽(tīng)。

5)當(dāng)有連接到來(lái)時(shí),創(chuàng)建一個(gè)圖象發(fā)送的線(xiàn)程。該線(xiàn)程函數(shù)實(shí)現(xiàn):如果確定讀取了客戶(hù)端的數(shù)據(jù),則把緩沖區(qū)內(nèi)的一幀數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。讓這個(gè)過(guò)程也為死循環(huán)。

6)控制兩個(gè)線(xiàn)程的同步

7)如果程序退出,則關(guān)閉套接字,釋放分配的資源。

可以看出,程序的內(nèi)容主要有三個(gè)部分:部分,圖象的網(wǎng)絡(luò)發(fā)送部分和程序的多線(xiàn)程控制部分。下面分別介紹一下這三個(gè)部分主要涉及的內(nèi)容。

部分,定義了一個(gè)數(shù)據(jù)結(jié)構(gòu),它的主要成員變量有:

Video_capability 包含基本的設(shè)備信息(設(shè)備名稱(chēng)、支持的最大最小分辨率、信號(hào)源信息)

video_channel 關(guān)于各個(gè)信號(hào)源的屬性

video_mbuf 利用mmap進(jìn)行映射的幀的信息

video_buffer 最底層對(duì)buffer的描述

video_mmap 用于mmap

pthread_mutex_t 線(xiàn)程互斥量



評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉