基于linux系統(tǒng)下的視頻信號(hào)實(shí)時(shí)采集系統(tǒng)_第1頁(yè)
基于linux系統(tǒng)下的視頻信號(hào)實(shí)時(shí)采集系統(tǒng)_第2頁(yè)
基于linux系統(tǒng)下的視頻信號(hào)實(shí)時(shí)采集系統(tǒng)_第3頁(yè)
基于linux系統(tǒng)下的視頻信號(hào)實(shí)時(shí)采集系統(tǒng)_第4頁(yè)
基于linux系統(tǒng)下的視頻信號(hào)實(shí)時(shí)采集系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、摘 要摘 要隨著現(xiàn)代電力電子技術(shù)和微電子技術(shù)的迅猛發(fā)展,自動(dòng)化,智能化程度的不斷的提高,家居安防技術(shù)正在不斷發(fā)展?;贏RM的嵌入式Linux系統(tǒng)以其強(qiáng)大的功能而倍受關(guān)注,目前在消費(fèi)電子、工業(yè)控制等眾多領(lǐng)域得到了廣泛的應(yīng)用。傳統(tǒng)的個(gè)人計(jì)算機(jī)的視頻監(jiān)控系統(tǒng)已經(jīng)越來(lái)越不能滿足現(xiàn)代人的需求。消費(fèi)者希望自己可以實(shí)時(shí)“看見(jiàn)”現(xiàn)場(chǎng)的情況,并且可以遠(yuǎn)程控制現(xiàn)場(chǎng)的一些自動(dòng)化設(shè)備來(lái)處理緊急情況。 本文分析了前人的研究成果并在通過(guò)自己對(duì)個(gè)人計(jì)算機(jī)的視頻監(jiān)控系統(tǒng)的理解,研究了一種通過(guò)ARM的嵌入式Linux系統(tǒng)的視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的方案,且實(shí)現(xiàn)了實(shí)時(shí)監(jiān)控監(jiān)控的目的。這個(gè)項(xiàng)目的方案在硬件上采用的是三星上成熟的AR

2、M體系Exynos 4412型號(hào)的Cortex-A9架構(gòu)處理器平臺(tái),以USB攝像頭作為視頻采集設(shè)備;在軟件上采用了嵌入式Linux開(kāi)發(fā)環(huán)境以及應(yīng)用程序的開(kāi)發(fā),包括交叉編譯工具環(huán)境的建立,TFTP和NFS的配置,BootLoader配置,Linux內(nèi)核移植以及根文件系統(tǒng)的創(chuàng)建,并重點(diǎn)分析了在嵌入式Linux平臺(tái)上進(jìn)行USB攝像頭驅(qū)動(dòng)的開(kāi)發(fā)流程,介紹了基于Video4linux2(簡(jiǎn)稱(chēng)V4L2)的視頻采集編程接口API以及基于RGB格式轉(zhuǎn)化為JPEG格式的圖像壓縮理論實(shí)現(xiàn)的方法,實(shí)現(xiàn)了攝像頭的圖像采集。此系統(tǒng)不但具有易維護(hù)性、可擴(kuò)展性和安全性等這些嵌入式基本特點(diǎn),而且充分融合了嵌入式和通信技術(shù)。使

3、得本系統(tǒng)的功能擴(kuò)展性非常好,可以稍做定制就可以應(yīng)用于很多其它場(chǎng)合。關(guān)鍵字:微電子,嵌入式Linux,ARM(Cortex-A9),Exynos 4412,USB攝像頭,Video4linux2,API IABSTRACTABSTRACTWith the rapid development of modern power electronic technology and microelectronics technology, automation, intelligent degree of continuous improvement, home security and technolo

4、gy are developing continuously. Based on ARM embedded Linux system with its powerful function and attention, in the consumer electronics, industrial control, and many other fields has been widely used. The traditional video monitoring system has been more and more of the personal computer cannot mee

5、t the needs of modern people. Consumers hope oneself can "see" the scene real-time, and can remote control the scene of some of the automation equipment to deal with an emergency.This paper analyzes the research achievements of predecessors and through his understanding of video monitoring

6、 system of the personal computer, study a through the ARM embedded Linux system, video monitoring system design and implementation scheme, and achieve the goal of the real-time monitoring.Scheme on the hardware used in this project is mature on samsung ARM system Exynos 4412 model A9 architecture pr

7、ocessor architecture platform,with USB camera as the video acquisition device; Embedded Linux development environment has been used in the software and application development, including the establishment of the cross compile tools environment, TFTP configuration and NFS, BootLoader configuration, t

8、he Linux kernel transplantation and the creation of the root file system, And analyzed on the embedded Linux platform for USB camera driver development process, introduction based Video4linux2 (referred V4L2) video capture programming interface (API) and RGB format into JPEG format image compression

9、 method based on the theory of implementation, to achieve a camera image acquisition.This system not only has easy maintainability, scalability, and security such as embedded basic characteristics, and to fully mix the embedded and communication technology. Make the function expansibility of this sy

10、stem is very good, we could do a little customization can be applied in many other occasions.Keywords:Microelectronics, Embedded Linux, ARM (Cortex-A9), Exynos 4412, USB camera, Video4linux2, API II目錄目錄第1章課題整體框架11.1 課題任務(wù)11.2 課題要求11.3 研究意義1第2章設(shè)計(jì)方案32.1 嵌入式系統(tǒng)簡(jiǎn)介32.2 硬件部分32.2.1 硬件開(kāi)發(fā)平臺(tái)32.2.1 ARM微處理器52.2.3

