第3部分嵌入式軟件系統(tǒng)3_第1頁(yè)
第3部分嵌入式軟件系統(tǒng)3_第2頁(yè)
第3部分嵌入式軟件系統(tǒng)3_第3頁(yè)
第3部分嵌入式軟件系統(tǒng)3_第4頁(yè)
第3部分嵌入式軟件系統(tǒng)3_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2022-5-21哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)研究院電子與信息技術(shù)研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)( (威海威海) ) 通信工程系通信工程系第第3部分部分 嵌入式軟件系統(tǒng)嵌入式軟件系統(tǒng)2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系2第六節(jié)第六節(jié)嵌入式嵌入式Linux設(shè)備驅(qū)動(dòng)設(shè)備驅(qū)動(dòng)2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系3n6.1 Linux設(shè)備驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序

2、概述n6.2 設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)n6.3 Linux設(shè)備驅(qū)動(dòng)程序的使用方法設(shè)備驅(qū)動(dòng)程序的使用方法2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系46.1 Linux設(shè)備驅(qū)動(dòng)程序概述Linux設(shè)備驅(qū)動(dòng)程序的作用:(1) 設(shè)備驅(qū)動(dòng)程序屏蔽具體硬件設(shè)備的細(xì)節(jié); 操作系統(tǒng)-機(jī)器硬件之間的接口(2) 驅(qū)動(dòng)是展現(xiàn)硬件所具有的功能,只是個(gè)中間環(huán)節(jié); 應(yīng)用程序如何操作硬件?(3) 并發(fā)問(wèn)題:驅(qū)動(dòng)程序有時(shí)會(huì)被多個(gè)進(jìn)程同時(shí)使用,需要調(diào)用一些內(nèi)核的函數(shù)使用互斥量和鎖等機(jī)制。2022-5-2哈爾濱工業(yè)

3、大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系56.1 概述6.1.1 設(shè)備驅(qū)動(dòng)原理 所有操作系統(tǒng)下設(shè)備驅(qū)動(dòng)程序的共同目標(biāo)是屏蔽具體物理設(shè)備的操作細(xì)節(jié),實(shí)現(xiàn)設(shè)備無(wú)關(guān)性。 原理:在嵌入式操作系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序通常是內(nèi)核的重要部分,運(yùn)行在內(nèi)核模式,即設(shè)備驅(qū)動(dòng)程序?yàn)閮?nèi)核提供了一個(gè)I/O接口,用戶(hù)使用這個(gè)接口實(shí)現(xiàn)對(duì)設(shè)備的操作。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系66.1.1 設(shè)備驅(qū)動(dòng)原理 I/O系統(tǒng)層次結(jié)構(gòu)和功能系

4、統(tǒng)層次結(jié)構(gòu)和功能 2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系7驅(qū)動(dòng)程序與外界的接口:驅(qū)動(dòng)程序與外界的接口:3個(gè)部分個(gè)部分n驅(qū)動(dòng)程序與操作系統(tǒng)內(nèi)核的接口:這是通過(guò)驅(qū)動(dòng)程序與操作系統(tǒng)內(nèi)核的接口:這是通過(guò)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)file_operations來(lái)完成的。來(lái)完成的。n驅(qū)動(dòng)程序與系統(tǒng)引導(dǎo)的接口:這部分利用驅(qū)驅(qū)動(dòng)程序與系統(tǒng)引導(dǎo)的接口:這部分利用驅(qū)動(dòng)程序?qū)υO(shè)備進(jìn)行初始化。動(dòng)程序?qū)υO(shè)備進(jìn)行初始化。n驅(qū)動(dòng)程序與設(shè)備的接口:這部分描述了驅(qū)動(dòng)驅(qū)動(dòng)程序與設(shè)備的接口:這部分描述了驅(qū)動(dòng)程序如何與設(shè)備進(jìn)行交互,這

5、與具體設(shè)備密切程序如何與設(shè)備進(jìn)行交互,這與具體設(shè)備密切相關(guān)。相關(guān)。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系86.1 概述 6.1.2 模塊化編程 原因:由于歷史原因及出于效率方面的考慮,Linux是一個(gè)宏內(nèi)核。一旦需要在內(nèi)核的基礎(chǔ)上增加一項(xiàng)功能時(shí),就必須重新編譯整個(gè)內(nèi)核,這無(wú)疑給內(nèi)核功能的擴(kuò)充帶來(lái)了不便。 于是,Linux發(fā)展了可安裝內(nèi)核模塊的機(jī)制“module”。 2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威

