資料介紹
1 引言
如何更好的獲得監控現場的圖象數據一直是棘手的一個問題,傳統的方法是采用CCD攝象機獲取現場的視頻信息,這種方法易于實現,但成本較高。隨著ARM系列處理器應用的越來越廣和基于linux的嵌入式技術的迅速發展,利用linux自身帶有的TCP/IP協議來實現遠程監控、圖象傳輸已成為可能。本文提出的正是一種這樣的方法,利用市場上很常見的中星微系列的USB攝象頭來得到現場的圖象數據,利用linux內核中的Video4Linux編程接口函數采集圖象,并把得到的圖象通過Internet傳輸到上位機PC上,在PC上實現圖象的保存和顯示。
2 硬件系統設計原理
系統的硬件功能框圖如圖1所示,CPU采用的是三星公司的S3C2410。該處理器內部集成了A R M 公司A R M 9 2 0 T 處理器核的3 2 位微控制器,并帶有獨立的16KB的指令Cache 和16KB的數據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,主頻最高可達203MHZ。在此基礎上,平臺還進行了相應的配置和擴展,配置了4MB16位的Flash和8MB32位的SDRAM,通過以太網控制芯片DM9000E擴展了一個網口。引出了一個UART接口,通過RS232可以和宿主機做串口通訊。并引出了一個HOST USB接口,通過在USB接口上外接一個帶USB的攝象頭將采集到的圖象數據放入輸入緩沖區中。對緩沖區的數據進行處理,最后通過網口發送到Internet上,在PC上保存和接收。
圖 1 S3C2410系統平臺的硬件功能框圖
3 軟件系統設計
本文的軟件系統設計采用C/S(客戶機/服務器)模式,以S3C2410平臺作為服務器,以PC作為客戶端。服務器的主要任務是把得到的圖象數據發送到Internet上去,客戶端的任務主要是從Internet上接收得到的數據,并把數據以保存成文件。下面分別討論兩者的具體實現。
3.1 服務器端軟件系統設計
3.1.1 建立宿主機開發環境
本文以PC為宿主機,并帶有RedHat9.0系統,開發環境就建立在這個平臺上,其主要包括:交叉編譯器的的選擇和安裝、NFS和TFTP服務器的配置等。
對于嵌入式系統的開發,由于沒有足夠的資源在目標板上運行開發工具和調試工具,所以通常采用交叉編譯調試的方式。開發時使用宿主機上的交叉編譯、匯編及連接工具形成可執行的二進制代碼。然后把可執行文件下載到目標機上運行。本文采用的交叉編譯器為arm-linux-gcc,具體安裝不再贅述。為了方便調試和下載燒寫,可讓宿主機支持NFS和TFTP服務器。需要特別說明的是為了支持TFTP服務器需要在安裝RedHat9.0時須選擇完全安裝,如果沒有選擇完全安裝,需要將第三張光盤里面的tftp-server-0.32-4.i386.rpm和tftp-0.32-4.i386.rpm安裝到宿主機下。
3.1.2 攝象頭驅動程序的實現
系統采用的是最普通的USB攝像頭,主芯片為中星微ZC0301P。這種攝象頭的一個特點是可以實現硬件JPEG編碼。其驅動程序的編寫重點包括下面的內容:提供基本的I/O 操作接口函數open、read、write、close的實現、對中斷的處理實現、內存映射功能以及對I/O 通道的控制接口函數ioctl的實現等,并把它們定義在struct file_operations中。這樣當應用程序對設備文件進行諸如open、close、read、write等系統調用操作時,Linux內核將通過file_operations結構訪問驅動程序提供的函數。
當然,現在網上已經有了這種攝象頭的通用驅動,可以從相關網站 下載usb-2.4.31.patch.gz,然后將這個補丁打到內核對應的位置即可。但是對有些內核版本的linux系統,在打補丁時,會產生Config.in.rej和Makefile.rej。這時只需要將這兩個文件中修改失敗的部分手動添加到對應的Config.in和Makefile中去就可以了。
3.1.3 linux內核配置
對于已經做過基本移植的linux在配置內核的時有以下幾個方面是值得注意的:
1) 因為要用到內核中的Video4Linux編程接口函數,所以在配置內核時首先必須選中Video for Linux并且最好是直接編譯進內核而不用編譯成模塊的形式再加載;
2) 要選中USB Support、OHCI、UHCI。并在USB Support下的USB Multimedia devices 中選中對應的攝象頭,對本系統來說,選擇USB SPCA5XX Sunplus Vimicro Sonix Cameras,并把它配置成Module。
3) 配置完內核后做make dep, make zImage, make module。則在對應的spca5xx目錄下會生成spc5xx..o,可以把spc5xx..o通過NFS mount到目標板上或者加到主文件系統ramdisk中的某個目錄下。然后在目標板上做 insmod spca5xx.o就會找到攝象頭。
3.1.4 服務器端應用程序的編寫
完成驅動程序和內核配置后就開始應用程序的編寫了,程序首先用交叉編譯器在宿主機上進行編譯連接,生成的的可執行文件通過NFS mount到目標板上進行調試。調試成功后再固化到文件系統ramdisk中去。其實現主要有下面幾個步驟:
1) 初始化設備基本信息
2) 打開設備文件,讀取設備基本信息和信號源基本信息,并設置video_mmap并為定義的幀結構分配緩沖區并初始化線程互斥量
3) 創建圖象獲取的線程。該線程函數實現以內存影射的方式讀取設備中的數據,鎖定線程互斥量,接著對幀結構的各個元素賦值。并解鎖互斥量。使該過程做一個死循環。
4) 創建一個基于連接的socket,并綁定到一個端口上,開始在該端口上偵聽。
5) 當有連接到來時,創建一個圖象發送的線程。該線程函數實現:如果確定讀取了客戶端的數據,則把緩沖區內的一幀數據發送到網絡上。讓這個過程也為死循環。
6) 控制兩個線程的同步
7) 如果程序退出,則關閉套接字,釋放分配的資源。
可以看出,程序的內容主要有三個部分:圖象采集部分,圖象的網絡發送部分和程序的多線程控制部分。下面分別介紹一下這三個部分主要涉及的內容。
在圖象采集部分,定義了一個數據結構,它的主要成員變量有:
l Video_capability 包含基本的設備信息(設備名稱、支持的最大最小分辨率、信號源信息)
l video_channel 關于各個信號源的屬性
l video_mbuf 利用mmap進行映射的幀的信息
l video_buffer 最底層對buffer的描述
l video_mmap 用于mmap
l pthread_mutex_t 線程互斥量
截取圖象方法有兩種:直接讀取設備文件和內存影射的方法,本文采用后面一種。采用這種方法后,普通文件被映射到內存地址空間,進程可以象訪問普通文件一樣訪問內存,這樣做的一個好處是可以提高效率。做視頻截取的兩個主要函數是:
n ioctl(vd-》fd, VIDIOCMCAPTURE, &(vd-》mmap)) 若調用成功,開始一副圖象的截取。是否截取完畢留給VIDIOCSYNC來判斷。
n ioctl(vd-》fd, VIDIOCSYNC, &frame) 若調用成功,表明一幀截取已完成。可以開始做下一次截取
對于網絡發送部分,主要是linux下的socket編程,調用的主要函數有:創建套接字函數socket、端口綁定函數bind、監聽
函數listen、等到連接函數accept、數據接收函數read、數據發送函數write等。這些函數的具體定義和用法具體可以查閱相關資料 。需要說明的是為了能夠正確發送一幀數據,要把定義的幀的結構體設置為單字節對齊,具體方法是在結構體的定義后面加上_attribute_((packed))。
多線程編程部分用到的主要函數有:互斥量初始化函數pthread_mutex_init、互斥量鎖定函數pthread_mutex_lock、互斥量解鎖函數pthread_mutex_unlock、互斥量注銷函數pthread_ mutex _destroy、線程創建函數pthread _ create、線程同步函數pthread_join。此外,程序中為了能更好的實現兩個進程的同步,還需要用到信號量機制的一些內容。受篇幅所限,這些函數的具體定義和用法請參考相關資料 。
3.2 客戶機端軟件系統設計
客戶端是建立在一臺PC機上,用Visual C++ 6.0設計一個基于MFC的界面作為接收端。在接收端主要完成從網絡緩沖區內讀取數據,并保存成文件的形式,文件以接收到數據的時間為名。圖2為圖象采集時間間隔為1秒時程序執行的結果。圖象大小為320 象素。需要說明的是:服務器端發送的數據采用了單字節對齊,對應的在客戶端接收的時候也要采用單字節對齊。在WINDOWS下實現內存單字節對齊的方法是在定義的幀結構體前面加上#pragma pack (1),并在其定義之后加上#pragma pack ()。
如何更好的獲得監控現場的圖象數據一直是棘手的一個問題,傳統的方法是采用CCD攝象機獲取現場的視頻信息,這種方法易于實現,但成本較高。隨著ARM系列處理器應用的越來越廣和基于linux的嵌入式技術的迅速發展,利用linux自身帶有的TCP/IP協議來實現遠程監控、圖象傳輸已成為可能。本文提出的正是一種這樣的方法,利用市場上很常見的中星微系列的USB攝象頭來得到現場的圖象數據,利用linux內核中的Video4Linux編程接口函數采集圖象,并把得到的圖象通過Internet傳輸到上位機PC上,在PC上實現圖象的保存和顯示。
2 硬件系統設計原理
系統的硬件功能框圖如圖1所示,CPU采用的是三星公司的S3C2410。該處理器內部集成了A R M 公司A R M 9 2 0 T 處理器核的3 2 位微控制器,并帶有獨立的16KB的指令Cache 和16KB的數據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,主頻最高可達203MHZ。在此基礎上,平臺還進行了相應的配置和擴展,配置了4MB16位的Flash和8MB32位的SDRAM,通過以太網控制芯片DM9000E擴展了一個網口。引出了一個UART接口,通過RS232可以和宿主機做串口通訊。并引出了一個HOST USB接口,通過在USB接口上外接一個帶USB的攝象頭將采集到的圖象數據放入輸入緩沖區中。對緩沖區的數據進行處理,最后通過網口發送到Internet上,在PC上保存和接收。
圖 1 S3C2410系統平臺的硬件功能框圖
3 軟件系統設計
本文的軟件系統設計采用C/S(客戶機/服務器)模式,以S3C2410平臺作為服務器,以PC作為客戶端。服務器的主要任務是把得到的圖象數據發送到Internet上去,客戶端的任務主要是從Internet上接收得到的數據,并把數據以保存成文件。下面分別討論兩者的具體實現。
3.1 服務器端軟件系統設計
3.1.1 建立宿主機開發環境
本文以PC為宿主機,并帶有RedHat9.0系統,開發環境就建立在這個平臺上,其主要包括:交叉編譯器的的選擇和安裝、NFS和TFTP服務器的配置等。
對于嵌入式系統的開發,由于沒有足夠的資源在目標板上運行開發工具和調試工具,所以通常采用交叉編譯調試的方式。開發時使用宿主機上的交叉編譯、匯編及連接工具形成可執行的二進制代碼。然后把可執行文件下載到目標機上運行。本文采用的交叉編譯器為arm-linux-gcc,具體安裝不再贅述。為了方便調試和下載燒寫,可讓宿主機支持NFS和TFTP服務器。需要特別說明的是為了支持TFTP服務器需要在安裝RedHat9.0時須選擇完全安裝,如果沒有選擇完全安裝,需要將第三張光盤里面的tftp-server-0.32-4.i386.rpm和tftp-0.32-4.i386.rpm安裝到宿主機下。
3.1.2 攝象頭驅動程序的實現
系統采用的是最普通的USB攝像頭,主芯片為中星微ZC0301P。這種攝象頭的一個特點是可以實現硬件JPEG編碼。其驅動程序的編寫重點包括下面的內容:提供基本的I/O 操作接口函數open、read、write、close的實現、對中斷的處理實現、內存映射功能以及對I/O 通道的控制接口函數ioctl的實現等,并把它們定義在struct file_operations中。這樣當應用程序對設備文件進行諸如open、close、read、write等系統調用操作時,Linux內核將通過file_operations結構訪問驅動程序提供的函數。
當然,現在網上已經有了這種攝象頭的通用驅動,可以從相關網站 下載usb-2.4.31.patch.gz,然后將這個補丁打到內核對應的位置即可。但是對有些內核版本的linux系統,在打補丁時,會產生Config.in.rej和Makefile.rej。這時只需要將這兩個文件中修改失敗的部分手動添加到對應的Config.in和Makefile中去就可以了。
3.1.3 linux內核配置
對于已經做過基本移植的linux在配置內核的時有以下幾個方面是值得注意的:
1) 因為要用到內核中的Video4Linux編程接口函數,所以在配置內核時首先必須選中Video for Linux并且最好是直接編譯進內核而不用編譯成模塊的形式再加載;
2) 要選中USB Support、OHCI、UHCI。并在USB Support下的USB Multimedia devices 中選中對應的攝象頭,對本系統來說,選擇USB SPCA5XX Sunplus Vimicro Sonix Cameras,并把它配置成Module。
3) 配置完內核后做make dep, make zImage, make module。則在對應的spca5xx目錄下會生成spc5xx..o,可以把spc5xx..o通過NFS mount到目標板上或者加到主文件系統ramdisk中的某個目錄下。然后在目標板上做 insmod spca5xx.o就會找到攝象頭。
3.1.4 服務器端應用程序的編寫
完成驅動程序和內核配置后就開始應用程序的編寫了,程序首先用交叉編譯器在宿主機上進行編譯連接,生成的的可執行文件通過NFS mount到目標板上進行調試。調試成功后再固化到文件系統ramdisk中去。其實現主要有下面幾個步驟:
1) 初始化設備基本信息
2) 打開設備文件,讀取設備基本信息和信號源基本信息,并設置video_mmap并為定義的幀結構分配緩沖區并初始化線程互斥量
3) 創建圖象獲取的線程。該線程函數實現以內存影射的方式讀取設備中的數據,鎖定線程互斥量,接著對幀結構的各個元素賦值。并解鎖互斥量。使該過程做一個死循環。
4) 創建一個基于連接的socket,并綁定到一個端口上,開始在該端口上偵聽。
5) 當有連接到來時,創建一個圖象發送的線程。該線程函數實現:如果確定讀取了客戶端的數據,則把緩沖區內的一幀數據發送到網絡上。讓這個過程也為死循環。
6) 控制兩個線程的同步
7) 如果程序退出,則關閉套接字,釋放分配的資源。
可以看出,程序的內容主要有三個部分:圖象采集部分,圖象的網絡發送部分和程序的多線程控制部分。下面分別介紹一下這三個部分主要涉及的內容。
在圖象采集部分,定義了一個數據結構,它的主要成員變量有:
l Video_capability 包含基本的設備信息(設備名稱、支持的最大最小分辨率、信號源信息)
l video_channel 關于各個信號源的屬性
l video_mbuf 利用mmap進行映射的幀的信息
l video_buffer 最底層對buffer的描述
l video_mmap 用于mmap
l pthread_mutex_t 線程互斥量
截取圖象方法有兩種:直接讀取設備文件和內存影射的方法,本文采用后面一種。采用這種方法后,普通文件被映射到內存地址空間,進程可以象訪問普通文件一樣訪問內存,這樣做的一個好處是可以提高效率。做視頻截取的兩個主要函數是:
n ioctl(vd-》fd, VIDIOCMCAPTURE, &(vd-》mmap)) 若調用成功,開始一副圖象的截取。是否截取完畢留給VIDIOCSYNC來判斷。
n ioctl(vd-》fd, VIDIOCSYNC, &frame) 若調用成功,表明一幀截取已完成。可以開始做下一次截取
對于網絡發送部分,主要是linux下的socket編程,調用的主要函數有:創建套接字函數socket、端口綁定函數bind、監聽
函數listen、等到連接函數accept、數據接收函數read、數據發送函數write等。這些函數的具體定義和用法具體可以查閱相關資料 。需要說明的是為了能夠正確發送一幀數據,要把定義的幀的結構體設置為單字節對齊,具體方法是在結構體的定義后面加上_attribute_((packed))。
多線程編程部分用到的主要函數有:互斥量初始化函數pthread_mutex_init、互斥量鎖定函數pthread_mutex_lock、互斥量解鎖函數pthread_mutex_unlock、互斥量注銷函數pthread_ mutex _destroy、線程創建函數pthread _ create、線程同步函數pthread_join。此外,程序中為了能更好的實現兩個進程的同步,還需要用到信號量機制的一些內容。受篇幅所限,這些函數的具體定義和用法請參考相關資料 。
3.2 客戶機端軟件系統設計
客戶端是建立在一臺PC機上,用Visual C++ 6.0設計一個基于MFC的界面作為接收端。在接收端主要完成從網絡緩沖區內讀取數據,并保存成文件的形式,文件以接收到數據的時間為名。圖2為圖象采集時間間隔為1秒時程序執行的結果。圖象大小為320 象素。需要說明的是:服務器端發送的數據采用了單字節對齊,對應的在客戶端接收的時候也要采用單字節對齊。在WINDOWS下實現內存單字節對齊的方法是在定義的幀結構體前面加上#pragma pack (1),并在其定義之后加上#pragma pack ()。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- S3C2410嵌入式系統多串口通訊設計
- 基于S3C2410的嵌入式觸摸屏設計
- 使用S3C2410芯片設計最小嵌入式系統的設計資料詳細說明 29次下載
- 基于S3C2410和Windows CEnet的智能移動終端設計 0次下載
- ARM9嵌入式系統設計課件-基于S3C2410與Linux-pp 5次下載
- 基于S3C2410嵌入式車載定位系統設計
- 基于S3C2410的嵌入式串口通信設計
- 基于S3C2410嵌入式系統的網絡接口設計
- Linux實時操作系統在s3c2410的移植
- 基于S3C2410嵌入式無線監控系統的設計
- 嵌入式Linux2.6在S3C2410上的移植技術探析
- 基于嵌入式Linux與S3C2410平臺的視頻采集
- 基于嵌入式Linux與S3C2410平臺的視頻采集
- 基于S3C2410的Linux移植代碼
- s3c2410開發板原理圖,s3c2410原理圖pcb
- 基于S3C2410處理器實現3G無線網卡接入無線網絡功能的設計 2434次閱讀
- 基于S3C2410嵌入式處理器實現CAN/Ethernet網關的設計 2663次閱讀
- 基于S3C2410微處理器和Linux實現嵌入式網關的設計 2490次閱讀
- 基于S3C2410處理器實現USB網卡無線網絡功能的實現 1853次閱讀
- 基于S3C2410處理器實現便攜式無線心電監護系統的設計 3359次閱讀
- 基于S3C2410A嵌入式處理器實現風力發電監控系統的應用設計 2642次閱讀
- 基于Linux操作系統和S3C2410微處理器實現GPS實時導航系統的設計 1003次閱讀
- 基于S3C2410處理器對Windows CE 5.0操作系統實現BSP移植 977次閱讀
- 如何制作一個基于linux 2.6.19內核的小型Linux操作系統? 4627次閱讀
- 嵌入式Linux系統移植的實現 2210次閱讀
- 基于S3C2410嵌入式設備的U-Boot移植流程教程 2127次閱讀
- 一種S3C2410路由器的整體結構及工作原理 2405次閱讀
- 基于S3C2410的CAN總線通信設計與開發 2702次閱讀
- 基于S3C2410的嵌入式視頻采集系統設計 1701次閱讀
- 基于ARM的嵌入式無線視頻采集系統設計 1809次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多