11、 攝像頭選擇62.3軟件部分72.3.1linux操作系統(tǒng)72.3.2軟件開(kāi)發(fā)環(huán)境的創(chuàng)建7第3章實(shí)現(xiàn)功能123.1 實(shí)現(xiàn)功能描述123.2 軟件設(shè)計(jì)133.2.1 軟件設(shè)計(jì)思路描述133.2.2 linux平臺(tái)上進(jìn)行USB攝像頭驅(qū)動(dòng)開(kāi)發(fā)流程143.2.3 基于RGB格式轉(zhuǎn)化為JPEG格式的圖像壓縮理論實(shí)現(xiàn)203.2.4 建立linux環(huán)境下的服務(wù)器21第4章調(diào)試與實(shí)現(xiàn)234.1 調(diào)試中遇到的重點(diǎn)與難點(diǎn)234.2 解決方案234.3 實(shí)現(xiàn)展示(附上仿真圖或?qū)嵨镎掌?4第5章總結(jié)275.1 論文總結(jié)275.2 未來(lái)展望27參考文獻(xiàn)29致謝30附錄31附錄一: 主函數(shù)main.c31附錄二: ca

12、mera下實(shí)現(xiàn)的接口功能函數(shù)321) camera_progress.c 負(fù)責(zé)采集圖片322) camera.c 自己定義的接口描述383) convert.c RGB格式轉(zhuǎn)化為JPEG格式的圖像壓縮理論實(shí)現(xiàn)46附錄三: linux環(huán)境下的服務(wù)器 socket.c53 III第1章 課題整天框架第1章 課題整體框架1.1 課題任務(wù)本文是在電子科技大學(xué)成都學(xué)院課程設(shè)計(jì)的基礎(chǔ)上自己實(shí)際進(jìn)行實(shí)驗(yàn)開(kāi)發(fā)實(shí)現(xiàn)了“基于linux的視頻監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)”的方案,在深入研究了嵌入式Linux操作系統(tǒng)、視頻數(shù)據(jù)采集與流媒體實(shí)時(shí)傳輸技術(shù)的基礎(chǔ)上將上述三者結(jié)合起來(lái)設(shè)計(jì)了一套網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng),并且成功的進(jìn)行了視頻的采

13、集。1.2 課題要求根據(jù)課題的要求,采用了以成熟的ARM體系架構(gòu)的Cortex-A9處理器平臺(tái)系統(tǒng)架構(gòu),設(shè)計(jì)出了一種基于linux系統(tǒng)下的視頻信號(hào)實(shí)時(shí)采集系統(tǒng)。論文的設(shè)計(jì)工作主要集中在下面的幾個(gè)方面:1) 軟件開(kāi)發(fā)環(huán)境的創(chuàng)建,比如linux環(huán)境下交叉編譯工具環(huán)境的建立,TFTP和NFS的配置,BootLoader配置,Linux內(nèi)核移植以及根文件系統(tǒng)的創(chuàng)建;2) 分析了在嵌入式linux平臺(tái)上進(jìn)行USB攝像頭驅(qū)動(dòng)的開(kāi)發(fā)流程;3) 基于Video4linux2(簡(jiǎn)稱(chēng)V4L2)的視頻采集編程接口API; 4) 基于RGB格式轉(zhuǎn)化為JPEG格式的圖像壓縮理論實(shí)現(xiàn);5) 建立linux環(huán)境下的服務(wù)器,

14、并完成Linux下視頻采集的程序的設(shè)計(jì),提供源代碼。1.3 研究意義隨著嵌入式、物聯(lián)網(wǎng)技術(shù)快速發(fā)展,視頻監(jiān)控系統(tǒng)技術(shù)在現(xiàn)代各個(gè)領(lǐng)域內(nèi)應(yīng)用越來(lái)越廣泛,其中包括可以用于智能家居系統(tǒng),智能農(nóng)業(yè)系統(tǒng)上的視頻處理收集、監(jiān)控模塊中,可以用于智能醫(yī)療系統(tǒng)和安防監(jiān)控系統(tǒng)中實(shí)時(shí)監(jiān)控功能,比如用于現(xiàn)場(chǎng)的數(shù)據(jù)采集、數(shù)據(jù)處理、安全防范、信息獲取、實(shí)時(shí)監(jiān)控等功能,從而大大提高管理效率,使人們的工作水平得到顯著的提高。在監(jiān)控領(lǐng)域中,實(shí)時(shí)傳送視頻、音頻、多媒體動(dòng)畫(huà)等數(shù)字媒體文件的技術(shù)越來(lái)越成為研究熱點(diǎn),而這種技術(shù)就稱(chēng)為流媒體傳輸技術(shù)?;谶@樣的流媒體傳輸技術(shù)就可以適用于更大的視頻數(shù)據(jù)處理、監(jiān)控,從而保證了為遠(yuǎn)程視頻監(jiān)控提供