6、海) 通通信工程系信工程系96.1.2 模塊化編程從代碼特征上來(lái)看,模塊就是可完成一項(xiàng)獨(dú)立功能的一組函數(shù)的集合;從使用特征上來(lái)看,它在需要時(shí)可以隨時(shí)被安裝,而在不需要時(shí)又可以隨時(shí)被卸載。準(zhǔn)確地說(shuō),模塊就是一個(gè)已編譯但未連接的可執(zhí)行文件。利用這種機(jī)制,我們可以根據(jù)需要,在不重新編譯內(nèi)核的情況下,將編譯好的模塊動(dòng)態(tài)地插入運(yùn)行中的內(nèi)核,或者將內(nèi)核中已經(jīng)存在的某個(gè)模塊移走。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系106.1.2 模塊化編程n為了增強(qiáng)內(nèi)核的靈活性和為了方便,設(shè)備驅(qū)動(dòng)程度應(yīng)被設(shè)計(jì)為可

7、動(dòng)態(tài)安裝的內(nèi)核模塊。一個(gè)典型的Linux設(shè)備驅(qū)動(dòng)程序應(yīng)包含以下幾部分代碼:驅(qū)動(dòng)程序模塊的注冊(cè)與注銷(xiāo)函數(shù);驅(qū)動(dòng)程序模塊的注冊(cè)與注銷(xiāo)函數(shù);設(shè)備的打開(kāi)、關(guān)閉、讀、寫(xiě)及需要的其他操作函數(shù);設(shè)備的打開(kāi)、關(guān)閉、讀、寫(xiě)及需要的其他操作函數(shù);設(shè)備的中斷服務(wù)程序。設(shè)備的中斷服務(wù)程序。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系116.1 概述6.1.3 設(shè)備類(lèi)型 Linux中的設(shè)備可以分為三類(lèi):字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。1.字符設(shè)備 字符設(shè)備是指數(shù)據(jù)處理以字節(jié)為單位按順序進(jìn)行的設(shè)備,它沒(méi)有緩沖區(qū),不支持隨機(jī)

8、讀寫(xiě)。 EgEg:如串口、觸摸屏、并口、AD等。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系126.1.3 設(shè)備類(lèi)型2.塊設(shè)備塊設(shè)備n塊設(shè)備塊設(shè)備是指那些在輸入是指那些在輸入/ /輸出時(shí)數(shù)據(jù)處理輸出時(shí)數(shù)據(jù)處理以以塊塊為單位的設(shè)備,它一般都為單位的設(shè)備,它一般都采用了緩存采用了緩存技術(shù),技術(shù),支持?jǐn)?shù)據(jù)的隨機(jī)讀寫(xiě)支持?jǐn)?shù)據(jù)的隨機(jī)讀寫(xiě)。EgEg: : 典型的塊設(shè)備有磁盤(pán)、內(nèi)存、典型的塊設(shè)備有磁盤(pán)、內(nèi)存、flashflash等。等。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息

9、技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系136.1.3 設(shè)備類(lèi)型3. .網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)設(shè)備 通過(guò)通過(guò)BSDBSD套接口套接口訪問(wèn)的設(shè)備訪問(wèn)的設(shè)備( (存取數(shù)據(jù)存取數(shù)據(jù)) )。對(duì)。對(duì)數(shù)據(jù)包大小無(wú)限制。數(shù)據(jù)包大小無(wú)限制。 如網(wǎng)卡等。如網(wǎng)卡等。 2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系146.1.4 設(shè)備文件 nLinux中硬件設(shè)備被抽象出來(lái),中硬件設(shè)備被抽象出來(lái),所有設(shè)備所有設(shè)備都可看成文件都可看成文件(置于(置于/dev目錄)目錄)UNIX法則法則: “

10、Everything is file”n可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來(lái)完成打開(kāi)、關(guān)閉、讀寫(xiě)和I/O控制操作 n對(duì)用戶(hù)來(lái)說(shuō),設(shè)備文件與普通文件并無(wú)區(qū)別。 對(duì)用戶(hù)來(lái)說(shuō)對(duì)用戶(hù)來(lái)說(shuō),塊、字符等設(shè)備的訪問(wèn)接口都是一樣的,塊、字符等設(shè)備的訪問(wèn)接口都是一樣的,都是一組都是一組基于文件的系統(tǒng)調(diào)用基于文件的系統(tǒng)調(diào)用,如,如read,write等,它等,它們?cè)趯?shí)現(xiàn)上細(xì)節(jié)的區(qū)別僅在內(nèi)核和驅(qū)動(dòng)程序的軟件接們?cè)趯?shí)現(xiàn)上細(xì)節(jié)的區(qū)別僅在內(nèi)核和驅(qū)動(dòng)程序的軟件接口上??谏?。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信

