www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于Linux和S3C2410的嵌入式圖象傳輸系統(tǒng)設(shè)計(jì)

1 引言

  如何更好的獲得監(jiān)控現(xiàn)場的圖象數(shù)據(jù)一直是棘手的一個問題,傳統(tǒng)的方法是采用CCD攝象機(jī)獲取現(xiàn)場的視頻信息,這種方法易于實(shí)現(xiàn),但成本較高。隨著ARM系列處理器應(yīng)用的越來越廣和基于linux的嵌入式技術(shù)的迅速發(fā)展,利用linux自身帶有的TCP/IP協(xié)議來實(shí)現(xiàn)遠(yuǎn)程監(jiān)控、圖象傳輸已成為可能。本文提出的正是一種這樣的方法,利用市場上很常見的中星微系列的USB攝象頭來得到現(xiàn)場的圖象數(shù)據(jù),利用linux內(nèi)核中的Video4Linux編程接口函數(shù)采集圖象,并把得到的圖象通過Internet傳輸?shù)缴衔粰C(jī)PC上,在PC上實(shí)現(xiàn)圖象的保存和顯示。

2 硬件系統(tǒng)設(shè)計(jì)原理

  系統(tǒng)的硬件功能框圖如圖1所示,CPU采用的是三星公司的S3C2410。該處理器內(nèi)部集成了A R M 公司A R M 9 2 0 T 處理器核的3 2 位微控制器,并帶有獨(dú)立的16KB的指令Cache 和16KB的數(shù)據(jù)Cache、L C D 控制器、R A M 控制器、NAND 閃存控制器、3路UART、4路DMA 、4路帶PWM 的Timer、并行I/O口、8路10位ADC、觸摸屏接口、I2C接口、I2S接口、2

個U S B 接口控制器、2路SPI,主頻最高可達(dá)203MHZ。在此基礎(chǔ)上,平臺還進(jìn)行了相應(yīng)的配置和擴(kuò)展,配置了4MB16位的Flash和8MB32位的SDRAM,通過以太網(wǎng)控制芯片DM9000E擴(kuò)展了一個網(wǎng)口。引出了一個UART接口,通過RS232可以和宿主機(jī)做串口通訊。并引出了一個HOST USB接口,通過在USB接口上外接一個帶USB的攝象頭將采集到的圖象數(shù)據(jù)放入輸入緩沖區(qū)中。對緩沖區(qū)的數(shù)據(jù)進(jìn)行處理,最后通過網(wǎng)口發(fā)送到Internet上,在PC上保存和接收。

  S3C2410系統(tǒng)平臺的硬件功能框圖

圖 1  S3C2410系統(tǒng)平臺的硬件功能框圖

3 軟件系統(tǒng)設(shè)計(jì)

  本文的軟件系統(tǒng)設(shè)計(jì)采用C/S(客戶機(jī)/服務(wù)器)模式,以S3C2410平臺作為服務(wù)器,以PC作為客戶端。服務(wù)器的主要任務(wù)是把得到的圖象數(shù)據(jù)發(fā)送到Internet上去,客戶端的任務(wù)主要是從Internet上接收得到的數(shù)據(jù),并把數(shù)據(jù)以保存成文件。下面分別討論兩者的具體實(shí)現(xiàn)。

3.1 服務(wù)器端軟件系統(tǒng)設(shè)計(jì)

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

  本文以PC為宿主機(jī),并帶有RedHat9.0系統(tǒng),開發(fā)環(huán)境就建立在這個平臺上,其主要包括:交叉編譯器的的選擇和安裝、NFS和TFTP服務(wù)器的配置等。

  對于嵌入式系統(tǒng)的開發(fā),由于沒有足夠的資源在目標(biāo)板上運(yùn)行開發(fā)工具和調(diào)試工具,所以通常采用交叉編譯調(diào)試的方式。開發(fā)時使用宿主機(jī)上的交叉編譯、匯編及連接工具形成可執(zhí)行的二進(jìn)制代碼。然后把可執(zhí)行文件下載到目標(biāo)機(jī)上運(yùn)行。本文采用的交叉編譯器為arm-linux-gcc,具體安裝不再贅述。為了方便調(diào)試和下載燒寫,可讓宿主機(jī)支持NFS和TFTP服務(wù)器。需要特別說明的是為了支持TFTP服務(wù)器需要在安裝RedHat9.0時須選擇完全安裝,如果沒有選擇完全安裝,需要將第三張光盤里面的tftp-server-0.32-4.i386.rpm和tftp-0.32-4.i386.rpm安裝到宿主機(jī)下。