15、高效可行且價(jià)格低廉的解決方案。為了確保系統(tǒng)整體性能的穩(wěn)定和高效,同時(shí)滿足未來(lái)物聯(lián)網(wǎng)系統(tǒng)的需求,實(shí)現(xiàn)資源的共享,從而使人們有能力解決以往在有限的資源下很難解決的問(wèn)題,本文提出了基于linux系統(tǒng)下以成熟的ARM體系架構(gòu)的Cortex-A9處理器平臺(tái),以USB攝像頭作為視頻采集設(shè)備的設(shè)計(jì)與實(shí)現(xiàn)方案。所以基于這樣的研究,對(duì)未來(lái)物聯(lián)網(wǎng)系統(tǒng)的數(shù)據(jù)處理、信息安全和安防監(jiān)控有著重要的意義1第2章 設(shè)計(jì)方案第2章 設(shè)計(jì)方案2.1 嵌入式系統(tǒng)簡(jiǎn)介嵌入式系統(tǒng)(Embedded system),是一種“完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計(jì)的專(zhuān)用計(jì)算機(jī)系統(tǒng)”,根據(jù)英國(guó)電氣工程師協(xié)會(huì)( U.K. Institutio

16、n of Electrical Engineer)的定義,嵌入式系統(tǒng)為控制、監(jiān)視或輔助設(shè)備、機(jī)器或用于工廠運(yùn)作的設(shè)備。與個(gè)人計(jì)算機(jī)這樣的通用計(jì)算機(jī)系統(tǒng)不同,嵌入式系統(tǒng)通常執(zhí)行的是帶有特定要求的預(yù)先定義的任務(wù)。由于嵌入式系統(tǒng)只針對(duì)一項(xiàng)特殊的任務(wù),設(shè)計(jì)人員能夠?qū)λM(jìn)行優(yōu)化,減小尺寸降低成本。嵌入式系統(tǒng)通常進(jìn)行大量生產(chǎn),所以單個(gè)的成本節(jié)約,能夠隨著產(chǎn)量進(jìn)行成百上千的放大。良好的總體方案設(shè)計(jì)是設(shè)計(jì)開(kāi)發(fā)的關(guān)鍵,本系統(tǒng)設(shè)計(jì)方案包括硬件和軟件兩大部分,硬件部分包括攝像頭模塊和硬件開(kāi)發(fā)平臺(tái);軟件部分包括linux操作系統(tǒng)、驅(qū)動(dòng)程序、linux環(huán)境下交叉編譯工具環(huán)境的建立,TFTP和NFS的配置,BootLoa

17、der配置,linux內(nèi)核移植以及根文件系統(tǒng)的創(chuàng)建,以及基于Video4linux2(簡(jiǎn)稱(chēng)V4L2)的視頻采集編程接口API以及圖像壓縮理論的使用方法。2.2 硬件部分2.2.1 硬件開(kāi)發(fā)平臺(tái)這個(gè)項(xiàng)目的硬件開(kāi)發(fā)平臺(tái)采用的是基于三星上成熟的ARM體系Cortex-A9架構(gòu)處理器的Exynos 4412型號(hào)的開(kāi)發(fā)板FS4412平臺(tái),USB攝像頭作為視頻采集設(shè)備。Exynos4412采用了32nm HKMG工藝,是三星的第一款四核芯片,Exynos 4412有兩種封裝SCP和POP;Exynos 4412處理器當(dāng)前三星推出了兩個(gè)封裝版本(PoP和SCP),其中PoP封裝主要是針對(duì)智能手機(jī)等產(chǎn)品體積要

18、求嚴(yán)格的項(xiàng)目中使用。由于采用了 DDR和處理器疊層的焊接工藝,使得設(shè)計(jì)者對(duì)于DDR部分的LAYOUT節(jié)省了大量的工程周期,且解決了EMI等復(fù)雜電氣問(wèn)題,但同時(shí)也導(dǎo)致其他有一些問(wèn) 題呈現(xiàn)出來(lái)。1) Exynos 4412的PoP版本當(dāng)前最大DDR為1GB, 如果客戶有內(nèi)存擴(kuò)容的可能,將后悔莫及;2) Exynos 4412的BGA間距為0.4mm,這是當(dāng)前國(guó)內(nèi)焊接工廠的極限能力,客戶在生產(chǎn)工廠的選擇上增加了難度,且成品的報(bào)廢率明顯上升;3) 由于BGA間距太小,PCB布線方面通常需要二階盲埋孔的HDI板才能完成,使得PCB的成本和周期大大增加;4) Exynos 4412的PoP版本官方不再對(duì)大

19、眾用戶做進(jìn)一步的技術(shù)支持和文檔的開(kāi)放。2.2.1 ARM微處理器ARM(Advanced RISC Machines),既可以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是對(duì)微處理器的通稱(chēng),還可以認(rèn)為是一種技術(shù)的名字。其體系結(jié)構(gòu)具有以下特點(diǎn):1) 體積小、低功耗、低成本、高性能;2) 支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件;3) 大量使用寄存器,指令執(zhí)行速度更快;4) 大多數(shù)數(shù)據(jù)操作都在寄存器中完成;5) 尋址方式靈活簡(jiǎn)單,執(zhí)行效率高;6) 指令長(zhǎng)度固定。本文的開(kāi)發(fā)平臺(tái)是基于三星上成熟的ARM體系Exynos 4412型號(hào)的Cortex-A9架構(gòu)處理器,Corte

20、x-A9處理器能與其他Cortex系列處理器以及廣受歡迎的ARM MPCore技術(shù)兼容,因此能夠很好延用包括操作系統(tǒng)/實(shí)時(shí)操作系統(tǒng)(OS/RTOS)、中間件及應(yīng)用在內(nèi)的豐富生態(tài)系統(tǒng),從而減少采用全新處理器所需的成本。通過(guò)首次利用關(guān)鍵微體系架構(gòu)方面的改進(jìn),Cortex-A9 處理器提供了具有高擴(kuò)展性和高功耗效率的解決方案。利用動(dòng)態(tài)長(zhǎng)度、八級(jí)超標(biāo)量結(jié)構(gòu)、多事件管道及推斷性亂序執(zhí)行( Speculative out-of-order execution),它能在頻率超過(guò)1GHz的設(shè)備中,在每個(gè)循環(huán)中執(zhí)行多達(dá)四條指令,同時(shí)還能減少目前主流八級(jí)處理器的成本并提高效率。同時(shí)使用相當(dāng)少的功耗比的高性能計(jì)算機(jī)