11、工程系156.1 概述n6.1.5 設(shè)備號(hào)n主設(shè)備號(hào):標(biāo)識(shí)該設(shè)備的種類(lèi),也標(biāo)識(shí)了該設(shè)備所使用的驅(qū)動(dòng)程序;n次設(shè)備號(hào):標(biāo)識(shí)使用同一設(shè)備驅(qū)動(dòng)程序的不同硬件設(shè)備; 通過(guò)主、次設(shè)備號(hào)能唯一地標(biāo)識(shí)出設(shè)備。n所有已經(jīng)注冊(cè)(即已經(jīng)加載了驅(qū)動(dòng)程序)的硬件設(shè)備的主設(shè)備號(hào)可以從 /proc/dev文件中得到 2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系16ls -l /devcrw-rw-rw- 1 root root 1, 3 Jan 1 00:00 nullbrw-r- 1 root root 8, 0 J

12、an 1 00:00 sdabrw-r- 1 root root 8, 1 Jan 1 00:00 sda1brw-r- 1 root root 8, 2 Jan 1 00:00 sda2brw-r- 1 root root 8, 3 Jan 1 00:00 sda3crw-r-r- 1 root root 1, 9 Jan 1 00:00 urandomcrw-rw-rw- 1 root root 5, 0 Jan 1 00:00 ttycrw- 1 root root 5, 1 Jan 1 00:00 consolecrw-rw-rw- 1 root root 5, 2 Jan 1 00:

13、00 ptmxcrw- 1 root root 4, 64 Jan 1 00:15 ttyS0crw- 1 root root 4, 65 Jan 1 00:00 ttyS1crw- 1 root root 4, 66 Jan 1 00:00 ttyS2crw- 1 root root 4, 67 Jan 1 00:00 ttyS3crw- 1 root root 4, 68 Jan 1 00:00 ttyS4c:字符設(shè)備字符設(shè)備b:塊設(shè)備塊設(shè)備主設(shè)備號(hào)主設(shè)備號(hào)次設(shè)備號(hào)次設(shè)備號(hào)2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威

14、海威海) 通通信工程系信工程系176.1.6 Linux設(shè)備驅(qū)動(dòng)的特點(diǎn)設(shè)備驅(qū)動(dòng)的特點(diǎn)綜上所述,綜上所述,Linux中的設(shè)備驅(qū)動(dòng)程序有如下特點(diǎn)。中的設(shè)備驅(qū)動(dòng)程序有如下特點(diǎn)。n(1)內(nèi)核代碼:設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部)內(nèi)核代碼:設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,如果驅(qū)動(dòng)程序出錯(cuò),則可能分,如果驅(qū)動(dòng)程序出錯(cuò),則可能導(dǎo)致系統(tǒng)崩潰導(dǎo)致系統(tǒng)崩潰。n(2)內(nèi)核接口:設(shè)備驅(qū)動(dòng)程序必須)內(nèi)核接口:設(shè)備驅(qū)動(dòng)程序必須為內(nèi)核或?yàn)閮?nèi)核或者其子系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)接口者其子系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)接口。比如,一個(gè)終。比如,一個(gè)終端驅(qū)動(dòng)程序必須為內(nèi)核提供一個(gè)文件端驅(qū)動(dòng)程序必須為內(nèi)核提供一個(gè)文件I/O 接口;接口;一個(gè)一個(gè)SCSI設(shè)備驅(qū)動(dòng)程序

15、應(yīng)該為設(shè)備驅(qū)動(dòng)程序應(yīng)該為SCSI子系統(tǒng)提子系統(tǒng)提供一個(gè)供一個(gè)SCSI設(shè)備接口,同時(shí)設(shè)備接口,同時(shí)SCSI子系統(tǒng)也必子系統(tǒng)也必須為內(nèi)核提供文件的須為內(nèi)核提供文件的I/O 接口及緩沖區(qū)。接口及緩沖區(qū)。n(3)內(nèi)核機(jī)制和服務(wù):設(shè)備驅(qū)動(dòng)程序使用一)內(nèi)核機(jī)制和服務(wù):設(shè)備驅(qū)動(dòng)程序使用一些些標(biāo)準(zhǔn)的內(nèi)核服務(wù)標(biāo)準(zhǔn)的內(nèi)核服務(wù),如內(nèi)存分配等。,如內(nèi)存分配等。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系18n(4)可裝載:大多數(shù)的)可裝載:大多數(shù)的Linux 操作系統(tǒng)設(shè)備驅(qū)動(dòng)操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序都可以程序都可以在需