3.1.2 攝象頭驅(qū)動程序的實(shí)現(xiàn)

  系統(tǒng)采用的是最普通的USB攝像頭,主芯片為中星微ZC0301P。這種攝象頭的一個特點(diǎn)是可以實(shí)現(xiàn)硬件JPEG編碼。其驅(qū)動程序的編寫重點(diǎn)包括下面的內(nèi)容:提供基本的I/O 操作接口函數(shù)open、read、write、close的實(shí)現(xiàn)、對中斷的處理實(shí)現(xiàn)、內(nèi)存映射功能以及對I/O 通道的控制接口函數(shù)ioctl的實(shí)現(xiàn)等,并把它們定義在struct file_operations中。這樣當(dāng)應(yīng)用程序?qū)υO(shè)備文件進(jìn)行諸如open、close、read、write等系統(tǒng)調(diào)用操作時,Linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。

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

3.1.3 linux內(nèi)核配置

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

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

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

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

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

  完成驅(qū)動程序和內(nèi)核配置后就開始應(yīng)用程序的編寫了,程序首先用交叉編譯器在宿主機(jī)上進(jìn)行編譯連接,生成的的可執(zhí)行文件通過NFS mount到目標(biāo)板上進(jìn)行調(diào)試。調(diào)試成功后再

固化到文件系統(tǒng)ramdisk中去。其實(shí)現(xiàn)主要有下面幾個步驟:

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

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

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

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

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

  6)        控制兩個線程的同步

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

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

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

  l         Video_capability 包含基本的設(shè)備信息(設(shè)備名稱、支持的最大最小分辨率、信號源信息)

  l         video_channel         關(guān)于各個信號源的屬性

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

  l         video_buffer         最底層對buffer的描述

  l         video_mmap         用于mmap

  l         pthread_mutex_t      線程互斥量
截取圖象方法有兩種:直接讀取設(shè)備文件和內(nèi)存影射的方法,本文采用后面一種。采用這種方法后,普通文件被映射到內(nèi)存地址空間,進(jìn)程可以象訪問普通文件一樣訪問內(nèi)存,這樣做的一個好處是可以提高效率。做視頻截取的兩個主要函數(shù)是:

  n         ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap))   若調(diào)用成功,開始一副圖象的截取。是否截取完畢留給VIDIOCSYNC來判斷。

  n         ioctl(vd->fd, VIDIOCSYNC, &frame)              若調(diào)用成功,表明一幀截取已完成??梢蚤_始做下一次截取

  對于網(wǎng)絡(luò)發(fā)送部分,主要是linux下的socket編程,調(diào)用的主要函數(shù)有:創(chuàng)建套接字函數(shù)socket、端口綁定函數(shù)bind、監(jiān)聽

函數(shù)listen、等到連接函數(shù)accept、數(shù)據(jù)接收函數(shù)read、數(shù)據(jù)發(fā)送函數(shù)write等。這些函數(shù)的具體定義和用法具體可以查閱相關(guān)資料 。需要說明的是為了能夠正確發(fā)送一幀數(shù)據(jù),要把定義的幀的結(jié)構(gòu)體設(shè)置為單字節(jié)對齊,具體方法是在結(jié)構(gòu)體的定義后面加上_attribute_((packed))。

  多線程編程部分用到的主要函數(shù)有:互斥量初始化函數(shù)pthread_mutex_init、互斥量鎖定函數(shù)pthread_mutex_lock、互斥量解鎖函數(shù)pthread_mutex_unlock、互斥量注銷函數(shù)pthread_ mutex _destroy、線程創(chuàng)建函數(shù)pthread _ create、線程同步函數(shù)pthread_join。此外,程序中為了能更好的實(shí)現(xiàn)兩個進(jìn)程的同步,還需要用到信號量機(jī)制的一些內(nèi)容。受篇幅所限,這些函數(shù)的具體定義和用法請參考相關(guān)資料 。