21、平臺(tái)的ARM Cortex-A9處理器提供了卓越的能力。它被證明在廣泛的設(shè)備,是ARM的較為成熟的應(yīng)用處理器之一。在Cortex-A9實(shí)現(xiàn)了廣泛的支持的ARMv7-A架構(gòu)的全部豐富性。高效率,雙超標(biāo)量和亂序,動(dòng)態(tài)長(zhǎng)度管道周?chē)O(shè)計(jì)(8 - 11級(jí)),在Cortex-A9提供的性能和功率效率卓越的水平所需的尖端產(chǎn)品的功能就廣泛的消費(fèi),網(wǎng)絡(luò),企業(yè)和移動(dòng)應(yīng)用。該處理器微架構(gòu)支持16,32或64 KB四路關(guān)聯(lián)的L1高速緩存的配置,具有可選的L2緩存提供的緩存內(nèi)存高達(dá)8MB??缮炜s的多核及單處理器解決方案提供最廣泛的靈活性,并且各自適合于各種應(yīng)用和市場(chǎng)。與ARM MPCore的,多達(dá)四個(gè)連貫芯可以一起使用

22、,以實(shí)現(xiàn)性能更高的水平。在一個(gè)單一的芯實(shí)現(xiàn)中,處理器是針對(duì)需要有競(jìng)爭(zhēng)力的功率效率低功耗,成本敏感的設(shè)備。2.2.3 攝像頭選擇攝像頭又稱(chēng)為電腦相機(jī)、電腦眼等,它作為一種視頻輸入設(shè)備,在過(guò)去被廣泛的運(yùn)用于視頻會(huì)議、遠(yuǎn)程醫(yī)療及實(shí)時(shí)監(jiān)控等方面。近年以來(lái),隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,網(wǎng)絡(luò)速度的不斷提高,再加上感光成像器件技術(shù)的成熟并大量用于攝像頭的制造上,這使得它的價(jià)格降到普通人可以承受的水平。普通的人也可以彼此通過(guò)攝像頭在網(wǎng)絡(luò)進(jìn)行有影像、有聲音的交談和溝通,另外,人們還可以將其用于當(dāng)前各種流行的數(shù)碼影像、影音處理。攝像頭分為數(shù)字?jǐn)z像頭和模擬攝像頭兩大類(lèi)。模擬攝像頭可以將視頻采集設(shè)備產(chǎn)生的模擬視頻信號(hào)轉(zhuǎn)換成

23、數(shù)字信號(hào),進(jìn)而將其儲(chǔ)存在計(jì)算機(jī)里。模擬攝像頭捕捉到的視頻信號(hào)必須經(jīng)過(guò)特定的視頻捕捉卡將模擬信號(hào)轉(zhuǎn)換成數(shù)字模式,并加以壓縮后才可以轉(zhuǎn)換到計(jì)算機(jī)上運(yùn)用。數(shù)字?jǐn)z像頭可以直接捕捉影像,然后通過(guò)串、并口或者USB接口傳到計(jì)算機(jī)里?,F(xiàn)在電腦市場(chǎng)上的攝像頭基本以數(shù)字?jǐn)z像頭為主,而數(shù)字?jǐn)z像頭中又以使用新型數(shù)據(jù)傳輸接口的USB數(shù)字?jǐn)z像頭為主,目前市場(chǎng)上可見(jiàn)的大部分都是這種產(chǎn)品。由于個(gè)人電腦的迅速普及,模擬攝像頭的整體成本較高等原因,USB接口的傳輸速度遠(yuǎn)遠(yuǎn)高于串口、并口的速度,因此現(xiàn)在市場(chǎng)熱點(diǎn)主要是USB接口的數(shù)字?jǐn)z像頭。以下主要是指USB接口的數(shù)字?jǐn)z像頭。FS_9650是一款130萬(wàn)像素的攝像頭,圖像清晰。目

24、前在Exynos 4412型號(hào)的Cortex-A9架構(gòu)處理器上以FS_4412 Cortex-A9開(kāi)發(fā)板為平臺(tái)的基礎(chǔ)上已經(jīng)實(shí)現(xiàn)圖像預(yù)覽和拍照功能。2.3 軟件部分2.3.1linux操作系統(tǒng)linux是一個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。其主要特性如下:1) 基本思想:linux的基本思想有兩點(diǎn):第一,一切都是文件;第二,每個(gè)軟件都有確定的用途。其中第一條詳細(xì)來(lái)講就是系統(tǒng)中的所有都?xì)w結(jié)為一個(gè)文

25、件,包括命令、硬件和軟件設(shè)備、操作系統(tǒng)、進(jìn)程等等對(duì)于操作系統(tǒng)內(nèi)核而言,都被視為擁有各自特性或類(lèi)型的文件。2) 完全免費(fèi):linux是一款免費(fèi)的操作系統(tǒng),用戶可以通過(guò)網(wǎng)絡(luò)或其他途徑免費(fèi)獲得,并可以任意修改其源代碼。這是其他的操作系統(tǒng)所做不到的。3) 完全兼容POSIX1.0標(biāo)準(zhǔn):這使得可以在linux下通過(guò)相應(yīng)的模擬器運(yùn)行常見(jiàn)的DOS、Windows的程序。這為用戶從Windows轉(zhuǎn)到linux奠定了基礎(chǔ)。許多用戶在考慮使用linux時(shí),就想到以前在Windows下常見(jiàn)的程序是否能正常運(yùn)行,這一點(diǎn)就消除了他們的疑慮。4) 多用戶、多任務(wù):linux支持多用戶,各個(gè)用戶對(duì)于自己的文件設(shè)備有自己特殊

26、的權(quán)利,保證了各用戶之間互不影響。多任務(wù)則是現(xiàn)在電腦最主要的一個(gè)特點(diǎn),linux可以使多個(gè)程序同時(shí)并獨(dú)立地運(yùn)行。5) 支持多種平臺(tái):linux可以運(yùn)行在多種硬件平臺(tái)上,如具有x86、680x0、SPARC、Alpha等處理器的平臺(tái)。2.3.2軟件開(kāi)發(fā)環(huán)境的創(chuàng)建1) linux環(huán)境下交叉編譯工具環(huán)境的建立交叉編譯工具環(huán)境是在linux環(huán)境下進(jìn)行視頻監(jiān)控的重要步驟,是在某個(gè)主機(jī)平臺(tái)上(比如PC上)用交叉編譯器編譯出可在其他平臺(tái)上(比如ARM上)運(yùn)行的代碼的過(guò)程。通過(guò)網(wǎng)絡(luò)下載交叉編譯器機(jī)型,其重要的步驟如下所示:$ tar xvf gcc-4.6.4.tar.xz $ sudo vim /etc/b