16、要時(shí)裝載進(jìn)內(nèi)核在需要時(shí)裝載進(jìn)內(nèi)核,在不需要時(shí)從,在不需要時(shí)從內(nèi)核中內(nèi)核中卸載卸載。n(5)可設(shè)置:)可設(shè)置:Linux 操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序可以可以集成為內(nèi)核的一部分集成為內(nèi)核的一部分,并可以根據(jù)需要把其中的,并可以根據(jù)需要把其中的某一部分集成到內(nèi)核中,這只需要在某一部分集成到內(nèi)核中,這只需要在系統(tǒng)編譯時(shí)系統(tǒng)編譯時(shí)進(jìn)行相應(yīng)的設(shè)置即可進(jìn)行相應(yīng)的設(shè)置即可。n(6)動(dòng)態(tài)性:在系統(tǒng)啟動(dòng)且各個(gè)設(shè)備驅(qū)動(dòng)程序初)動(dòng)態(tài)性:在系統(tǒng)啟動(dòng)且各個(gè)設(shè)備驅(qū)動(dòng)程序初始化后,驅(qū)動(dòng)程序?qū)⒕S護(hù)其控制的設(shè)備。始化后,驅(qū)動(dòng)程序?qū)⒕S護(hù)其控制的設(shè)備。如果該如果該設(shè)備驅(qū)動(dòng)程序控制的設(shè)備不存在也不影響系統(tǒng)的設(shè)備驅(qū)動(dòng)程序控

17、制的設(shè)備不存在也不影響系統(tǒng)的運(yùn)行運(yùn)行,那么此時(shí)的設(shè)備驅(qū)動(dòng)程序只是多占用了一,那么此時(shí)的設(shè)備驅(qū)動(dòng)程序只是多占用了一點(diǎn)系統(tǒng)內(nèi)存罷了。點(diǎn)系統(tǒng)內(nèi)存罷了。6.1.6 Linux設(shè)備驅(qū)動(dòng)的特點(diǎn)設(shè)備驅(qū)動(dòng)的特點(diǎn)2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系19n6.1 Linux設(shè)備驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序概述n6.2 設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)n6.3 Linux設(shè)備驅(qū)動(dòng)程序的使用方法設(shè)備驅(qū)動(dòng)程序的使用方法2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱

18、工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系20設(shè)備驅(qū)動(dòng)程序源代碼的基本結(jié)構(gòu)/* * 驅(qū)動(dòng)程序簡(jiǎn)單驅(qū)動(dòng)程序簡(jiǎn)單說(shuō)明:說(shuō)明: * 驅(qū)動(dòng)程序的作用:驅(qū)動(dòng)程序的作用:這是一個(gè)字符設(shè)備驅(qū)動(dòng)程序的基本框架結(jié)構(gòu)這是一個(gè)字符設(shè)備驅(qū)動(dòng)程序的基本框架結(jié)構(gòu) * 被驅(qū)動(dòng)設(shè)備的簡(jiǎn)單描述:被驅(qū)動(dòng)設(shè)備的簡(jiǎn)單描述: * 一些特殊的考慮等:一些特殊的考慮等: * 版本,創(chuàng)建日期,作者等:版本,創(chuàng)建日期,作者等:1.0版,版,2006年年1月月6日日*/#ifndef _KERNEL_#define _KERNEL_#endif#ifndef MODULE#define MODULE#endif#include #

19、include .#include 表明這個(gè)模塊將用于內(nèi)核表明這個(gè)模塊將用于內(nèi)核,也可以在編譯時(shí)通,也可以在編譯時(shí)通過(guò)過(guò) D選項(xiàng)指定,如選項(xiàng)指定,如gcc D _KERNEL_。參見(jiàn)參見(jiàn)Makefile。內(nèi)核頭文件,需要根據(jù)具體內(nèi)核頭文件,需要根據(jù)具體驅(qū)動(dòng)程序和用到的內(nèi)核模塊驅(qū)動(dòng)程序和用到的內(nèi)核模塊確定。確定。表明這個(gè)驅(qū)動(dòng)程序?qū)⒁阅K的方式編譯和使用,表明這個(gè)驅(qū)動(dòng)程序?qū)⒁阅K的方式編譯和使用,也可以在編譯時(shí)通過(guò)也可以在編譯時(shí)通過(guò) D選項(xiàng)指定,如選項(xiàng)指定,如gcc D MODULE。參見(jiàn)。參見(jiàn)Makefile。gcc D預(yù)定義功能預(yù)定義功能gcc D namegcc D _KERNEL_ D M

