版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 武漢工業(yè)學(xué)院2007年畢業(yè)論文 目錄摘要3abstract4第1章 緒論51.1課題背景51.1.1 嵌入式系統(tǒng)定義51.1.2 嵌入式系統(tǒng)的特點(diǎn)51.1.3 嵌入式系統(tǒng)現(xiàn)狀51.1.4 嵌入式系統(tǒng)的發(fā)展趨勢(shì)61.1.5 嵌入式操作系統(tǒng)介紹61.1.6 嵌入式系統(tǒng)的開(kāi)發(fā)流程7第2章 系統(tǒng)總體設(shè)計(jì)方案92.1可視門(mén)鈴系統(tǒng)簡(jiǎn)介92.2可視門(mén)鈴系統(tǒng)的工作原理92.3可視門(mén)鈴系統(tǒng)方案設(shè)計(jì)102.4核心處理器選型122.5 usb攝像頭的選擇122.6是否采用硬件壓縮12第3 章 開(kāi)發(fā)環(huán)境的建立133.1嵌入式開(kāi)發(fā)環(huán)境概述133.2 安裝交叉編譯工具鏈133.3設(shè)置tftp 服務(wù)器143.4設(shè)置min
2、icom153.5使用 u-boot163.5.1 bootloader概述163.5.2 燒寫(xiě)u-boot183.5.2設(shè)置u-boot 的參數(shù)193.5.3宿主機(jī)和目標(biāo)板的連接19第4章 linux 內(nèi)核移植204.1 linux操作系統(tǒng)介紹204.2 裁剪內(nèi)核204.3測(cè)試編譯完畢的內(nèi)核22第5章 linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)255.1 linux 設(shè)備驅(qū)動(dòng)程序基礎(chǔ)255.1.1 驅(qū)動(dòng)程序分類(lèi)255.1.2 設(shè)備驅(qū)動(dòng)中的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)265.1.3 主設(shè)備號(hào)和從設(shè)備號(hào)275.1.4 設(shè)備節(jié)點(diǎn),節(jié)點(diǎn)文件和設(shè)備文件275.2加載linux 驅(qū)動(dòng)的方法275.3按鍵驅(qū)動(dòng)程序的編寫(xiě)285.4添加按鍵
3、驅(qū)動(dòng)程序到內(nèi)核34第6 章 服務(wù)器端圖像的采集356.1 video4linux 編程概述356.2 圖像采集366.3 圖像的壓縮376.3.1 jpeg 簡(jiǎn)介及 jpeglib 安裝376.3.2 jpeg 壓縮具體實(shí)現(xiàn)38第7章 客戶(hù)端圖像的顯示397.1 minigui 概述397.2 minigui 的移植397.2.1 minigui運(yùn)行環(huán)境的搭建407.2.2交叉編譯minigui407.3 用minigui 顯示jpeg 圖片43總結(jié)與體會(huì)47致謝48主要參考文獻(xiàn)49 摘要 linux 是近年來(lái)發(fā)展較快的一種操作系統(tǒng),而且它在嵌入式領(lǐng)域的應(yīng)用越來(lái)越廣泛。本次畢業(yè)設(shè)計(jì)的課題就是“
4、基于linux的嵌入式無(wú)線(xiàn)可視門(mén)鈴系統(tǒng)的設(shè)計(jì)”。該可視門(mén)鈴系統(tǒng)是一個(gè)基于高性能嵌入式處理器,結(jié)合 linux操作系統(tǒng),由服務(wù)器端和客戶(hù)端兩部分組成的系統(tǒng)。在服務(wù)器端,當(dāng)訪(fǎng)客將按下門(mén)鈴時(shí),通過(guò)一個(gè)usb 攝像頭來(lái)采集訪(fǎng)客的圖像,然后用jpeg算法對(duì)獲取的圖像進(jìn)行壓縮,最后以無(wú)線(xiàn)的方式發(fā)送.客戶(hù)端則負(fù)責(zé)圖像的接收,然后通過(guò)minigui 顯示jpeg 圖像。 本文只討論服務(wù)器端訪(fǎng)客的圖像數(shù)據(jù)的采集和壓縮,客戶(hù)端圖象的顯示,不討論圖象的無(wú)線(xiàn)傳輸。主要內(nèi)容包括嵌入式開(kāi)發(fā)環(huán)境的建立,linux 操作系統(tǒng)的移植,minigui 的移植,linux 操作系統(tǒng)下驅(qū)動(dòng)程序的編寫(xiě)和應(yīng)用程序的編寫(xiě)。關(guān)鍵字: 嵌入式
5、 linux 驅(qū)動(dòng)程序 v4l 圖像采集 minigui abstractin recent years, linux operating system developed very fast, and in the field of embedded applications it becomes more extensive. my graduation design topic is wireless doorbell visualization system designment based on embedded linux a high-performance embedded p
6、rocessor was used in the doorbell visualization system which combined linux operating system and consisted of the server and client. on the server end, the visitors will press the doorbell, we can obtain visitorss images through a usb camera. then compress these images using jpeg algorithm. finally,
7、 the wireless dispatch. the client is responsible for the image receiving. then minigui system display jpeg images. this article will only discuss the visitorss images data collection and compression at server end, images display at client, not to discuss the wireless transmission of images. main co
8、ntent including the establishment of embedded development environment, the linux operating systems porting , miniguis porting , linux device driver development, linux application programs development.keyword: embed linux driver v4l minigui 第1章 緒論1.1課題背景1.1.1 嵌入式系統(tǒng)定義 隨著后pc 時(shí)代的到來(lái),網(wǎng)絡(luò)、通信、無(wú)線(xiàn)技術(shù)得以充分發(fā)展,把處理器
9、嵌入到各種個(gè)性化產(chǎn)品中去已是大勢(shì)所趨。嵌入式系統(tǒng)(embeded system)無(wú)疑是pc 時(shí)代最熱門(mén)的話(huà)題。但究竟什么是嵌入式系統(tǒng)?其確切定義一直在演變,而且仍在不斷討論之中。這里給出一個(gè)被廣泛采納的定義:嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)一般由嵌入式微處理器,外圍硬件設(shè)備,嵌入式操作系統(tǒng)以及用戶(hù)的應(yīng)用程序4個(gè)部分組成。 下面是電氣工程師協(xié)會(huì)對(duì)嵌入式系統(tǒng)的定義:嵌入式系統(tǒng)是用來(lái)控制或者監(jiān)視機(jī)器、裝置,工廠等大規(guī)模系統(tǒng)的設(shè)備。 當(dāng)然,還有很多對(duì)嵌入式系統(tǒng)的定義,盡管他們從不同的角度
10、去定義嵌入式系統(tǒng),但這些定義在本質(zhì)上是相同的。我們沒(méi)有必要搞清楚每一個(gè)對(duì)嵌入式系統(tǒng)的定義。1.1.2 嵌入式系統(tǒng)的特點(diǎn)(1)硬件平臺(tái)的多樣性。(2)嵌入式系統(tǒng)功耗低,體積小,專(zhuān)用性強(qiáng)。(3)嵌入式系統(tǒng)往往具有更少的存儲(chǔ)容量。(3)嵌入式系統(tǒng)的硬件和軟件都必須被高效率的設(shè)計(jì),實(shí)時(shí)性要強(qiáng)。(4)開(kāi)發(fā)嵌入式系統(tǒng)需要專(zhuān)門(mén)的開(kāi)發(fā)工具和開(kāi)發(fā)環(huán)境。1.1.3 嵌入式系統(tǒng)現(xiàn)狀 后pc 時(shí)代,嵌入式系統(tǒng)無(wú)疑擁有最大的市場(chǎng)。近年來(lái)微電子技術(shù)迅猛發(fā)展,處理器增長(zhǎng)速度也隨之加快,特別是互聯(lián)網(wǎng)的普及,給嵌入式的發(fā)展帶來(lái)活力。嵌入式控制器的應(yīng)用幾乎無(wú)處不在:移動(dòng)電話(huà)、家用電器、汽車(chē)無(wú)不有它的蹤影。嵌入控制器因其體積小、可
11、靠性高、功能強(qiáng)、靈活方便等許多優(yōu)點(diǎn),其 應(yīng)用已深入到工業(yè)、農(nóng)業(yè)、教育、國(guó)防、科研以及日常生活等各個(gè)領(lǐng)域,對(duì)各行各業(yè)的技術(shù)改造、產(chǎn)品更新?lián)Q代、加速自動(dòng)化化進(jìn)程、提高生產(chǎn)率等方面起到了極其重要的推動(dòng)作用。 嵌入式計(jì)算機(jī)在應(yīng)用數(shù)量上遠(yuǎn)遠(yuǎn)超過(guò)了各種通用計(jì)算機(jī),一臺(tái)通用計(jì)算機(jī)的外部設(shè)備 中就包含了5 - 10 個(gè)嵌入式微處理器。在制造工業(yè)、過(guò)程控制、網(wǎng)絡(luò)、通訊、儀器、儀表、汽車(chē)、船舶、航空、航天、軍事裝備、消費(fèi)類(lèi)產(chǎn)品等方面均是嵌入式計(jì)算機(jī)的應(yīng)用領(lǐng)域。1.1.4 嵌入式系統(tǒng)的發(fā)展趨勢(shì)互聯(lián)網(wǎng)的普及,不僅為嵌入式市場(chǎng)展現(xiàn)了美好前景,注入了新的生命;同時(shí)也對(duì)嵌入式系統(tǒng)技術(shù),特別是軟件技術(shù)提出新的要求。這主要包括
12、:支持日趨增長(zhǎng)的功能密度、靈活的網(wǎng)絡(luò)聯(lián)接、輕便的移動(dòng)應(yīng)用和多媒體的信息處理。在未來(lái)的嵌入式產(chǎn)品中,網(wǎng)絡(luò)功能已成為基本功能,未來(lái)的嵌入式產(chǎn)品將有更小的體積、更低的功耗、更低的成本,還會(huì)提供多媒體的支持,提供更友好的用戶(hù)界面。 1.1.5 嵌入式操作系統(tǒng)介紹 據(jù)調(diào)查,目前全世界的嵌入式操作系統(tǒng)已經(jīng)有兩百多種。隨著嵌入式領(lǐng)域的發(fā)展,各種各樣的嵌入式操作系統(tǒng)相繼問(wèn)世。這其中有許多商業(yè)的嵌入式操作系統(tǒng),也有大量開(kāi)放源碼的嵌入式操作系統(tǒng)。其中著名的嵌入式操作系統(tǒng)有:uc/os、 vxworks、neculeus、linux和windowsce等。下面介紹一下在國(guó)內(nèi)影響較大的一些嵌入式操作系統(tǒng): (1)li
13、nux 在所有的操作系統(tǒng)中,linux 是一個(gè)發(fā)展最快,應(yīng)用最為廣泛的操作系統(tǒng),linux 本身的種種特性使其成為嵌入式開(kāi)發(fā)中的首選。嵌入式linux 版本還有多種變體。例如: rtlinux 通過(guò)改造內(nèi)核實(shí)現(xiàn)了實(shí)時(shí)的linux;還有uclinux去掉了linux 的mmu(內(nèi)存管理單元),能夠支持沒(méi)有mmu 的處理器等。(2)uc/osuc/os 是一個(gè)典型的實(shí)時(shí)操作系統(tǒng)。它的特點(diǎn)是:公開(kāi)源代碼,代碼結(jié)構(gòu)清晰,注釋詳盡,組織有條理??梢浦残院谩⒖刹眉?、可固化、搶占式內(nèi)核,最多可以管理60個(gè)任務(wù)。該系統(tǒng)短小精悍,是研究和學(xué)習(xí)實(shí)時(shí)操作系統(tǒng)的首選。(3)windowscewindowsce 是微軟
14、的產(chǎn)品,它是從整體上為資源有限的平臺(tái)設(shè)計(jì)的多線(xiàn)程,完整優(yōu)先權(quán),多任務(wù)的操作系統(tǒng)。windowsce 采用模塊化設(shè)計(jì),并允許它對(duì)于從掌上電腦到專(zhuān)用的工控電子設(shè)備進(jìn)行定制。(4)vxworksvxworks 是windriver 公司專(zhuān)門(mén)為實(shí)時(shí)嵌入式系統(tǒng)開(kāi)發(fā)的操作系統(tǒng)軟件。為程序員提供了高效的實(shí)時(shí)任務(wù)調(diào)度,中斷管理。實(shí)時(shí)的系統(tǒng)資源以及實(shí)時(shí)的任務(wù)通信。應(yīng)用程序員可以將盡可能多的精力放在應(yīng)用程序本身,而不必去關(guān)心系統(tǒng)資源的管理,該系統(tǒng)主要應(yīng)用在單板機(jī),數(shù)據(jù)網(wǎng)絡(luò)和通信等多方面。1.1.6 嵌入式系統(tǒng)的開(kāi)發(fā)流程 對(duì)于一個(gè)嵌入式系統(tǒng),基本的處理器和核心電路是固定的,操作系統(tǒng)是已經(jīng)移植好的。我們所要做的工作就
15、是看看是否要添加外設(shè),然后編寫(xiě)所添加外設(shè)的驅(qū)動(dòng)程序,最后就是編寫(xiě)應(yīng)用程序。其開(kāi)發(fā)流程圖如1.1所示,也就是說(shuō),如果選擇了一個(gè)成熟的嵌入式系統(tǒng),則會(huì)避免重復(fù)勞動(dòng),縮短開(kāi)發(fā)周期。用戶(hù)需求選擇嵌入式處理器及硬件平臺(tái)選擇合適的嵌入式操作系統(tǒng)在操作系統(tǒng)上開(kāi)發(fā)應(yīng)用程序整個(gè)系統(tǒng)測(cè)試應(yīng)用程序測(cè)通試過(guò)?開(kāi)發(fā)結(jié)束是否 圖1.1 嵌入式系統(tǒng)開(kāi)發(fā)流程圖 第2章 系統(tǒng)總體設(shè)計(jì)方案2.1可視門(mén)鈴系統(tǒng)簡(jiǎn)介 近幾年來(lái), 隨著市場(chǎng)上智能化樓宇的不斷升溫, 門(mén)鈴系統(tǒng)已作為智能化辦公室和智能化住宅小區(qū)的一個(gè)重要組成部分,被各商家和用戶(hù)所接受。此外隨著居民住宅的不斷增加,小區(qū)的物業(yè)管理就顯得日趨重要。其中訪(fǎng)客登記及值班看門(mén)的管理方法
16、已不適合現(xiàn)代管理快捷、方便、安全的需求。人們已開(kāi)始習(xí)慣用門(mén)鈴系統(tǒng)代替?zhèn)鹘y(tǒng)的鐵鑰匙去管理各通道門(mén), 這使門(mén)鈴系統(tǒng)得到了飛躍性的發(fā)展。繼語(yǔ)音門(mén)鈴悄然走入尋常百姓的家庭,隨之而來(lái)的可視化門(mén)鈴也逐漸成為普及之勢(shì)。2.2可視門(mén)鈴系統(tǒng)的工作原理 當(dāng)訪(fǎng)客將按下門(mén)鈴時(shí),可視門(mén)鈴自動(dòng)攝下訪(fǎng)客圖像。門(mén)鈴系統(tǒng)將訪(fǎng)客信息(這里指訪(fǎng)客圖像)傳到住戶(hù)的系統(tǒng)。住戶(hù)接到呼叫后,根據(jù)傳輸過(guò)來(lái)的訪(fǎng)客信息來(lái)確定是否允許該訪(fǎng)客進(jìn)入。如果住戶(hù)不在,視頻信息將在住戶(hù)端保存;住戶(hù)回家后,就能知道有誰(shuí)來(lái)訪(fǎng)過(guò)。住戶(hù)將確認(rèn)信息(允進(jìn)入或不允許進(jìn)入)發(fā)送到門(mén)鈴系統(tǒng),訪(fǎng)客將得到住戶(hù)所確認(rèn)的信息,即允許進(jìn)入或不允許進(jìn)入。系統(tǒng)整體結(jié)構(gòu)圖如圖2.1所示:
17、無(wú)線(xiàn)網(wǎng)絡(luò)服務(wù)器端客戶(hù)端 圖2.1 系統(tǒng)整體結(jié)構(gòu)圖2.3可視門(mén)鈴系統(tǒng)方案設(shè)計(jì) 本可視門(mén)鈴系統(tǒng)采用c-s模式,即有客戶(hù)端和服務(wù)器端兩部分組成,無(wú)線(xiàn)可視門(mén)鈴是一個(gè)基于高性能嵌入式處理器,結(jié)合 linux操作系統(tǒng),由服務(wù)器端和客戶(hù)端兩部分組成的系統(tǒng)。服務(wù)器端具體實(shí)現(xiàn)功能如下: 由攝像頭進(jìn)來(lái)的輸入信號(hào),經(jīng)過(guò)轉(zhuǎn)換后進(jìn)行jpeg視頻編碼。編碼后的視頻碼流送到客戶(hù)端。具體功能如下:(1)基于高性能嵌入式處理器等硬件系統(tǒng)的加電自舉boot loader功能,具有系統(tǒng)硬件初始化和檢測(cè),嵌入式操作系統(tǒng)或用戶(hù)程序的裝載啟動(dòng)功能。(2)攝像頭驅(qū)動(dòng)的加載。(3)獲取從攝像頭傳來(lái)的圖像數(shù)據(jù),并以jpeg的格式進(jìn)行壓縮編碼。
18、(4)將壓縮編碼后的數(shù)據(jù)流通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)進(jìn)行轉(zhuǎn)發(fā)。 服務(wù)器端系統(tǒng)結(jié)構(gòu)圖如圖2.1所示: s3c2410cpujtag以太網(wǎng)控制器rs232sdramflashusb camera連宿主機(jī)連互聯(lián)網(wǎng) 圖2.2 服務(wù)器端系統(tǒng)結(jié)構(gòu)圖 在客戶(hù)端,由無(wú)線(xiàn)網(wǎng)絡(luò)接收的數(shù)據(jù),顯示jpeg 格式的圖象。 下面是客戶(hù)端系統(tǒng)結(jié)構(gòu)示意圖: s3c2410cpujtag以太網(wǎng)控制器rs232sdramflash連宿主機(jī)連互聯(lián)網(wǎng)lcd模塊 圖2.3 客戶(hù)端系統(tǒng)結(jié)構(gòu)圖 軟件主要包括嵌入式linux移植、minigui的移植、驅(qū)動(dòng)的編寫(xiě)和應(yīng)用程序編寫(xiě)。移植后的linux 系統(tǒng)從軟件的角度來(lái)看通常可以分成個(gè)四個(gè)層次:引導(dǎo)加載程序程
19、序、kernel、文件系統(tǒng)和用戶(hù)應(yīng)用程序。(1) 引導(dǎo)加載程序程序。包括固化在固件(firmware)中的啟動(dòng)代碼和bootloader 兩大部分。(2) 內(nèi)核。特定于嵌入式板子的定制內(nèi)核以及控制內(nèi)核引導(dǎo)系統(tǒng)的參數(shù)。(3) 文件系統(tǒng)。包括根文件系統(tǒng)和建立于flash內(nèi)存設(shè)備之上的文件系統(tǒng)。通常用ramdisk作為根文件系統(tǒng)。它是提供管理系統(tǒng)的各種配置文件以及系統(tǒng)執(zhí)行用戶(hù)應(yīng)用程序的良好的運(yùn)行環(huán)境的載體。(4) 用戶(hù)應(yīng)用程序。特定于用戶(hù)的應(yīng)用程序,有時(shí)在用戶(hù)應(yīng)用程序和內(nèi)核層之間可能還會(huì)包括一個(gè)嵌入式圖形用戶(hù)界面。 下面是典型的固態(tài)存儲(chǔ)設(shè)備的空間分配結(jié)構(gòu)示意圖。 根文件系統(tǒng) 內(nèi)核 啟動(dòng)參數(shù)bootl
20、oader2.4核心處理器選型 由于可視門(mén)鈴需要處理圖像,所以對(duì)處理器的要求比較高,故選用在國(guó)內(nèi)使用比較廣泛的s3c2410處理器。 s3c2410處理器是samsung公司基于arm公司的arm920t處理器核,采用0.18um制造工藝的32位微控制器。該處理器擁有:(1)獨(dú)立的 16kb指令cache和16kb數(shù)據(jù)cache,mmu。(2)支持tft的lcd控制器,nand閃存控制器。(3)3路uart,4路dma,4路帶pwm的 timer ,i/o口,rtc,8路10位adc,touch screen接口,iic-bus 接口,iis-bus 接口,2個(gè)usb主機(jī),1個(gè)usb設(shè)備,sd
21、主機(jī)和mmc接口,2路spi。(4)s3c2410處理器最高可運(yùn)行在203mhz。2.5 usb攝像頭的選擇 由于目前支持linux 的硬件廠商還不是很多,導(dǎo)致linux可以使用的攝像頭也比較少,通常在linux 下能夠使用的攝像頭主要有基于ov511 芯片的攝像頭和基于中星微 zc301 芯片的攝像頭。其中l(wèi)inux 內(nèi)核很早就能夠支持基于ov511 芯片的攝像頭。如果要使用基于中星微 zc301 芯片的攝像頭的話(huà),則必須下載該攝像頭的驅(qū)動(dòng),然后在內(nèi)核中編譯才能使用,而且在編譯的過(guò)程中可能會(huì)碰到問(wèn)題。故我們選擇了基于ov511 芯片的攝像頭。2.6是否采用硬件壓縮 在嵌入式系統(tǒng)開(kāi)發(fā)中,有些功
22、能可以由硬件來(lái)實(shí)現(xiàn),也可以由軟件來(lái)實(shí)現(xiàn)。這里我們的圖像還要通過(guò)網(wǎng)絡(luò)來(lái)傳輸。我們從攝像頭獲取的是原始的圖像數(shù)據(jù),數(shù)據(jù)容量很大,不適合直接拿來(lái)傳輸,因此我們需要對(duì)這些圖像數(shù)據(jù)進(jìn)行壓縮。有很多的壓縮算法可供我們選擇,我們采用jpeg 方式。這可以交給專(zhuān)門(mén)的壓縮芯片來(lái)解決,也可以采用軟件壓縮。采用硬件壓縮成本較高,但可靠性高,效率高,而采用軟件壓縮則可以降低成本。由于可視門(mén)鈴在大多數(shù)時(shí)候都處于休眠狀態(tài),只有訪(fǎng)客到來(lái)時(shí)才會(huì)獲取圖像,且不是實(shí)時(shí)監(jiān)控,故對(duì)圖像的壓縮和傳輸要求不高,故這里采用軟件壓縮的方法。 第3 章 開(kāi)發(fā)環(huán)境的建立3.1嵌入式開(kāi)發(fā)環(huán)境概述 絕大多數(shù)linux的軟件開(kāi)發(fā)都以native方式進(jìn)
23、行,即本機(jī)開(kāi)發(fā)、調(diào)試,本機(jī)運(yùn)行的方式。這種方式通常不適于嵌入式系統(tǒng)的軟件開(kāi)發(fā),因?yàn)閷?duì)于嵌入式系統(tǒng)的開(kāi)發(fā),它沒(méi)有足夠的資源在本機(jī)(即嵌入式系統(tǒng)平臺(tái))運(yùn)行開(kāi)發(fā)工具和調(diào)試工具。通常的嵌入式系統(tǒng)軟件開(kāi)發(fā)采用交叉編譯調(diào)試的方式。交叉編譯調(diào)試環(huán)境建立在宿主機(jī)主機(jī)上,對(duì)應(yīng)的開(kāi)發(fā)板叫做目標(biāo)板。通常宿主機(jī)和目標(biāo)板上的處理器不同,宿主機(jī)通常為intel處理器,而目標(biāo)板為 samsung s3c2410,所以程序需要使用針對(duì)處理器特點(diǎn)的編譯器才能生成在相應(yīng)平臺(tái)上可運(yùn)行的代碼。gnu編譯器提供這樣的功能,在編譯時(shí),可以選擇開(kāi)發(fā)所需的宿主機(jī)和目標(biāo)機(jī),從而建立開(kāi)發(fā)環(huán)境。在進(jìn)行嵌入式開(kāi)發(fā)前的第一步工作就是把一臺(tái)pc機(jī)作為宿
24、主機(jī)開(kāi)發(fā)并在其上安裝指定的操作系統(tǒng)。對(duì)于嵌入式 linux,宿主機(jī)pc上應(yīng)安裝linux系統(tǒng)。之后,在宿主機(jī)上建立交叉編譯調(diào)試的開(kāi)發(fā)環(huán)境。3.2 安裝交叉編譯工具鏈 在pc 機(jī)(宿主機(jī))上,linux 已經(jīng)成為優(yōu)秀的計(jì)算機(jī)操作系統(tǒng),各種linux 發(fā)行版本,可以直接在pc 上安裝,功能十分強(qiáng)大。我們選用的 linux 發(fā)行版本,是redhat enterprise 3 as, 是基于2.6.9 版本的linux 內(nèi)核,它很容易上手,安裝它也很簡(jiǎn)單,有和windows 一樣友好的安裝界面。這里就不再詳述了。 linux 使用gun 的工具,社區(qū)的開(kāi)發(fā)者已經(jīng)編譯出了常用體系結(jié)構(gòu)的工具鏈,從inte
25、rnet 上就可以下載。我們可以下載這些工具,建立交叉開(kāi)發(fā)環(huán)境,也可以自己手動(dòng)編譯新的工具鏈。由于自己手動(dòng)編譯新的工具鏈,有很多版本兼容的問(wèn)題,現(xiàn)在網(wǎng)上很容易下載已經(jīng)作做好的工具鏈,在這項(xiàng)工作上浪費(fèi)時(shí)間似乎已沒(méi)有任何意義。 這里我們直接采用已有的交叉工具鏈arm-elf-tools-20030314.sh 。在shell 下執(zhí)行如下命令:rootsunlife zhc#sh arm-elf-tools-20030314.sh 即可安裝。 交叉編譯器產(chǎn)生能夠運(yùn)行在目標(biāo)板上的代碼。 下面是交叉編譯的示意圖: 圖3.1 交叉編譯示意圖3.3設(shè)置tftp 服務(wù)器tftp協(xié)議是一個(gè)簡(jiǎn)單的基于udp文件傳
26、輸協(xié)議,其實(shí)現(xiàn)比較簡(jiǎn)單,使用方便。tftp服務(wù)在linu上有客戶(hù)端和服務(wù)器端兩個(gè)軟件包??梢韵瓤纯茨愕膒c機(jī)器上是否已經(jīng)安裝了tftp客戶(hù)端和服務(wù)器端:rootsunlife # rpm -q tftptftp-0.39-1rootsunlife # rpm -q tftp-servertftp-server-0.39-1rootsunlife # 如果已經(jīng)安裝,就可以配置它了。tftp可以通過(guò)圖形化的界面來(lái)配置。也可以手工配置。當(dāng)然操作要有root權(quán)限,手工修改tftp配置文件,可以定制tftp服務(wù)。其配置文件/etc/xintd.d/tftp內(nèi)容如下:rootsunlife # cat /
27、etc/xinetd.d/tftp#default: off#description: the tftp server serves files using the trivial file transfer# protocol. the tftp protocol is often used to boot diskless # workstations, download configuration files to network-aware printers,# and to start the installation process for some operating syste
28、ms.service tftp disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 1002 flags = ipv4rootsunlife #tftp服務(wù)器默認(rèn)把/tftpboot作為輸出文件的根目錄,當(dāng)然你也可以換成其他目錄。 tftp服務(wù)器默認(rèn)是關(guān)閉的。所以要將disable設(shè)為no.server是指定tftp服務(wù)器的服務(wù)器程序?yàn)?usr/sbin
29、/in.tftpd(它是一個(gè)守護(hù)進(jìn)程)。 修改配置以后,就要重新啟動(dòng)tftp服務(wù):rootsunlife # /etc/init.d/xinetd restart 停止 xinetd: 確定 啟動(dòng) xinetd: 確定 rootsunlife #即可。3.4設(shè)置minicomlinux系統(tǒng)下通常使用minicom串口通信工具,就像windows下的超級(jí)終端。由于minicom不是圖形窗口的工具,操作起來(lái)要麻煩一些。使用minicom串口終端之前,先要配置參數(shù)。minicom的配置界面是菜單方式。在shell命令下執(zhí)行“minicom -s”命令,注意minicom程序要訪(fǎng)問(wèn)串口設(shè)備,需要以ro
30、ot 的權(quán)限操作。選擇“serial port setup”菜單項(xiàng),根據(jù)目標(biāo)板的串口通訊參數(shù)設(shè)置。這些配置項(xiàng)都有快捷鍵,可以通過(guò)相應(yīng)的按鍵選擇進(jìn)入子項(xiàng).選擇要使用的串口設(shè)備,這里選擇/dev/ttys0,即串口1,設(shè)置波特率為115200, 8位有效數(shù)據(jù),無(wú)奇偶校驗(yàn),無(wú)數(shù)據(jù)流控制。保存配置,退出。minicom 的配置參數(shù)缺省保存在/etc/minirc.df1 文件中,內(nèi)容如下:rootsunlife etc# cat minirc.dfl# machine-generated file - use minicom -s to change parameters.pr port /dev/t
31、tys0pu baudrate 115200pr bits 8pr parity npr stopbits 1pu minitpu mresetpu rtscts norootsunlife etc#在shell命令下執(zhí)行“minicom ”命令,進(jìn)入minicom 控制臺(tái)。3.5使用 u-boot 3.5.1 bootloader概述 前面宿主機(jī)上的開(kāi)發(fā)環(huán)境已基本搭建起來(lái),可是目標(biāo)板上還什么都沒(méi)有。對(duì)于計(jì)算機(jī)系統(tǒng)來(lái)說(shuō),從開(kāi)機(jī)上電到操作系統(tǒng)啟動(dòng)需要一個(gè)引導(dǎo)過(guò)程。嵌入式linux系統(tǒng)同樣離不開(kāi)引導(dǎo)程序,這個(gè)引導(dǎo)程序就叫做bootloader (引導(dǎo)加載程序)。 bootloader 是系統(tǒng)上電后
32、運(yùn)行的第一段代碼。一般它只在系統(tǒng)啟動(dòng)的時(shí)運(yùn)行非常短的時(shí)間,但對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),這是一個(gè)非常重要的系統(tǒng)組成部分。構(gòu)建或移植一個(gè)bootloader 在嵌入式開(kāi)發(fā)中是一個(gè)很普通的任務(wù)。在pc 中,引導(dǎo)加載程序有bios 和位于硬盤(pán)mbr 中的操作系統(tǒng)引導(dǎo)加載程序一起組成。bios 在完成硬件檢測(cè)和資源分配后,將硬盤(pán)mbr 中的引導(dǎo)加載程序讀到系統(tǒng)的ram 中,然后將控制權(quán)交給操作系統(tǒng)引導(dǎo)程序。引導(dǎo)加載程序的主要運(yùn)行任務(wù)就是將內(nèi)核從硬盤(pán)上讀到ram 中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開(kāi)始啟動(dòng)操作系統(tǒng)。 在嵌入式系統(tǒng)中,通常并沒(méi)有像bios 那樣的固件程序。因此在一般典型的系統(tǒng)中,整個(gè)系統(tǒng)的加載啟
33、動(dòng)任務(wù)就完全由bootloader 來(lái)完成。在一個(gè)基于arm 的嵌入式系統(tǒng)中,系統(tǒng)在上電復(fù)位時(shí)通常都從地址0x00000000 處開(kāi)始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的bootloader 通過(guò)這段小程序可以初始化硬件設(shè)備,建立內(nèi)存的空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境設(shè)置到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)準(zhǔn)備好正確的環(huán)境。對(duì)于嵌入式系統(tǒng),bootloader是基于特定硬件平臺(tái)來(lái)實(shí)現(xiàn)的。因此,幾乎不可能為所有的嵌入式系統(tǒng)建立一個(gè)通用的bootloader ,不同的處理器架構(gòu)都有不同的bootloader 。bootloader不但依賴(lài)于cpu 的體系結(jié)構(gòu),而且依賴(lài)于嵌入式系統(tǒng)板極設(shè)
34、備的配置。對(duì)于2塊不同的嵌入式板而言。即使它們使用同一種處理器,要想讓運(yùn)行在一塊板子的bootloader程序也運(yùn)行在另一塊板子上,一般也都需要修改 bootloader的源程序。反過(guò)來(lái),大部分bootloader 仍然具有很多共性,某些bootloader 也能夠支持多種體系結(jié)構(gòu)的嵌入式系統(tǒng)。例如: u-boot 就同時(shí)支持powerpc 、 arm、 mips 和x86 等體系結(jié)構(gòu),支持的板子有上百種。通常,它們都能夠自動(dòng)從存儲(chǔ)介質(zhì)上啟動(dòng),都能夠引導(dǎo)操作系統(tǒng)啟動(dòng),并且大部分都可以支持串口和以太網(wǎng)口。主機(jī)和目標(biāo)機(jī)之間一般都有串口可以連接, bootloader 軟件通常會(huì)通過(guò)串口來(lái)輸入輸出。
35、例如: 輸出出錯(cuò)或者執(zhí)行結(jié)果到串口終端,從串口讀取用戶(hù)控制命令等。大多數(shù) bootloader 都包含兩種不同的模式:(1)啟動(dòng)加載模式在這種模式下, bootloader 從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到ram 中運(yùn)行,整個(gè)過(guò)程并沒(méi)有用戶(hù)的介入。這種模式是 bootloader 的正常工作模式,因此在嵌入式產(chǎn)品發(fā)布時(shí), bootloader 必須工作在這種方式下。(2)下載模式在這種模式下,目標(biāo)機(jī)上的 bootloader 將通過(guò)串口或網(wǎng)絡(luò)等通信手段從開(kāi)發(fā)主機(jī)上下載內(nèi)核映象和根文件系統(tǒng)等到ram 中,然后可以再被 bootloader 下載到目標(biāo)機(jī)上的固態(tài)存儲(chǔ)媒介中,或者直接進(jìn)
36、行系統(tǒng)的引導(dǎo)。前一種功能通常用于第一次燒寫(xiě)內(nèi)核與根文件系統(tǒng)到固態(tài)存儲(chǔ)媒介中或者以后的系統(tǒng)更新時(shí)使用,后者多用于開(kāi)發(fā)人員在前期開(kāi)發(fā)的過(guò)程中,工作于這種模式下的 bootloader 通常都會(huì)向它的終端用戶(hù)提供一個(gè)簡(jiǎn)單的命令行接口。bootloader 是嚴(yán)重依賴(lài)于硬件而實(shí)現(xiàn)的,每種不同體系結(jié)構(gòu)的處理器都有不同的 bootloader 。不過(guò) bootloader 的發(fā)展也趨于支持多種體系結(jié)構(gòu),比如u-boot 從最初的只支持powerpc ,到目前同時(shí)支持powerpc 、arm、 mips、 x86 等多種體系結(jié)構(gòu)。除了依賴(lài)于處理器的體系結(jié)構(gòu)外,對(duì)于兩塊不同的嵌入式板而言,即使它們是基于同一種
37、處理器而構(gòu)建的,要想讓運(yùn)行在一塊板子上的 bootloader 程序也能運(yùn)行在另一塊板子上,通常也都需要對(duì) bootloader 進(jìn)行移植工作。所以在嵌入式世界里建立一個(gè)通用的 bootloader 幾乎是不可能的。于是出現(xiàn)多種引導(dǎo)加載程序,如 armboot、 blob、 redboot、 vivi 和u-boot 等。bootloader 的啟動(dòng)流程。bootloader 啟動(dòng)大多數(shù)都分為兩個(gè)階段。第一個(gè)階段主要包含依賴(lài)于cpu 的體系結(jié)構(gòu)硬件處始化的代碼,通常都用匯編語(yǔ)言來(lái)實(shí)現(xiàn)。這個(gè)階段的任務(wù)有:(1)基本的硬件設(shè)備初始化(屏蔽所有的中斷,關(guān)閉處理器內(nèi)部指令/數(shù)據(jù)cache 等)。(2)
38、為第二階段準(zhǔn)備ram 空間。(3)如果是從某個(gè)固態(tài)存儲(chǔ)媒介中,則復(fù)制 bootloader 的第二階段代碼到 ram。(4)設(shè)置堆棧。(5)跳轉(zhuǎn)到第二階段的c 程序入口點(diǎn)。第二階段通常由c 語(yǔ)言來(lái)完成。以便實(shí)現(xiàn)更復(fù)雜的功能。也使程序有更好的可讀性和可移植性,這個(gè)階段的任務(wù)有:(1)初始化本階段要使用到的硬件設(shè)備。(2)檢測(cè)系統(tǒng)內(nèi)存映射。(3)將內(nèi)核映象和根文件系統(tǒng)從flash 讀到ram 。(4)為內(nèi)核設(shè)置啟動(dòng)參數(shù)。(5)調(diào)用內(nèi)核。bootloader 調(diào)用linux 內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處。3.5.2 燒寫(xiě)u-boot上面介紹了bootloader 的工作原理,在本設(shè)計(jì)中,
39、我們采用了已經(jīng)移植好的u-boot ,把u-boot 燒寫(xiě)到開(kāi)發(fā)板的flash 中去,最簡(jiǎn)單的方式就是通過(guò)jtag 電纜,轉(zhuǎn)接到計(jì)算機(jī)并口聯(lián)接,也可以通過(guò)串口或仿真器來(lái)燒寫(xiě)bootloader 。燒寫(xiě)完畢后,把目標(biāo)板和宿主機(jī)用串口線(xiàn)連起來(lái),把目標(biāo)板和hub 用網(wǎng)線(xiàn)連起來(lái)。在宿主機(jī)端打開(kāi)minicom,給開(kāi)發(fā)板上電,就會(huì)出現(xiàn)如下界面:u-boot 1.1.4 (feb 28 2007 - 21:28:24) u-boot code: 33f80000 - 33f9dc88 bss: - 33fa22f8 ram configuration: bank #0: 30000000 64 mb nor
40、 flash: 512 kb nand flash: 64 mbin: serial out: serial err: serial hit any key to stop autoboot: 03.5.2設(shè)置u-boot 的參數(shù)設(shè)置tftp服務(wù)器(即宿主機(jī))的ip 地址:sunlife= setenv severip 35 設(shè)置目標(biāo)板自己的ip 地址和子網(wǎng)掩碼:sunlife=setenv ipaddr 97 netmask 28保存設(shè)置的參數(shù):sunlife=saveenv獲取幫助:sunlife=help3.5.3
41、宿主機(jī)和目標(biāo)板的連接一般來(lái)說(shuō),宿主機(jī)和目標(biāo)板是通過(guò)串口或者網(wǎng)口的方式來(lái)連接的,或者兩者兼有。我們采用的是串口和網(wǎng)口連接的方式。把宿主機(jī)的串口1和目標(biāo)板的串口1用串口線(xiàn)連接起來(lái)。然后把宿主機(jī)的網(wǎng)線(xiàn)和開(kāi)發(fā)板的網(wǎng)線(xiàn)插在同一個(gè)hub 上即可。至此,嵌入式開(kāi)發(fā)環(huán)境已經(jīng)搭建起來(lái)了。 宿主機(jī)與目標(biāo)板的連接示意圖如下: 宿主機(jī) ,linux 服務(wù)器,nfs,tftp 服務(wù)開(kāi)發(fā)板hubhost局域網(wǎng)串口jtagtarget 圖3.2 宿主機(jī)與目標(biāo)板的連接示意圖 第4章 linux 內(nèi)核移植4.1 linux操作系統(tǒng)介紹linux是一種很受歡迎的操作系統(tǒng),它與unix系統(tǒng)兼容,開(kāi)放源代碼,它原本被設(shè)計(jì)為桌面系統(tǒng),
42、現(xiàn)在廣泛應(yīng)用于服務(wù)器領(lǐng)域。而更大的影響在于它正 逐漸的應(yīng)用于嵌入式設(shè)備。但是它仍保持了桌面linux操作系統(tǒng)的主要的優(yōu)點(diǎn),如穩(wěn)定性、強(qiáng)大的網(wǎng)絡(luò)功能和出色的文件系統(tǒng)支持等。linux有一個(gè)完整的 tcp/ip協(xié)議棧,同時(shí)對(duì)其他許多的網(wǎng)絡(luò)協(xié)議都提供支持。這些網(wǎng)絡(luò)協(xié)議都在linux上得到了很好的實(shí)現(xiàn)。linux可以稱(chēng)作是一個(gè)針對(duì)嵌入式系統(tǒng)的優(yōu)秀網(wǎng)絡(luò)操作系統(tǒng)。linux以其優(yōu)異的性能、免費(fèi)開(kāi)放的代碼等優(yōu)點(diǎn),博得眾多嵌入式開(kāi)發(fā)者的青睞,和過(guò)去基于簡(jiǎn)單rtos甚至沒(méi)有使用任何操作系統(tǒng)的嵌入式程序設(shè)計(jì)相比,基于linux這樣的成熟的、高效的、健壯 的、可靠的、模塊化的、易于配置的操作系統(tǒng)來(lái)開(kāi)發(fā)自己的應(yīng)用程序
43、,無(wú)疑能進(jìn)一步提高效率,并具有很好的可移植性。4.2 裁剪內(nèi)核 嵌入式linux一般是指對(duì)標(biāo)準(zhǔn)linux發(fā)行版本進(jìn)行小型化裁剪處理之后,適合于特定嵌入式應(yīng)用場(chǎng)合的專(zhuān)用linux操作系統(tǒng)。在前面我們已經(jīng)提到嵌入式系統(tǒng)通常是資源受限的系統(tǒng),無(wú)論是處理器計(jì)算能力還是ram或其他存儲(chǔ)器容量都比較“小”。但是一般的linux發(fā)行版都非常龐大,很難用于只有有限存儲(chǔ)空間的嵌入式設(shè)備。因此,如何創(chuàng)建一個(gè)小型化的linux作為操作系統(tǒng)開(kāi)發(fā)成為首先需要考慮的問(wèn)題。所以我們必須對(duì)linux系統(tǒng)進(jìn)行裁剪。linux系統(tǒng)大致有以下4種主要的裁剪技術(shù),使用這些技術(shù)可以有效地減小系統(tǒng)的尺寸且不會(huì)影響系統(tǒng)的性能。(1)刪除冗
44、余文件。一般的linux發(fā)行版中都包含很多幫助文檔、輔助程序、配置文件和數(shù)據(jù)模板,在嵌入式系統(tǒng)中這些文件都是不必要的,完全可以刪除。甚至連 配置文件中的大量注釋也都可以被去掉。(2)共享庫(kù)裁剪。嵌入式系統(tǒng)的應(yīng)用程序是有限的,共享庫(kù)中就可能有很多永遠(yuǎn)不會(huì)被用到的冗余代碼,這些代碼就可以被刪除。(3)采用具有同樣功能的替代軟件包。linux上有許多具有相似功能的軟件包,可以選擇其中占存儲(chǔ)空間較小的軟件包并其移植到嵌入式設(shè)備上,用來(lái)代替原來(lái)占空 間較大那些的軟件包。(4)修改源碼。包括重新配置、編譯軟件包,去掉不需要的功能;增加軟件的模塊性,從而有利于提高裁剪效率;重新配置內(nèi)核,去掉不需要的驅(qū)動(dòng)和模
45、塊。 在嵌入式開(kāi)發(fā)中普遍采用的辦法是第4種,即重新配置、編譯軟件包,去掉不需要的功能。 配置內(nèi)核的命令有以下幾個(gè):(1)make config(2)make oldconfig(3)make menuconfig(4)make xconfigmake config 是文本配置方式;make menuconfig 是菜單配置方式;make xconfig 是圖形界面配置方式。make menuconfig 命令可以在現(xiàn)有內(nèi)核設(shè)置文件的基礎(chǔ)上建立一個(gè)新的內(nèi)核設(shè)置文件。無(wú)論上面哪個(gè)命令都將產(chǎn)生 .config 文件,并在每一個(gè)c 源文件中加上,使define 的宏config_xxx 起全局性的作用
46、。 在這里,我們需要根據(jù)可視門(mén)鈴系統(tǒng)的要求來(lái)配置內(nèi)核,在我們的可視門(mén)鈴系統(tǒng)使用到了usb攝像頭,因此在linux 配置過(guò)程中,需要選中對(duì)usb 的支持,對(duì)ov511 驅(qū)動(dòng)的支持,由于要進(jìn)行圖像采集,因此需要支持vedio4linux ,最后我們使用了minigui , 故我們還需要選中對(duì)framebuffer 的支持。下面說(shuō)明配置內(nèi)核的步驟:rootsunlife zhc#make menuconfig 選擇如下兩項(xiàng):*customize kernel settings*customize vendor/user settings 根據(jù)需要配置內(nèi)核: 選擇對(duì)usb 的支持* support f
47、or usb - usb host controller drivers ehci hcd (usb 2.0) support (experimental)* uhci (intel piix4, via, .) support * uhci alternate driver (je) support * ohci (compaq, imacs, opti, sis, ali, .) support 選擇對(duì) ov511 的支持- usb multimedia devices * usb ov511 camera support 由于我們需要移植minigui,故需要選擇 frame buffe
48、r 的支持。* support frame buffer devices (new) * support for frame buffer devices (experimental) (new) 選擇對(duì) v4l 的支持*multimedia devices*video for linux 創(chuàng)建內(nèi)核依賴(lài)關(guān)系:rootsunlife zhc#make dep 下面是編譯內(nèi)核:rootsunlife zhc#make 執(zhí)行以上步驟后,我們將在images 目錄找到已生成的內(nèi)核文件。4.3測(cè)試編譯完畢的內(nèi)核 經(jīng)過(guò)上面的步驟后,我們就得到了內(nèi)核映象。接下來(lái)就可以運(yùn)行它了。在宿主機(jī)上的shell 中鍵入
49、minicom 。給開(kāi)發(fā)板上電,你將在minicom中看到如下啟動(dòng)信息:u-boot 1.1.4 (feb 28 2007 - 21:28:24) u-boot code: 33f80000 - 33f9dc88 bss: - 33fa22f8 ram configuration: bank #0: 30000000 64 mb nor flash: 512 kb nand flash: 64 mbin: serial out: serial err: serial hit any key to stop autoboot: 0 將內(nèi)核從tftp服務(wù)器的根目錄下載到開(kāi)發(fā)板上:sunlife=
50、tftp tftp from server 35; our ip address is 97filename zimage. load address: 0x30008000 loading: # # # done bytes transferred = 1263260 (13469c hex) 啟動(dòng)內(nèi)核:sunlife= go 0xc008000# starting application at 0x30008000 . uncompressing linux. done, booting the kernel. linux version 2
51、.6.14 (rootsunlife) (gcc version 3.4.1) #21 fri oct 20 17:20:39 cst 2006 cpu: arm920tid(wb) 41129200 revision 0 (armv4t) machine: smdk2410 atag_initrd is deprecated; please update your bootloader. memory policy: ecc disabled, data cache writeback cpu s3c2410a (id 0x32410002) s3c2410: core 202.800 mhz, memory 101.400 mhz, peripheral 50.700 mhz s3c2410 clocks, (c) 2004 simtec electronics clock: slow mode (1.500 mhz), fast, mpll on, upll on . inode-cache hash table entries: 8192 (order: 3, 32768 bytes) memory: 64mb = 64mb total memory: 62208kb available (1924k code, 529k data, 108k init) mount-c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年地方政府投資項(xiàng)目建設(shè)合同
- 2024商業(yè)用地租賃合同:詳細(xì)闡述租賃土地的使用范圍
- 2024年店鋪托管經(jīng)營(yíng)合同
- 綠色電商可持續(xù)發(fā)展
- 2024年度化妝品包裝盒定制合同
- 小學(xué)數(shù)學(xué)二年級(jí)下學(xué)期有余數(shù)的除法口算練習(xí)題
- 2024年戶(hù)外瑜伽練習(xí)場(chǎng)地租賃協(xié)議
- 2024年度武漢汽車(chē)租賃合同模板下載
- 2024丙方提供融資服務(wù)合同
- 高效視圖渲染的MVC框架
- 電力工程施工售后保障方案
- 2024年小學(xué)心理咨詢(xún)室管理制度(五篇)
- 第16講 國(guó)家出路的探索與挽救民族危亡的斗爭(zhēng) 課件高三統(tǒng)編版(2019)必修中外歷史綱要上一輪復(fù)習(xí)
- 機(jī)器學(xué)習(xí) 課件 第10、11章 人工神經(jīng)網(wǎng)絡(luò)、強(qiáng)化學(xué)習(xí)
- 北京市人民大學(xué)附屬中學(xué)2025屆高二生物第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 書(shū)籍小兵張嘎課件
- 氫氣中鹵化物、甲酸的測(cè)定 離子色譜法-編制說(shuō)明
- 2024秋期國(guó)家開(kāi)放大學(xué)專(zhuān)科《機(jī)械制圖》一平臺(tái)在線(xiàn)形考(形成性任務(wù)四)試題及答案
- 2024年黑龍江哈爾濱市通河縣所屬事業(yè)單位招聘74人(第二批)易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 私募基金管理人-廉潔從業(yè)管理準(zhǔn)則
- 房地產(chǎn)估價(jià)機(jī)構(gòu)內(nèi)部管理制度
評(píng)論
0/150
提交評(píng)論