27、ash.bashrc /* 添加交叉編譯工具鏈的路徑到系統(tǒng)腳本在末尾添加export PATH=/home/linux/store/gcc-4.6.4/bin:$PATH 注意路徑要根據(jù)gcc-4.6.4的實(shí)際路徑修改 */$ source /etc/bash.bashrc /使配置文件生效$ arm-n 然后按Tab鍵補(bǔ)全 /如果能補(bǔ)全為arm-none-linux-gnueabi- 表示安裝交叉編譯工具成功了2) TFTP和NFS的配置為了開(kāi)發(fā)過(guò)程中掛載文件系統(tǒng)和下載文件的順利,還需要配置TFTP和NFS服務(wù)。其步驟如下所示:(1)對(duì)于TFTP服務(wù)安裝(虛擬機(jī)上安裝tftp服務(wù)):$ dp

28、kg -s tftp /* 檢查是否安裝tftp server$ sudo mkdir /tftpboot /創(chuàng)建工作目錄(要傳輸?shù)奈募?放在該位置)$ sudo chmod 777 tftpboot $ sudo vi /etc/inetd.conf /修改tftp服務(wù)器配置文件把該行 tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp 改為 tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot$ sudo /etc

29、/init.d/xinetd restart /如果有更改配置,需要重啟一下 tftp-server$ sudo in.tftpd -l /tftpboot$ cd /tftpboot$ touch test (2)對(duì)于NFS服務(wù)安裝:$ service nfs-kernel-server /*檢查nfs服務(wù)是否安裝$ sudo vi /etc/exports /*修改配置文件,指定共享目錄位置在末尾追加/nfs/rootfs *(rw,sync,no_root_squash) 或 /opt/nfs *(rw,sync,no_root_squash,no_subtree_check) 注意:路

30、徑不一樣,因?yàn)槲野?nfs 服務(wù) 的路徑放在了 /opt/nfs 中 或 /source/ *(rw,sync,no_subtree_check) */ $ sudo mkdir /nfs / sudo mkdir /home/nfs/rootfs nfs的路徑$ sudo chmod 777 /nfs改權(quán)限$ cd /nfs$ cp /e/fs4412/環(huán)境搭建/rootfs.tar.xz . /rootfs.tar.xz是已制作好的根文件系統(tǒng)$ tar -xvf rootfs.tar.xz $ sudo chmod 777 rootfs$ sudo /etc/init.d/nfs-kern

31、el-server restart /重啟nfs服務(wù)(使得前面修改生效)3) BootLoader配置引導(dǎo)加載程序是系統(tǒng)加電后運(yùn)行的第一段軟件代碼。 BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Boot- Loader 的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤(pán)上讀到 RAM 中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也即開(kāi)始啟動(dòng)操作系統(tǒng)。4) linux內(nèi)核移植以及根文件系統(tǒng)的創(chuàng)建 (1)對(duì)于linux內(nèi)核移植的配置:下載源碼:linux-3