20、ODULE 。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系21/* * 驅(qū)動(dòng)程序中使用的各種函數(shù)的原型聲明。標(biāo)準(zhǔn)的作法驅(qū)動(dòng)程序中使用的各種函數(shù)的原型聲明。標(biāo)準(zhǔn)的作法是將函數(shù)原型聲明是將函數(shù)原型聲明 * 放在一個(gè)頭文件中放在一個(gè)頭文件中,然后在該文件開(kāi)始處使用,然后在該文件開(kāi)始處使用#include引用,引用,并在該并在該 * 文件中定義。文件中定義。 * * 這里我們將函數(shù)的聲明和定義放在一起。所以下面的代碼既是函數(shù)的聲明,這里我們將函數(shù)的聲明和定義放在一起。所以下面的代碼既是函數(shù)的聲明,

21、* 也是函數(shù)的定義。也是函數(shù)的定義。 */static ssize_t spioc_read(struct file *filp, char *buffsize_t cnt, loof_t *off)/* 這里是這里是read函數(shù)的代碼函數(shù)的代碼 */return ret;static ssize_t spioc_write(struct file *filp, char *buffsize_t cnt, loff_t *off)/* 這里是這里是write函數(shù)的代碼函數(shù)的代碼 */return ret;212022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院

22、哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系22static int spioc_ioctl(struct inode *inode, struct file *filpunsigned int cmd, unsigned long arg)/* 這里是這里是ioctl函數(shù)的代碼,它的一般格式為一個(gè)函數(shù)的代碼,它的一般格式為一個(gè)switch分支語(yǔ)句分支語(yǔ)句 *switch(cmd) *case CMD1: *. *break; *. *case CMDn: *. *break *default: *. *break; * */return ret;ioctl()函數(shù)用于控制驅(qū)

23、動(dòng)程序本身的一些特性和參數(shù),如設(shè)定驅(qū)動(dòng)函數(shù)用于控制驅(qū)動(dòng)程序本身的一些特性和參數(shù),如設(shè)定驅(qū)動(dòng)程序使用的緩沖區(qū)的大小,設(shè)定串行通訊的速率等。程序使用的緩沖區(qū)的大小,設(shè)定串行通訊的速率等。222022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系23static int spioc_open(struct inode *inode, struct file *filp)/* 這里是這里是open函數(shù)的代碼函數(shù)的代碼 */return ret;static int spioc_close(struct ino

24、de *inode, struct file *filp)/* 這里是這里是close函數(shù)的代碼函數(shù)的代碼 */return ret;上述上述5個(gè)函數(shù),即個(gè)函數(shù),即read(), write(), ioctl(), open(), close(),是一個(gè)字符,是一個(gè)字符設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序最基本的最基本的需要由驅(qū)動(dòng)程序的作者完成的函數(shù)。需要由驅(qū)動(dòng)程序的作者完成的函數(shù)。這這5個(gè)函數(shù)將對(duì)應(yīng)于相應(yīng)的個(gè)函數(shù)將對(duì)應(yīng)于相應(yīng)的5個(gè)系統(tǒng)調(diào)用:個(gè)系統(tǒng)調(diào)用:read() - spioc_read()write() - spioc_write()ioctl() - spioc_ioctl()open() - s

25、pioc_open()close() - spioc_close()系統(tǒng)調(diào)用系統(tǒng)調(diào)用驅(qū)動(dòng)程序函數(shù)驅(qū)動(dòng)程序函數(shù)232022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系24static struct file_operations spioc_fops = read:spioc_read,write:spioc_write,ioctl:spioc_ioctl,open:spioc_open,release:spioc_close,;file_operations是一個(gè)是一個(gè)結(jié)構(gòu)體類(lèi)型結(jié)構(gòu)體類(lèi)型,定義在,

26、定義在include/linux/fs.h中。中。上述代碼定義了一個(gè)上述代碼定義了一個(gè)file_operations類(lèi)型的類(lèi)型的結(jié)構(gòu)體結(jié)構(gòu)體spioc_fops,并將,并將其中的一些成員其中的一些成員賦了初值賦了初值。結(jié)構(gòu)體結(jié)構(gòu)體spioc_fops將作為一個(gè)參數(shù)在注冊(cè)一個(gè)設(shè)備驅(qū)動(dòng)程序時(shí)傳遞給內(nèi)核。將作為一個(gè)參數(shù)在注冊(cè)一個(gè)設(shè)備驅(qū)動(dòng)程序時(shí)傳遞給內(nèi)核。內(nèi)核使用內(nèi)核使用設(shè)備鏈表設(shè)備鏈表維護(hù)各種注冊(cè)的設(shè)備。不同類(lèi)型的設(shè)備使用不同的鏈表。維護(hù)各種注冊(cè)的設(shè)備。不同類(lèi)型的設(shè)備使用不同的鏈表。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威

27、海威海) 通通信工程系信工程系25struct file_operations struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*

28、poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *

