基于嵌入式Linux與S3C2410平臺的視頻采集
發布時間:2007/4/23 0:00:00 訪問次數:626
關鍵詞:嵌入式Linux Video4Linux S3C2410 內存映射
隨著多媒體技術、網絡技術的迅猛發展和后PC機時代的到來,利用嵌入式系統實現遠程視頻監控、可視電話和視頻會議等應用已成為可能。為了實現這些應用,實時獲得視頻數據是一個重要環節。針對這一點,本文在基于嵌入式Linux系統平臺上,利用Video4Linux內核應用編程接口函數,實現了單幀圖像和視頻連續幀的采集,并保存成文件的形式供進一步視頻處理和網絡傳輸用。
1 系統平臺上的硬件系統
本文使用的系統平臺硬件功能框圖如圖1所示。該平臺采用Samsung公司的處理器S3C2410。該處理器內部集成了ARM公司ARM920T處理器核的32位微控制器,資源豐富,帶獨立的16KB的指令Cache和16KB數據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。在處理器豐富資源的基礎上,還進行了相關的配置和擴展,平臺配置了16MB 16位的Flash和64MB 32位的SDRAM。通過以太網控制器芯片DM9000E擴展了一個網口,另外引出了一個HOST USB接口。通過在USB接口上外接一個帶USB口的攝像頭,將采集到的視頻圖像數據放入輸入緩沖區中。然后,或者保存成文件的形式,或者運行移植到平臺上的圖像處理程序,對緩沖的圖像數據直接進行相關處理,再保存并打成UDP包。最后,通過網絡接口將圖像發送到Internet上。本文只討論其中視頻采集部分的具體實現。
2 系統平臺中的軟件系統
2.1 Linux與嵌入式系統
Linux具有內核小,效率高,源代碼開放,內核直接提供網絡支持等優點。但嵌入式系統的硬件資源畢竟有限,因此不能直接把Linux作為操作系統,需要針對具體的應用通過配置內核、裁減shell和嵌入式C庫對系統定制,使整個系統能夠存放到容量較小的Flash中。Linux的動態模塊加載,使Linux的裁減極為方便 ,高度模塊化的部件使添加非常容易。正因為Linux的上述優點,在本文實現的平臺上,使用的操作系統是對Linux進行了定制的armlinux。它啟用了MMU(內存管理單元),是針對支持MMU的處理器設計的。
2.2 開發環境的建立
絕大多數Linux的軟件開發都以native方式進行,即本機開發、調試,本機運行的方式。這種方式通常不適于嵌入式系統的軟件開發,因為對于嵌入式系統的開發,它沒有足夠的資源在本機(即嵌入式系統平臺)運行開發工具和調試工具。通常的嵌入式系統軟件開發采用交叉編譯調試的方式。交叉編譯調試環境建立在宿主機(即圖1所示通過串口連接的宿主機PC)上,對應的開發板叫做目標板(即嵌入式ARM2410系統)。
通常宿主機和目標板上的處理器不同,宿主機通常為Intel處理器,而目標板如圖1所示為SAMSUNG S3C2410,所以程序需要使用針對處理器特點的編譯器才能生成在相應平臺上可運行的代碼。GNU編譯器提供這樣的功能,在編譯時,可以選擇開發所需的宿主機和目標機,從而建立開發環境。在進行嵌入式開發前的第一步工作就是把一臺PC機作為宿主機開發機,并在其上安裝指定的操作系統。對于嵌入式Linux,宿主機PC上應安裝Linux系統。之后,在宿主機上建立交叉編譯調試的開發環境,開發環境的具體建立這里不細談。本文采用移植性很強的C語言在宿主機上編寫視頻采集程序,再利用交叉編譯調試工具編譯鏈接生成可執行代碼,最后向目標平臺移植。
3 視頻采集的具體實現
上面提到系統平臺上運行的是armlinux。在啟動后,啟用了MMU,系統進入保護模式,所以應用程序就不能直接讀寫外設的I/O區域(包括I/O端口和I/O內存),這時一般就要借助于該外設的驅動來進入內核完成這個工作。本系統中的視頻采集分兩步實現:一是為USB口數碼攝像頭在內核中寫入驅動,二是要再寫入上層應用程序獲取視頻數據。本文著重討論后一步。
3.1 USB口數碼攝像頭的驅動實現
關鍵詞:嵌入式Linux Video4Linux S3C2410 內存映射
隨著多媒體技術、網絡技術的迅猛發展和后PC機時代的到來,利用嵌入式系統實現遠程視頻監控、可視電話和視頻會議等應用已成為可能。為了實現這些應用,實時獲得視頻數據是一個重要環節。針對這一點,本文在基于嵌入式Linux系統平臺上,利用Video4Linux內核應用編程接口函數,實現了單幀圖像和視頻連續幀的采集,并保存成文件的形式供進一步視頻處理和網絡傳輸用。
1 系統平臺上的硬件系統
本文使用的系統平臺硬件功能框圖如圖1所示。該平臺采用Samsung公司的處理器S3C2410。該處理器內部集成了ARM公司ARM920T處理器核的32位微控制器,資源豐富,帶獨立的16KB的指令Cache和16KB數據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。在處理器豐富資源的基礎上,還進行了相關的配置和擴展,平臺配置了16MB 16位的Flash和64MB 32位的SDRAM。通過以太網控制器芯片DM9000E擴展了一個網口,另外引出了一個HOST USB接口。通過在USB接口上外接一個帶USB口的攝像頭,將采集到的視頻圖像數據放入輸入緩沖區中。然后,或者保存成文件的形式,或者運行移植到平臺上的圖像處理程序,對緩沖的圖像數據直接進行相關處理,再保存并打成UDP包。最后,通過網絡接口將圖像發送到Internet上。本文只討論其中視頻采集部分的具體實現。
2 系統平臺中的軟件系統
2.1 Linux與嵌入式系統
Linux具有內核小,效率高,源代碼開放,內核直接提供網絡支持等優點。但嵌入式系統的硬件資源畢竟有限,因此不能直接把Linux作為操作系統,需要針對具體的應用通過配置內核、裁減shell和嵌入式C庫對系統定制,使整個系統能夠存放到容量較小的Flash中。Linux的動態模塊加載,使Linux的裁減極為方便 ,高度模塊化的部件使添加非常容易。正因為Linux的上述優點,在本文實現的平臺上,使用的操作系統是對Linux進行了定制的armlinux。它啟用了MMU(內存管理單元),是針對支持MMU的處理器設計的。
2.2 開發環境的建立
絕大多數Linux的軟件開發都以native方式進行,即本機開發、調試,本機運行的方式。這種方式通常不適于嵌入式系統的軟件開發,因為對于嵌入式系統的開發,它沒有足夠的資源在本機(即嵌入式系統平臺)運行開發工具和調試工具。通常的嵌入式系統軟件開發采用交叉編譯調試的方式。交叉編譯調試環境建立在宿主機(即圖1所示通過串口連接的宿主機PC)上,對應的開發板叫做目標板(即嵌入式ARM2410系統)。
通常宿主機和目標板上的處理器不同,宿主機通常為Intel處理器,而目標板如圖1所示為SAMSUNG S3C2410,所以程序需要使用針對處理器特點的編譯器才能生成在相應平臺上可運行的代碼。GNU編譯器提供這樣的功能,在編譯時,可以選擇開發所需的宿主機和目標機,從而建立開發環境。在進行嵌入式開發前的第一步工作就是把一臺PC機作為宿主機開發機,并在其上安裝指定的操作系統。對于嵌入式Linux,宿主機PC上應安裝Linux系統。之后,在宿主機上建立交叉編譯調試的開發環境,開發環境的具體建立這里不細談。本文采用移植性很強的C語言在宿主機上編寫視頻采集程序,再利用交叉編譯調試工具編譯鏈接生成可執行代碼,最后向目標平臺移植。
3 視頻采集的具體實現
上面提到系統平臺上運行的是armlinux。在啟動后,啟用了MMU,系統進入保護模式,所以應用程序就不能直接讀寫外設的I/O區域(包括I/O端口和I/O內存),這時一般就要借助于該外設的驅動來進入內核完成這個工作。本系統中的視頻采集分兩步實現:一是為USB口數碼攝像頭在內核中寫入驅動,二是要再寫入上層應用程序獲取視頻數據。本文著重討論后一步。
3.1 USB口數碼攝像頭的驅動實現
上一篇:嵌入式系統設計的新發展及其挑戰