32、.14.tar.xz配置編譯源碼:$ vim Makefile /* 指定交叉編譯工具鏈修改:ARCH?= $(SUBARCH)ROSS_COMPILE?= $(CONFIG_CROSS_COMPILE:"%"=%)為:ARCH?= arm CROSS_COMPILE?= arm-none-linux-gnueabi- */$ make exynos_defconfig /*導(dǎo)入配置$ make menuconfig /*配置內(nèi)核命令如圖2-3和圖2-4所示:圖2-3 配置內(nèi)核命令圖2-4 圖形化的內(nèi)核配置$ make uImage /*編譯內(nèi)核$ make dtbs /*

33、編譯設(shè)備樹(shù)(2)對(duì)于根文件系統(tǒng)的創(chuàng)建:根文件系統(tǒng)就是內(nèi)核啟動(dòng)后掛載的第一個(gè)文件系統(tǒng)。 它的目錄可做為掛載點(diǎn),掛載別的文件系統(tǒng)。其重要步驟如下所示:首先下載一個(gè)BusyBox,BusyBox 是一個(gè)遵循GPL協(xié)議、以自由軟件形式發(fā)布的應(yīng)用程序。BusyBox在單一的可執(zhí)行文件中提供了精簡(jiǎn)的Unix工具集。其一般步驟為:用BusyBox創(chuàng)建基本命令;創(chuàng)建基本目錄 /lib/etc/var/tmp/dev/sys/proc等;添加glibc基本動(dòng)態(tài)庫(kù);創(chuàng)建基本的設(shè)備節(jié)點(diǎn);添加啟動(dòng)配置和腳本程序;測(cè)試根文件系統(tǒng);制作根文件系統(tǒng)鏡像。55第3章 實(shí)現(xiàn)功能第3章 實(shí)現(xiàn)功能3.1 實(shí)現(xiàn)功能描述Video f

34、or Linux two(Video4Linux2)簡(jiǎn)稱(chēng)V4L2,是V4L的改進(jìn)版。V4L2是linux操作系統(tǒng)下用于采集圖片、視頻和音頻數(shù)據(jù)的API接口,配合適當(dāng)?shù)囊曨l采集設(shè)備和相應(yīng)的驅(qū)動(dòng)程序,可以實(shí)現(xiàn)圖片、視頻、音頻等的采集。在遠(yuǎn)程會(huì)議、可視電話、視頻監(jiān)控系統(tǒng)和嵌入式多媒體終端中都有廣泛的應(yīng)用。V4L2規(guī)范中不僅定義了通用API元素(Common API Elements),圖像的格式(Image Formats),輸入/輸出方法(Input/Output),還定義了linux內(nèi)核驅(qū)動(dòng)處理視頻信息的一系列接口(Interfaces),這些接口主要有:視頻采集接口Video Capture

35、Interface;視頻輸出接口 Video Output Interface;視頻覆蓋/預(yù)覽接口Video Overlay Interface;視頻輸出覆蓋接口Video Output Overlay Interface;編解碼接口Codec Interface。以及我自己定義的接口描述:A、實(shí)現(xiàn)了設(shè)備初始化函數(shù)int camera_init(char *devpath, unsigned int *width, unsigned int *height, unsigned int flag);B、實(shí)現(xiàn)了采樣函數(shù)int camera_start_capture(void);int camer

36、a_dequeue_buf(void *buf, unsigned int *size, unsigned int *index);/把采集的數(shù)據(jù)放回緩存隊(duì)列int camera_enqueue_buf(unsigned int index);/把采集的數(shù)據(jù)從緩存中讀取出來(lái)C、實(shí)現(xiàn)格式轉(zhuǎn)換函數(shù)int convert_yuyv_to_rgb(void *yuyv, void *rgb, unsigned int width, unsigned int height, unsigned int bpp); /yuyv轉(zhuǎn)換為rgb格式int convert_rgb_to_bmp(void *rgb,

37、 void *bmp, unsigned int width, unsigned int height, unsigned int bpp); / rgb轉(zhuǎn)換為bmp格式3.2 軟件設(shè)計(jì)3.2.1 軟件設(shè)計(jì)思路描述流程圖框架如圖3-1所示:圖3-1 流程圖框架一般操作流程如下:1) 打開(kāi)視頻設(shè)備。 int fd=open(”/dev/video0,O_RDWR);2) 設(shè)定屬性及采集方式;(1) 檢查當(dāng)前視頻設(shè)備支持的標(biāo)準(zhǔn);(2) 設(shè)置視頻捕獲格式;(3) 分配內(nèi)存接下來(lái)可以為視頻捕獲分配內(nèi)存;(4) 獲取并記錄緩存的物理空間使用VIDIOC_REQBUFS;(5) 視頻采集方式;(6) 處理

38、采集數(shù)據(jù);3) 關(guān)閉視頻設(shè)備。3.2.2 linux平臺(tái)上進(jìn)行USB攝像頭驅(qū)動(dòng)開(kāi)發(fā)流程在linux下,所有外設(shè)都被看成一種特殊的文件,成為“設(shè)備文件”,可以象訪問(wèn)普通文件一樣對(duì)其進(jìn)行讀寫(xiě)。一般來(lái)說(shuō),采用V4L2驅(qū)動(dòng)的攝像頭設(shè)備文件是/dev/v4l/video0。為了通用,可以建立一個(gè)到/dev/video0的鏈接。V4L2支持兩種方式來(lái)采集圖像:內(nèi)存映射方式(mmap)和直接讀取方式(read)。V4L2在include/linux/videodev.h文件中定義了一些重要的數(shù)據(jù)結(jié)構(gòu),在采集圖像的過(guò)程中,就是通過(guò)對(duì)這些數(shù)據(jù)的操作來(lái)獲得最終的圖像數(shù)據(jù)。linux系統(tǒng)V4L2的能力可在linux

39、內(nèi)核編譯階段配置,默認(rèn)情況下都有此開(kāi)發(fā)接口。V4L2從linux 2.5.x版本的內(nèi)核中開(kāi)始出現(xiàn)。常用的結(jié)構(gòu)體(參見(jiàn)/usr/include/linux/videodev2.h):struct v4l2_requestbuffers reqbufs; /向驅(qū)動(dòng)申請(qǐng)幀緩沖的請(qǐng)求,里面包含申請(qǐng)的個(gè)數(shù)struct v4l2_capability cap; /這個(gè)設(shè)備的功能,比如是否是視頻輸入設(shè)備struct v4l2_input input; /視頻輸入struct v4l2_standard std; /視頻的制式,比如PAL,NTSCstruct v4l2_format fmt; /幀的格式,比

40、如寬度,高度等 struct v4l2_buffer buf; /代表驅(qū)動(dòng)中的一幀struct v4l2_queryctrl query; /查詢(xún)的控制struct v4l2_control control; /具體控制的值V4L2采用流水線的方式,操作更簡(jiǎn)單直觀,基本遵循打開(kāi)視頻設(shè)備、設(shè)置格式、處理數(shù)據(jù)、關(guān)閉設(shè)備,更多的具體操作通過(guò)ioctl函數(shù)來(lái)實(shí)現(xiàn)。1) 打開(kāi)視頻設(shè)備在V4L2中,視頻設(shè)備被看做一個(gè)文件。使用open函數(shù)打開(kāi)這個(gè)設(shè)備:int cameraFd; / 用非阻塞模式打開(kāi)攝像頭設(shè)備cameraFd = open("/dev/video0", O_RDWR |

41、 O_NONBLOCK, 0);2) 設(shè)定屬性及采集方式打開(kāi)視頻設(shè)備后,可以設(shè)置該視頻設(shè)備的屬性,例如裁剪、縮放等。這一步是可選的。在linux編程中,一般使用ioctl函數(shù)來(lái)對(duì)設(shè)備的I/O通道進(jìn)行管理:int ioctl (int _fd, unsigned long int _request, ./*args*/);常用的命令標(biāo)志符如下:VIDIOC_REQBUFS:分配內(nèi)存VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的數(shù)據(jù)緩存轉(zhuǎn)換成物理地址 VIDIOC_QUERYCAP:查詢(xún)驅(qū)動(dòng)功能 VIDIOC_ENUM_FMT:獲取當(dāng)前驅(qū)動(dòng)支持的視頻格式 VIDIOC_TR