3.2 客戶機(jī)端軟件系統(tǒng)設(shè)計(jì)

  客戶端是建立在一臺PC機(jī)上,用Visual C++ 6.0設(shè)計(jì)一個基于MFC的界面作為接收端。在接收端主要完成從網(wǎng)絡(luò)緩沖區(qū)內(nèi)讀取數(shù)據(jù),并保存成文件的形式,文件以接收到數(shù)據(jù)的時間為名。圖2為圖象采集時間間隔為1秒時程序執(zhí)行的結(jié)果。圖象大小為320 象素。需要說明的是:服務(wù)器端發(fā)送的數(shù)據(jù)采用了單字節(jié)對齊,對應(yīng)的在客戶端接收的時候也要采用單字節(jié)對齊。在WINDOWS下實(shí)現(xiàn)內(nèi)存單字節(jié)對齊的方法是在定義的幀結(jié)構(gòu)體前面加上#pragma pack (1),并在其定義之后加上#pragma pack ()。

客戶端程序執(zhí)行結(jié)果

 圖2 客戶端程序執(zhí)行結(jié)果(1秒種采集一次圖象)

4 結(jié)束語

  本文提出了一套基于S3C2410平臺和linux系統(tǒng)的嵌入式圖象采集、傳輸系統(tǒng)的具體實(shí)現(xiàn),并給出了實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)結(jié)果證明:系統(tǒng)很好的完成了圖象采集和傳輸。得到的圖象清晰。服務(wù)器可以穩(wěn)定運(yùn)行,不會發(fā)生斷開或退出的現(xiàn)象。本系統(tǒng)可應(yīng)用于工業(yè)現(xiàn)場的監(jiān)控,也可以與其他系統(tǒng)如門禁系統(tǒng)相結(jié)合獲得門開或關(guān)時現(xiàn)場的重要圖象數(shù)據(jù)。

參考文獻(xiàn)

[1] Alessandro Rubini著 LISOLEG譯,linux設(shè)備驅(qū)動程序開發(fā),中國電力出版社,2002
[2] 喬曉丹張鵬,一個基于Linux操作系統(tǒng)的嵌入式網(wǎng)關(guān)的實(shí)現(xiàn),微計(jì)算機(jī)信息,2005年第21卷第7-2期
[3] 朱剛 等,Linux網(wǎng)絡(luò)編程,科學(xué)出版社,2000.
[4] 于明儉 等,linux程序設(shè)計(jì)權(quán)威指南 機(jī)械工業(yè)出版社 2001.
[5] http://mxhaard.free.fr/embedded.html

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

經(jīng)過幾十年發(fā)展,嵌入式技術(shù)已經(jīng)用在了我們生活中的方方面面,但是嵌入式始終都帶有小眾,專業(yè)性強(qiáng)的屬性,讓很多非嵌入式領(lǐng)域的同學(xué)望而卻步。近十幾年的發(fā)展,物聯(lián)網(wǎng)覆蓋了越來越多領(lǐng)域,包括了家居,商業(yè),工業(yè),農(nóng)業(yè)等領(lǐng)域,不僅吸引...

關(guān)鍵字: 嵌入式 物聯(lián)網(wǎng) 技術(shù)

隨著IT技術(shù)飛速發(fā)展,互聯(lián)網(wǎng)已經(jīng)進(jìn)入了“物聯(lián)網(wǎng)”時代。物聯(lián)網(wǎng)中需要的大量設(shè)備不在依賴人與人之間的交互產(chǎn)生聯(lián)系,更多通過協(xié)議、通信、程序設(shè)計(jì)等方式連接到一處。即 “物聯(lián)網(wǎng)”的目的則是讓所有的物品都具有計(jì)算機(jī)的智能但并不以通...

關(guān)鍵字: 嵌入式 物聯(lián)網(wǎng) 計(jì)算機(jī)