29、); int (*fsync) (struct file *, struct dentry *, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); ssize_t (*writev) (struct file *, const struct iovec *, unsi

30、gned long, loff_t *); ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);struct file_operationsinclude/linux/fs.h252022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱

31、工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系26static int _init spioc_init(void)/* 設(shè)備初始化代碼等設(shè)備初始化代碼等 */if(register_chrdev(SPIOC_MAJOR, “spioc”, &spioc_fops) printk(KERN_ERR “spioc.c: unable to register ”“the device with major %d.n”, SPIOC_MAJOR);return EIO;/* 其他初始化代碼其他初始化代碼 */return ret;static void _exit spioc_exit(v

32、oid)/* 設(shè)備設(shè)備注銷(xiāo)注銷(xiāo)代碼代碼 */if(unregister_chrdev(SPIOC_MAJOR, “spioc”) printk(KERN_ERR “spioc.c: unable to remove the ”“device with major %d.n”, SPIOC_MAJOR);return;/* 其它設(shè)備撤消代碼其它設(shè)備撤消代碼 */return;262022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系27module_init(spioc_init);module_exi

33、t(spioc_exit);這兩個(gè)函數(shù),這兩個(gè)函數(shù),module_init()和和module_exit(),用于告訴內(nèi)核,用于告訴內(nèi)核,當(dāng)一個(gè)驅(qū)動(dòng)程序當(dāng)一個(gè)驅(qū)動(dòng)程序加載和退出加載和退出(或撤消)時(shí),需要執(zhí)行的操作。(或撤消)時(shí),需要執(zhí)行的操作。不同驅(qū)動(dòng)程序在加載和退出時(shí),除了基本的向內(nèi)核不同驅(qū)動(dòng)程序在加載和退出時(shí),除了基本的向內(nèi)核注冊(cè)注冊(cè)設(shè)備設(shè)備驅(qū)動(dòng)程序外,還有各自的驅(qū)動(dòng)程序外,還有各自的針對(duì)具體設(shè)備的操作針對(duì)具體設(shè)備的操作。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系28要點(diǎn)總結(jié)要點(diǎn)總結(jié)

34、:宏:宏:_KERNEL_, MODULE_KERNEL_:表明這將是用于內(nèi)核的代碼表明這將是用于內(nèi)核的代碼,否則很多內(nèi)核過(guò)程將無(wú)法使用。,否則很多內(nèi)核過(guò)程將無(wú)法使用。MODULE:如果是以模塊方式編譯如果是以模塊方式編譯,需要定義這個(gè)宏;如果是靜態(tài)連接則不用。,需要定義這個(gè)宏;如果是靜態(tài)連接則不用。module_init()/module_exit(): spioc_init()/spioc_exit()每個(gè)驅(qū)動(dòng)程序都要有這兩個(gè)函數(shù),它們分別用于設(shè)備驅(qū)動(dòng)程序的加載和撤消每個(gè)驅(qū)動(dòng)程序都要有這兩個(gè)函數(shù),它們分別用于設(shè)備驅(qū)動(dòng)程序的加載和撤消。static struct file_operation

35、s spioc_fops:每個(gè)驅(qū)動(dòng)程序都要有這樣的結(jié)構(gòu)體每個(gè)驅(qū)動(dòng)程序都要有這樣的結(jié)構(gòu)體,可能不止一個(gè)。用,可能不止一個(gè)。用register_chrdev()()注冊(cè)驅(qū)動(dòng)程序時(shí)注冊(cè)驅(qū)動(dòng)程序時(shí)這個(gè)結(jié)構(gòu)體的起始地址這個(gè)結(jié)構(gòu)體的起始地址被傳送到內(nèi)核的設(shè)備表中。被傳送到內(nèi)核的設(shè)備表中。SPIOC_MAJOR:每個(gè)設(shè)備驅(qū)動(dòng)程序有一個(gè)主設(shè)備號(hào)每個(gè)設(shè)備驅(qū)動(dòng)程序有一個(gè)主設(shè)備號(hào)(major number)。不同設(shè)備驅(qū)動(dòng)程序不能。不同設(shè)備驅(qū)動(dòng)程序不能使用相同的主設(shè)備號(hào)。一個(gè)設(shè)備驅(qū)動(dòng)程序可以管理不同的使用相同的主設(shè)備號(hào)。一個(gè)設(shè)備驅(qū)動(dòng)程序可以管理不同的(但一般是同一類(lèi)的但一般是同一類(lèi)的)設(shè)備,設(shè)備,通過(guò)次設(shè)備號(hào)通過(guò)次設(shè)

36、備號(hào)(minor number)區(qū)分區(qū)分。spioc_ open()/close(),read()/write(), ioctl():根據(jù)具體驅(qū)動(dòng)程序定義和使用。根據(jù)具體驅(qū)動(dòng)程序定義和使用。一般一般open()/close()總是需要的,而且總是需要的,而且open()和和close()一定要成對(duì)出現(xiàn)。一定要成對(duì)出現(xiàn)。282022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系29n6.1 Linux設(shè)備驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序概述n6.2 設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序的結(jié)構(gòu)n6.3 Linux設(shè)備驅(qū)

37、動(dòng)程序的使用方法設(shè)備驅(qū)動(dòng)程序的使用方法2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系30機(jī)制與策略n機(jī)制機(jī)制(mechanism)n設(shè)備驅(qū)動(dòng)程序所具備的設(shè)備驅(qū)動(dòng)程序所具備的能力能力n例如:串行設(shè)備驅(qū)動(dòng)程序具有設(shè)置波特率的能例如:串行設(shè)備驅(qū)動(dòng)程序具有設(shè)置波特率的能力。力。n策略策略(policy)n這些能力這些能力如何如何被使用被使用n例如:根據(jù)需要將串口波特率設(shè)置成例如:根據(jù)需要將串口波特率設(shè)置成9.6kbps。設(shè)備驅(qū)動(dòng)程序應(yīng)該是設(shè)備驅(qū)動(dòng)程序應(yīng)該是“策略無(wú)關(guān)策略無(wú)關(guān)”的,即的,即policy

38、free。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系31設(shè)備驅(qū)動(dòng)程序的使用n(1) 驅(qū)動(dòng)程序模塊的動(dòng)態(tài)鏈接和靜態(tài)鏈接驅(qū)動(dòng)程序模塊的動(dòng)態(tài)鏈接和靜態(tài)鏈接n(2) 創(chuàng)建設(shè)備文件創(chuàng)建設(shè)備文件n(3) 使用設(shè)備使用設(shè)備2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系32設(shè)備驅(qū)動(dòng)程序被靜態(tài)編譯到內(nèi)核中的情況設(shè)備驅(qū)動(dòng)程序被靜態(tài)編譯到內(nèi)核中的情況:module_init()指示內(nèi)核在啟動(dòng)過(guò)程中運(yùn)行設(shè)備的初始

39、化函數(shù),指示內(nèi)核在啟動(dòng)過(guò)程中運(yùn)行設(shè)備的初始化函數(shù),如如spioc_init()函數(shù)。驅(qū)動(dòng)程序的加載隨內(nèi)核的啟動(dòng)一起完成。函數(shù)。驅(qū)動(dòng)程序的加載隨內(nèi)核的啟動(dòng)一起完成。靜態(tài)編譯的內(nèi)核模塊不能被動(dòng)態(tài)卸載,靜態(tài)編譯的內(nèi)核模塊不能被動(dòng)態(tài)卸載,只有到系統(tǒng)關(guān)閉時(shí)由內(nèi)只有到系統(tǒng)關(guān)閉時(shí)由內(nèi)核執(zhí)行相應(yīng)的卸載函數(shù)核執(zhí)行相應(yīng)的卸載函數(shù),如,如spioc_exit()。(1) 驅(qū)動(dòng)程序模塊的加載驅(qū)動(dòng)程序模塊的加載設(shè)備驅(qū)動(dòng)程序被動(dòng)態(tài)加載到內(nèi)核中的情況設(shè)備驅(qū)動(dòng)程序被動(dòng)態(tài)加載到內(nèi)核中的情況:首先,驅(qū)動(dòng)程序需要被編譯成目標(biāo)文件,如首先,驅(qū)動(dòng)程序需要被編譯成目標(biāo)文件,如spioc.o。在操作系統(tǒng)運(yùn)行之后,在操作系統(tǒng)運(yùn)行之后,使用使

40、用insmod命令將驅(qū)動(dòng)程序模塊動(dòng)態(tài)加命令將驅(qū)動(dòng)程序模塊動(dòng)態(tài)加載到內(nèi)核中載到內(nèi)核中$ insmod spioc.o使用使用insmod命令動(dòng)態(tài)加載的內(nèi)核模塊命令動(dòng)態(tài)加載的內(nèi)核模塊可以使用可以使用rmmod命令動(dòng)態(tài)命令動(dòng)態(tài)地從內(nèi)核中卸載地從內(nèi)核中卸載$ rmmod spioc.o2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系33n常用的與模塊相關(guān)的命令:常用的與模塊相關(guān)的命令:nlsmod 列出當(dāng)前系統(tǒng)中加載的模塊列出當(dāng)前系統(tǒng)中加載的模塊nrmmod 是用于將當(dāng)前模塊卸載是用于將當(dāng)前模塊卸載ni

41、nsmod 是用于加載當(dāng)前模塊是用于加載當(dāng)前模塊nmknod是用于創(chuàng)建模塊節(jié)點(diǎn)是用于創(chuàng)建模塊節(jié)點(diǎn)ls -l /devcrw-rw-rw- 1 root root 1, 3 Jan 1 00:00 nullbrw-r- 1 root root 8, 0 Jan 1 00:00 sdabrw-r- 1 root root 8, 1 Jan 1 00:00 sda1brw-r- 1 root root 8, 2 Jan 1 00:00 sda2brw-r- 1 root root 8, 3 Jan 1 00:00 sda3crw-r-r- 1 root root 1, 9 Jan 1 00:00 u

42、randomcrw-rw-rw- 1 root root 5, 0 Jan 1 00:00 ttycrw- 1 root root 5, 1 Jan 1 00:00 consolecrw-rw-rw- 1 root root 5, 2 Jan 1 00:00 ptmxcrw- 1 root root 4, 64 Jan 1 00:15 ttyS0crw- 1 root root 4, 65 Jan 1 00:00 ttyS1crw- 1 root root 4, 66 Jan 1 00:00 ttyS2crw- 1 root root 4, 67 Jan 1 00:00 ttyS3crw- 1

43、 root root 4, 68 Jan 1 00:00 ttyS42022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系34module_init()module_exit()模塊在調(diào)用模塊在調(diào)用insmod命令時(shí)被加載,此時(shí)的入命令時(shí)被加載,此時(shí)的入口點(diǎn)是口點(diǎn)是module_init函數(shù),通常在該函數(shù)中完函數(shù),通常在該函數(shù)中完成設(shè)備的注冊(cè)。成設(shè)備的注冊(cè)。 在設(shè)備完成注冊(cè)加載之后,用戶(hù)的應(yīng)用程在設(shè)備完成注冊(cè)加載之后,用戶(hù)的應(yīng)用程序就可以對(duì)該設(shè)備進(jìn)行一定的操作,如序就可以對(duì)該設(shè)備進(jìn)行一定的操作,如re

44、ad、write等,而驅(qū)動(dòng)程序就是用于實(shí)現(xiàn)這些操作。等,而驅(qū)動(dòng)程序就是用于實(shí)現(xiàn)這些操作。同樣,模塊在調(diào)用同樣,模塊在調(diào)用rmmod函數(shù)時(shí)被卸載,此函數(shù)時(shí)被卸載,此時(shí)的入口點(diǎn)是時(shí)的入口點(diǎn)是module_exit函數(shù),在該函數(shù)中完函數(shù),在該函數(shù)中完成設(shè)備的卸載。成設(shè)備的卸載。insmod spioc.omodule_init(spioc_init)module_exit(spioc_exit);2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系35如何向內(nèi)核注冊(cè)如何向內(nèi)核注冊(cè)n驅(qū)動(dòng)程序有一個(gè)入口函數(shù),

45、會(huì)將驅(qū)動(dòng)程驅(qū)動(dòng)程序有一個(gè)入口函數(shù),會(huì)將驅(qū)動(dòng)程序的序的file_operations結(jié)構(gòu),連同其主設(shè)結(jié)構(gòu),連同其主設(shè)備號(hào)向內(nèi)核進(jìn)行注冊(cè)。備號(hào)向內(nèi)核進(jìn)行注冊(cè)。n注冊(cè)后,用戶(hù)程序操作設(shè)備文件時(shí),注冊(cè)后,用戶(hù)程序操作設(shè)備文件時(shí),Linux系統(tǒng)就會(huì)根據(jù)設(shè)備文件的類(lèi)型系統(tǒng)就會(huì)根據(jù)設(shè)備文件的類(lèi)型(是是字符還是塊設(shè)備字符還是塊設(shè)備)、主設(shè)備號(hào)找到在內(nèi)核主設(shè)備號(hào)找到在內(nèi)核中注冊(cè)的中注冊(cè)的file_operations結(jié)構(gòu)結(jié)構(gòu),次設(shè)備次設(shè)備號(hào)用來(lái)辨別是同類(lèi)設(shè)備的第幾個(gè)號(hào)用來(lái)辨別是同類(lèi)設(shè)備的第幾個(gè)。2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系36注冊(cè)和卸載注冊(cè)和卸載2022-5-2哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué) 電子與信息技術(shù)電子與信息技術(shù)研究院研究院哈爾濱工業(yè)大學(xué)哈爾濱工業(yè)大學(xué)(威海威海) 通通信工程系信工程系37(2) 創(chuàng)建設(shè)備文件創(chuàng)建設(shè)備文件Linux操作系統(tǒng)將字符設(shè)備和塊設(shè)備作

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論