42、Y_FMT:驗(yàn)證當(dāng)前驅(qū)動(dòng)的顯示格式 VIDIOC_QBUF:把數(shù)據(jù)從緩存中讀取出來(lái) VIDIOC_DQBUF:把數(shù)據(jù)放回緩存隊(duì)列 VIDIOC_STREAMON:開(kāi)始視頻顯示函數(shù) VIDIOC_STREAMOFF:結(jié)束視頻顯示函數(shù) VIDIOC_QUERYSTD:檢查當(dāng)前視頻設(shè)備支持的標(biāo)準(zhǔn),例如PAL或NTSC。(1) 檢查當(dāng)前視頻設(shè)備支持的標(biāo)準(zhǔn)v4l2_std_id std;do ret = ioctl(fd, VIDIOC_QUERYSTD, &std); while (ret = -1 && errno = EAGAIN); switch (std) case V

43、4L2_STD_NTSC: / case V4L2_STD_PAL: /(2) 設(shè)置視頻捕獲格式當(dāng)檢測(cè)完視頻設(shè)備支持的標(biāo)準(zhǔn)后,還需要設(shè)定視頻捕獲格式,結(jié)構(gòu)如下: struct v4l2_format fmt; memset ( &fmt, 0, sizeof(fmt) );fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.width = 720;fmt.fmt.pix.height = 576;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;fmt.fmt.pix.field = V4L2_FI

44、ELD_INTERLACED;if (ioctl(fd, VIDIOC_S_FMT, &fmt) = -1) return -1;v4l2_format結(jié)構(gòu)如下:struct v4l2_format enum v4l2_buf_type type; / 數(shù)據(jù)流類(lèi)型,必須永遠(yuǎn)是V4L2_BUF_TYPE_VIDEO_CAPTUREunion struct v4l2_pix_format pix;struct v4l2_window win;struct v4l2_vbi_format vbi;_u8 raw_data200; fmt;struct v4l2_pix_format _u32

45、 width;/ 寬,必須是16的倍數(shù) _u32 height; / 高,必須是16的倍數(shù) _u32 pixelformat;/ 視頻數(shù)據(jù)存儲(chǔ)類(lèi)型,例如是YUV4:2:2 enum v4l2_field field; _u32 bytesperline; _u32 sizeimage;enum v4l2_colorspace colorspace; _u32 priv;(3) 分配內(nèi)存接下來(lái)可以為視頻捕獲分配內(nèi)存:struct v4l2_requestbuffers req;if (ioctl(fd, VIDIOC_REQBUFS, &req) = -1) return -1; v4l

46、2_requestbuffers結(jié)構(gòu)如下:struct v4l2_requestbuffers_u32 count; / 緩存數(shù)量,也就是說(shuō)在緩存隊(duì)列里保持多少?gòu)堈掌琫num v4l2_buf_type type; / 數(shù)據(jù)流類(lèi)型,必須永遠(yuǎn)是V4L2_BUF_TYPE_VIDEO_CAPTUREenum v4l2_memory memory; / V4L2_MEMORY_MMAP 或 V4L2_MEMORY_USERPTR_u32 reserved2;(4) 獲取并記錄緩存的物理空間使用VIDIOC_REQBUFS我獲取了req.count個(gè)緩存,下一步我通過(guò)調(diào)用VIDIOC_QUERYBUF

47、命令來(lái)獲取這些緩存的地址,然后使用mmap函數(shù)轉(zhuǎn)換成應(yīng)用程序中的絕對(duì)地址,最后把這段緩存放入緩存隊(duì)列:typedef struct VideoBuffer void *start;size_t length; VideoBuffer;VideoBuffer* buffers = calloc( req.count, sizeof(*buffers) );struct v4l2_buffer buf;for (numBufs = 0; numBufs < req.count; numBufs+) memset( &buf, 0, sizeof(buf) );buf.type = V

48、4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = numBufs; / 讀取緩存if (ioctl(fd, VIDIOC_QUERYBUF, &buf) = -1) return -1;buffersnumBufs.length = buf.length; / 轉(zhuǎn)換成相對(duì)地址 buffersnumBufs.start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED,fd, buf.m.offset); if (buffersnu

49、mBufs.start = MAP_FAILED) return -1; / 放入緩存隊(duì)列if (ioctl(fd, VIDIOC_QBUF, &buf) = -1) perror(CAMERA_DBG_TAG);munmap(camera.bufsi.start, camera.bufsi.length);num = i-;ret = -ECAMERABUF;goto enq_err; 緩沖區(qū)的狀態(tài)轉(zhuǎn)化如圖3-2所示:圖3-2 緩沖區(qū)的狀態(tài)轉(zhuǎn)化圖(5) 視頻采集方式V4L2捕獲的數(shù)據(jù),最初是存放在內(nèi)核空間的,這意味著用戶不能直接訪問(wèn)該段內(nèi)存,必須通過(guò)某些手段來(lái)轉(zhuǎn)換地址。一共有三種視頻

50、采集方式:使用read/write方式;內(nèi)存映射方式和用戶指針模式。read、write方式,在用戶空間和內(nèi)核空間不斷拷貝數(shù)據(jù),占用了大量用戶內(nèi)存空間,效率不高。內(nèi)存映射方式:把設(shè)備里的內(nèi)存 映射到 應(yīng)用程序中的內(nèi)存控件,直接處理設(shè)備內(nèi)存,這是一種有效的方式。上面的mmap函數(shù)就是使用這種方式。用戶指針模式:內(nèi)存片段由應(yīng)用程序自己分配。這點(diǎn)需要在v4l2_requestbuffers里將memory字段設(shè)置成V4L2_MEMORY_USERPTR。(6) 處理采集數(shù)據(jù)V4L2有一個(gè)數(shù)據(jù)緩存,存放req.count數(shù)量的緩存數(shù)據(jù)。數(shù)據(jù)緩存采用FIFO的方式,當(dāng)應(yīng)用程序調(diào)用緩存數(shù)據(jù)時(shí),緩存隊(duì)列將最