最近看到APP上,給我推送了很多類似的回答,借此機(jī)會,也想著重新審視一下自己的學(xué)習(xí)歷程,以及結(jié)合自身和大牛,分享一些學(xué)習(xí)經(jīng)驗(yàn),希望對大家有所啟發(fā)和幫助。

關(guān)鍵字: APP 嵌入式 C語言

大家好,我是鲏。認(rèn)識我的朋友都知道,我是一個實(shí)踐派,相比研究枯燥的理論知識,我更喜歡做自己想做的項(xiàng)目,用技術(shù)來實(shí)現(xiàn)自己的想法的感覺真的很棒。所以從大學(xué)期間一直到現(xiàn)在,除了工作中的項(xiàng)目外,我依然保持著自己做項(xiàng)目的習(xí)慣,有堅(jiān)...

關(guān)鍵字: 系統(tǒng)設(shè)計(jì) 技術(shù)選型 需求分析

萬物智聯(lián)時代,嵌入式技術(shù)及其應(yīng)用的形態(tài)將更加豐富和多元,同時也將日益呈現(xiàn)深度物理融合、混合架構(gòu)共存、群體智能協(xié)同、網(wǎng)絡(luò)安全攸關(guān)等諸多新的計(jì)算特性。顯然,經(jīng)典的嵌入式系統(tǒng)體系結(jié)構(gòu)、軟硬件技術(shù)和開發(fā)方法都已很難應(yīng)對新趨勢下的...

關(guān)鍵字: 嵌入式 物聯(lián)網(wǎng) 計(jì)算機(jī)

物聯(lián)網(wǎng)是新一代信息技術(shù)的重要組成部分,是互聯(lián)網(wǎng)與嵌入式系統(tǒng)發(fā)展到高級階段的融合。通用計(jì)算機(jī)經(jīng)歷了從智慧平臺到互聯(lián)網(wǎng)的獨(dú)立發(fā)展道路;嵌入式系統(tǒng)則經(jīng)歷了智慧物聯(lián)到局域智慧物聯(lián)的獨(dú)立發(fā)展道路。

關(guān)鍵字: 嵌入式 物聯(lián)網(wǎng) 計(jì)算機(jī)

今天,小編將在這篇文章中為大家?guī)砉た刂靼宓挠嘘P(guān)報(bào)道,通過閱讀這篇文章,大家可以對工控主板具備清晰的認(rèn)識,主要內(nèi)容如下。

關(guān)鍵字: 工控主板 嵌入式 主板

隨著工業(yè)4.0、醫(yī)療電子、智能家居、物流管理和電力控制等快速的發(fā)展和推進(jìn),嵌入式系統(tǒng)利用自身的技術(shù)特點(diǎn),逐漸成為眾多行業(yè)的標(biāo)配產(chǎn)品。嵌入式系統(tǒng)具有可控制、可編程、成本低等,它在未來的工業(yè)和生活中有著廣闊的應(yīng)用前景。在現(xiàn)在...

關(guān)鍵字: 嵌入式 物聯(lián)網(wǎng) 人工智能

長久來看,嵌入式只會越來越火,隨著人工智能時代的發(fā)展,嵌入式必定又將迎來一次浪潮和技術(shù)的巨大變革。人工智能越是想要表達(dá)智能水平,就越要依靠嵌入式技術(shù),嵌入式技術(shù)將朝著自動化控制和人機(jī)交互發(fā)展。嵌入式因其體積小、可靠性高、...

關(guān)鍵字: 嵌入式 物聯(lián)網(wǎng) 人工智能

嵌入式軟件技術(shù)到目前為止己經(jīng)在很多領(lǐng)域起到了中流砥柱的作用,例如在電子消費(fèi)、移動通訊方面,這種技術(shù)為我國的很多行業(yè)提供了更多的可能性。未來,嵌入式軟件技術(shù)會為人類做出更大的貢獻(xiàn)。伴隨著計(jì)算機(jī)技術(shù)與電子技術(shù)的成熟發(fā)展,電子...

關(guān)鍵字: 嵌入式 軟件 人工智能

嵌入式教程

6897 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