51、先采集到的視頻數(shù)據(jù)緩存送出,并重新采集一張視頻數(shù)據(jù)。這個(gè)過(guò)程需要用到兩個(gè)ioctl命令,VIDIOC_DQBUF和VIDIOC_QBUF:struct v4l2_buffer buf; memset(&buf,0,sizeof(buf);buf.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory=V4L2_MEMORY_MMAP;buf.index=0;/讀取緩存if (ioctl(cameraFd, VIDIOC_DQBUF, &buf) = -1) return -1;if (ioctl(cameraFd, VIDIOC_QBUF, &a

52、mp;buf) = -1) return -1;3) 關(guān)閉視頻設(shè)備使用close函數(shù)關(guān)閉一個(gè)視頻設(shè)備。 close(cameraFd)/ 如果使用mmap,最后還需要使用munmap方法。3.2.3 基于RGB格式轉(zhuǎn)化為JPEG格式的圖像壓縮理論實(shí)現(xiàn)1) yuyv轉(zhuǎn)換為rgb格式,函數(shù)模塊如下:int convert_yuyv_to_rgb(void *yuyv, void *rgb, unsigned int width, unsigned int height, unsigned int bpp);2) yuyv轉(zhuǎn)換為rgb格式時(shí)的初始化模塊:void convert_rgb_to_jpe

53、g_init(void);3) yuyv轉(zhuǎn)換為rgb格式時(shí)進(jìn)行初始化模塊:int convert_rgb_to_jpeg_work(void *rgb, void *jpeg, unsigned int width, unsigned int height, unsigned int bpp, int quality);4) yuyv轉(zhuǎn)換為rgb格式時(shí)退出函數(shù)模塊:void convert_rgb_to_jpeg_exit(void);5) rgb轉(zhuǎn)換為bmp格式,函數(shù)模塊如下:int convert_rgb_to_bmp(void *rgb, void *bmp, unsigned int

54、width, unsigned int height, unsigned int bpp);其具體實(shí)現(xiàn)代碼在附錄二的convert.c中。3.2.4 建立linux環(huán)境下的服務(wù)器在linux環(huán)境下的服務(wù)器模塊,用的是TCP/IP協(xié)議。其負(fù)責(zé)的功能就是通過(guò)Socket編程模塊建立其與遠(yuǎn)程客服端的連接和取消,從而接受客服端的各種請(qǐng)求,比如視頻的監(jiān)控、信息采集等功能。TCP/IP協(xié)議是Internet事實(shí)上的工業(yè)標(biāo)準(zhǔn),一共有四層:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口和物理層,其參考模型如圖3-3所示:應(yīng)用層傳輸層 網(wǎng)絡(luò)層網(wǎng)絡(luò)接口和物理層圖3-3 TCP/IP參考模型TCP(即傳輸控制協(xié)議):是一種面向連

55、接的傳輸層協(xié)議,它能提供高可靠性通信(即數(shù)據(jù)無(wú)誤、數(shù)據(jù)無(wú)丟失、數(shù)據(jù)無(wú)失序、數(shù)據(jù)無(wú)重復(fù)到達(dá)的通信)。Socket編程起源于Unix,是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,是獨(dú)立于具體協(xié)議的網(wǎng)絡(luò)編程接口,也是一種特殊的文件描述符。而Unix/Linux基本哲學(xué)之一就是“一切皆文件”,都可以用“打開(kāi)open > 讀寫(xiě)write/read > 關(guān)閉close”模式來(lái)操作。Socket就是該模式的一個(gè)實(shí)現(xiàn),Socket即是一種特殊的文件,一些socket函數(shù)就是對(duì)其進(jìn)行的操作(讀/寫(xiě)IO、打開(kāi)、關(guān)閉)。Socket類(lèi)型有三種不同的類(lèi)型:流式套接字、數(shù)據(jù)包套接字和原始套接字。1)

56、流式套接字基于TCP協(xié)議,提供了一個(gè)面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無(wú)差錯(cuò)、無(wú)重復(fù)的發(fā)送且按發(fā)送順序接收。內(nèi)設(shè)置流量控制,避免數(shù)據(jù)流淹沒(méi)慢的接受方。數(shù)據(jù)是被看作字節(jié)流,無(wú)長(zhǎng)度限制。2) 數(shù)據(jù)包套接字基于UDP協(xié)議,提供無(wú)連接服務(wù)。數(shù)據(jù)包以獨(dú)立數(shù)據(jù)包形式被發(fā)送,不提供無(wú)差錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),順序發(fā)送,可能亂序接收。3) 原始套接字可以對(duì)較低層次協(xié)議如IP、ICMP直接訪問(wèn)。本文采用的Socket編程模塊是基于流式套接字實(shí)現(xiàn)視頻的監(jiān)控、信息采集的。第4章 調(diào)試與實(shí)現(xiàn)第4章 調(diào)試與實(shí)現(xiàn)4.1 調(diào)試中遇到的重點(diǎn)與難點(diǎn)總的來(lái)說(shuō),對(duì)于此論文中成功采集到視頻流,是離不開(kāi)我的朋友和老師的幫助。尤其是在調(diào)試過(guò)程中,BUG多的不是一點(diǎn)點(diǎn)。所以在調(diào)試這方面除了軟件方面,硬件方面的難點(diǎn)也是重中之重。下面我就講述我所遇到的對(duì)我來(lái)說(shuō)很重要的難點(diǎn)及重點(diǎn)的一些調(diào)試問(wèn)題。1) 硬件方面來(lái)講:(1) 就是在開(kāi)始的時(shí)候,開(kāi)發(fā)板和PC版上串口連接后進(jìn)行u-boot移植

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論