嵌入式Linux操作系統(tǒng)第3章-2_第1頁(yè)
嵌入式Linux操作系統(tǒng)第3章-2_第2頁(yè)
嵌入式Linux操作系統(tǒng)第3章-2_第3頁(yè)
嵌入式Linux操作系統(tǒng)第3章-2_第4頁(yè)
嵌入式Linux操作系統(tǒng)第3章-2_第5頁(yè)
已閱讀5頁(yè),還剩115頁(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、嵌入式嵌入式Linux操作系統(tǒng)操作系統(tǒng)第第3章章 基于基于Linux的嵌入式軟件開發(fā)的嵌入式軟件開發(fā) 嵌入式軟件結(jié)構(gòu)嵌入式軟件結(jié)構(gòu)1 1嵌入式軟件開發(fā)流程嵌入式軟件開發(fā)流程2 2嵌入式嵌入式linux開發(fā)環(huán)境開發(fā)環(huán)境3 3嵌入式系統(tǒng)引導(dǎo)代碼嵌入式系統(tǒng)引導(dǎo)代碼4 4第第3章章 基于基于Linux的嵌入式軟件開發(fā)的嵌入式軟件開發(fā)linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植5 5嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植6 6linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述7 7設(shè)備驅(qū)動(dòng)程序接口設(shè)備驅(qū)動(dòng)程序接口8 8linux設(shè)備驅(qū)動(dòng)開發(fā)流程設(shè)備驅(qū)動(dòng)開發(fā)流程9 9linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v linux內(nèi)核結(jié)

2、構(gòu)內(nèi)核結(jié)構(gòu)linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux 內(nèi)核可以進(jìn)一步劃分成內(nèi)核可以進(jìn)一步劃分成 3 層。層。 最上面是最上面是系統(tǒng)調(diào)用接口系統(tǒng)調(diào)用接口,它實(shí)現(xiàn)了一些基本的功能,它實(shí)現(xiàn)了一些基本的功能,例如例如 read 和和 write。 系統(tǒng)調(diào)用接口之下是系統(tǒng)調(diào)用接口之下是內(nèi)核代碼內(nèi)核代碼,可以更精確地定義為,可以更精確地定義為獨(dú)立于體系結(jié)構(gòu)的內(nèi)核代碼。這些代碼是獨(dú)立于體系結(jié)構(gòu)的內(nèi)核代碼。這些代碼是 Linux 所支所支持的所有處理器體系結(jié)構(gòu)所通用的。持的所有處理器體系結(jié)構(gòu)所通用的。 在這些代碼之下是依賴于體系結(jié)構(gòu)的代碼,構(gòu)成了通在這些代碼之下是依賴于體系結(jié)構(gòu)的代碼,構(gòu)成了通常稱為

3、常稱為 BSP(Board Support Package)的部分。這些的部分。這些代碼用作給定體系結(jié)構(gòu)的處理器和特定于平臺(tái)的代碼。代碼用作給定體系結(jié)構(gòu)的處理器和特定于平臺(tái)的代碼。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux 內(nèi)核的主要子系統(tǒng)內(nèi)核的主要子系統(tǒng)linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux 內(nèi)核的主要子系統(tǒng)內(nèi)核的主要子系統(tǒng) 1. 進(jìn)程調(diào)度進(jìn)程調(diào)度 2. 進(jìn)程間通信進(jìn)程間通信 3. 內(nèi)存管理內(nèi)存管理 4. 虛擬文件系統(tǒng)虛擬文件系統(tǒng) 5. 網(wǎng)絡(luò)堆棧網(wǎng)絡(luò)堆棧 6. 設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序 7. 依賴體系結(jié)構(gòu)的代碼依賴體系結(jié)構(gòu)的代碼linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v

4、 進(jìn)程調(diào)度進(jìn)程調(diào)度 SCI 層提供了某些機(jī)制執(zhí)行從用戶空間到內(nèi)核的函數(shù)層提供了某些機(jī)制執(zhí)行從用戶空間到內(nèi)核的函數(shù)調(diào)用。調(diào)用。SCI 實(shí)際上是一個(gè)非常有用的函數(shù)調(diào)用多路復(fù)實(shí)際上是一個(gè)非常有用的函數(shù)調(diào)用多路復(fù)用和多路分解服務(wù)。在用和多路分解服務(wù)。在 ./linux/kernel 中您可以找到中您可以找到 SCI 的實(shí)現(xiàn),并在的實(shí)現(xiàn),并在 ./linux/arch 中找到依賴于體系結(jié)構(gòu)中找到依賴于體系結(jié)構(gòu)的部分。的部分。v 進(jìn)程間通信進(jìn)程間通信 支持進(jìn)程間各種通信機(jī)制,包括管道、支持進(jìn)程間各種通信機(jī)制,包括管道、FIFO、共享內(nèi)、共享內(nèi)存、信號(hào)、消息隊(duì)列、套接字等。存、信號(hào)、消息隊(duì)列、套接字等。li

5、nux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 內(nèi)存管理內(nèi)存管理 內(nèi)核所管理的另外一個(gè)重要資源是內(nèi)存。為了提高效內(nèi)核所管理的另外一個(gè)重要資源是內(nèi)存。為了提高效率,如果由硬件管理虛擬內(nèi)存,內(nèi)存是按照所謂的內(nèi)率,如果由硬件管理虛擬內(nèi)存,內(nèi)存是按照所謂的內(nèi)存頁(yè)存頁(yè) 方式進(jìn)行管理的(對(duì)于大部分體系結(jié)構(gòu)來(lái)說(shuō)都是方式進(jìn)行管理的(對(duì)于大部分體系結(jié)構(gòu)來(lái)說(shuō)都是 4KB)。)。Linux 包括了管理可用內(nèi)存的方式,以及物理包括了管理可用內(nèi)存的方式,以及物理和虛擬映射所使用的硬件機(jī)制。和虛擬映射所使用的硬件機(jī)制。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 虛擬文件系統(tǒng)(虛擬文件系統(tǒng)(VFS) VFS是是 Linux 內(nèi)核中非常

6、有用的一個(gè)方面,因?yàn)樗鼮閮?nèi)核中非常有用的一個(gè)方面,因?yàn)樗鼮槲募到y(tǒng)提供了一個(gè)通用的接口抽象。文件系統(tǒng)提供了一個(gè)通用的接口抽象。VFS 在在 SCI 和和內(nèi)核所支持的文件系統(tǒng)之間提供了一個(gè)交換層內(nèi)核所支持的文件系統(tǒng)之間提供了一個(gè)交換層linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 網(wǎng)絡(luò)堆棧網(wǎng)絡(luò)堆棧 網(wǎng)絡(luò)堆棧在設(shè)計(jì)上遵循模擬協(xié)議本身的分層體系結(jié)構(gòu)。網(wǎng)絡(luò)堆棧在設(shè)計(jì)上遵循模擬協(xié)議本身的分層體系結(jié)構(gòu)?;叵胍幌拢叵胍幌拢琁nternet Protocol (IP) 是傳輸協(xié)議(通常稱是傳輸協(xié)議(通常稱為傳輸控制協(xié)議或?yàn)閭鬏斂刂茀f(xié)議或 TCP)下面的核心網(wǎng)絡(luò)層協(xié)議。)下面的核心網(wǎng)絡(luò)層協(xié)議。TCP 上面是上面是

7、socket 層,它是通過(guò)層,它是通過(guò) SCI 進(jìn)行調(diào)用的進(jìn)行調(diào)用的linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序 Linux 內(nèi)核中有大量代碼都在設(shè)備驅(qū)動(dòng)程序中,它們能內(nèi)核中有大量代碼都在設(shè)備驅(qū)動(dòng)程序中,它們能夠運(yùn)轉(zhuǎn)特定的硬件設(shè)備。夠運(yùn)轉(zhuǎn)特定的硬件設(shè)備。Linux 源碼樹提供了一個(gè)驅(qū)動(dòng)源碼樹提供了一個(gè)驅(qū)動(dòng)程序子目錄,這個(gè)目錄又進(jìn)一步劃分為各種支持設(shè)備,程序子目錄,這個(gè)目錄又進(jìn)一步劃分為各種支持設(shè)備,例如例如 Bluetooth、I2C、serial 等。設(shè)備驅(qū)動(dòng)程序的代碼等。設(shè)備驅(qū)動(dòng)程序的代碼可以在可以在 ./linux/drivers 中找到中找到linux內(nèi)核結(jié)構(gòu)及移

8、植內(nèi)核結(jié)構(gòu)及移植v 依賴體系結(jié)構(gòu)的代碼依賴體系結(jié)構(gòu)的代碼 盡管盡管 Linux 很大程度上獨(dú)立于所運(yùn)行的體系結(jié)構(gòu),但很大程度上獨(dú)立于所運(yùn)行的體系結(jié)構(gòu),但是有些元素則必須考慮體系結(jié)構(gòu)才能正常操作并實(shí)現(xiàn)是有些元素則必須考慮體系結(jié)構(gòu)才能正常操作并實(shí)現(xiàn)更高效率。更高效率。./linux/arch 子目錄定義了內(nèi)核源代碼中依子目錄定義了內(nèi)核源代碼中依賴于體系結(jié)構(gòu)的部分,其中包含了各種特定于體系結(jié)賴于體系結(jié)構(gòu)的部分,其中包含了各種特定于體系結(jié)構(gòu)的子目錄(共同組成了構(gòu)的子目錄(共同組成了 BSPlinux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux內(nèi)核的技術(shù)特點(diǎn)內(nèi)核的技術(shù)特點(diǎn) Linux內(nèi)核最注重實(shí)用和效率:

9、內(nèi)核最注重實(shí)用和效率:Linux內(nèi)核被設(shè)計(jì)成分內(nèi)核被設(shè)計(jì)成分層的微內(nèi)核,所以效率高,緊湊性強(qiáng)。層的微內(nèi)核,所以效率高,緊湊性強(qiáng)。 Linux內(nèi)核純粹是一種被動(dòng)調(diào)用服務(wù)對(duì)象。所謂被動(dòng)是內(nèi)核純粹是一種被動(dòng)調(diào)用服務(wù)對(duì)象。所謂被動(dòng)是指指Linux內(nèi)核為用戶進(jìn)程服務(wù)的唯一方式是用戶進(jìn)程通內(nèi)核為用戶進(jìn)程服務(wù)的唯一方式是用戶進(jìn)程通過(guò)系統(tǒng)調(diào)用來(lái)請(qǐng)求在內(nèi)核空間運(yùn)行某個(gè)函數(shù)。內(nèi)核本過(guò)系統(tǒng)調(diào)用來(lái)請(qǐng)求在內(nèi)核空間運(yùn)行某個(gè)函數(shù)。內(nèi)核本身是一種函數(shù)和數(shù)據(jù)結(jié)構(gòu)的集合,不存在運(yùn)行的內(nèi)核身是一種函數(shù)和數(shù)據(jù)結(jié)構(gòu)的集合,不存在運(yùn)行的內(nèi)核進(jìn)程為用戶進(jìn)程服務(wù)。雖然進(jìn)程為用戶進(jìn)程服務(wù)。雖然Linux的確存在一種被稱為的確存在一種被稱為內(nèi)核

10、線程的進(jìn)程,但它并不是用來(lái)服務(wù)于用戶進(jìn)程的,內(nèi)核線程的進(jìn)程,但它并不是用來(lái)服務(wù)于用戶進(jìn)程的,僅僅作為系統(tǒng)自身的服務(wù)目的。僅僅作為系統(tǒng)自身的服務(wù)目的。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux內(nèi)核的技術(shù)特點(diǎn)內(nèi)核的技術(shù)特點(diǎn) Linux內(nèi)核采用虛擬內(nèi)存技術(shù),每個(gè)進(jìn)程的虛擬內(nèi)存空內(nèi)核采用虛擬內(nèi)存技術(shù),每個(gè)進(jìn)程的虛擬內(nèi)存空間為間為4GB。其中。其中0-3G屬于用戶空間,稱為用戶段,屬于用戶空間,稱為用戶段,3G-4G屬于內(nèi)核空間,稱為內(nèi)核段屬于內(nèi)核空間,稱為內(nèi)核段 Linux 最新的一個(gè)增強(qiáng)是可以用作其他操作系統(tǒng)的操作最新的一個(gè)增強(qiáng)是可以用作其他操作系統(tǒng)的操作系統(tǒng)(稱為系統(tǒng)管理程序)系統(tǒng)(稱為

11、系統(tǒng)管理程序)linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v linux的源代碼結(jié)構(gòu)的源代碼結(jié)構(gòu)linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 1. linux目錄:目錄:v 該是源代碼的主目錄,在該主目錄中包括所有的子目錄,該是源代碼的主目錄,在該主目錄中包括所有的子目錄,還含有唯一的一個(gè)還含有唯一的一個(gè)Makefile文件。該文件是編譯輔助工具文件。該文件是編譯輔助工具軟件軟件make的參數(shù)配置文件。的參數(shù)配置文件。make工具軟件的主要用途是工具軟件的主要用途是通過(guò)識(shí)別哪些文件已被修改過(guò),從而自動(dòng)地決定在一個(gè)含通過(guò)識(shí)別哪些文件已被修改過(guò),從而自動(dòng)地決定在一個(gè)含有多個(gè)源程序文件的程序系統(tǒng)中哪些文件需要

12、被重新編譯。有多個(gè)源程序文件的程序系統(tǒng)中哪些文件需要被重新編譯。因此,因此,make工具軟件是程序項(xiàng)目的管理軟件。工具軟件是程序項(xiàng)目的管理軟件。v linux目錄下的這個(gè)目錄下的這個(gè)Makefile文件還嵌套地調(diào)用了所有子目文件還嵌套地調(diào)用了所有子目錄中包含的錄中包含的Makefile文件。這樣,當(dāng)文件。這樣,當(dāng)linux目錄(包括子目目錄(包括子目錄)下的任何文件被修改過(guò)時(shí),錄)下的任何文件被修改過(guò)時(shí),make都會(huì)對(duì)其進(jìn)行重新都會(huì)對(duì)其進(jìn)行重新編譯。因此為了編譯整個(gè)內(nèi)核所有的源代碼文件,只要在編譯。因此為了編譯整個(gè)內(nèi)核所有的源代碼文件,只要在linux目錄下運(yùn)行一次目錄下運(yùn)行一次make軟件即

13、可。軟件即可。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 2. arch目錄:目錄:v 包含和硬件體系結(jié)構(gòu)相關(guān)的代碼,每種平臺(tái)占一個(gè)相應(yīng)的包含和硬件體系結(jié)構(gòu)相關(guān)的代碼,每種平臺(tái)占一個(gè)相應(yīng)的目錄。該目錄包含了此內(nèi)核源碼所支持的硬件體系結(jié)構(gòu)相目錄。該目錄包含了此內(nèi)核源碼所支持的硬件體系結(jié)構(gòu)相關(guān)的內(nèi)核源碼。在這個(gè)目錄下,針對(duì)不同體系結(jié)構(gòu)所移植關(guān)的內(nèi)核源碼。在這個(gè)目錄下,針對(duì)不同體系結(jié)構(gòu)所移植的版本都有三個(gè)子目錄:的版本都有三個(gè)子目錄:kernel、lib和和mm。 v kernel子目錄包含依賴于體系結(jié)構(gòu)實(shí)現(xiàn)的一般內(nèi)核功能,子目錄包含依賴于體系結(jié)構(gòu)實(shí)現(xiàn)的一般內(nèi)核功能,如信號(hào)處理、時(shí)鐘處理等;如信號(hào)處理

14、、時(shí)鐘處理等;v lib子目錄包含庫(kù)函數(shù)的本地實(shí)現(xiàn),如果從依賴于體系結(jié)構(gòu)子目錄包含庫(kù)函數(shù)的本地實(shí)現(xiàn),如果從依賴于體系結(jié)構(gòu)的源碼編譯,則運(yùn)行更快;的源碼編譯,則運(yùn)行更快;v mm子目錄包含存儲(chǔ)管理實(shí)現(xiàn)的代碼。子目錄包含存儲(chǔ)管理實(shí)現(xiàn)的代碼。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 3. block目錄:存放部分塊設(shè)備驅(qū)動(dòng)程序。目錄:存放部分塊設(shè)備驅(qū)動(dòng)程序。v 4. crypto目錄:存放常用加密和散列算法(如目錄:存放常用加密和散列算法(如AES、SHA等),還有一些壓縮和等),還有一些壓縮和CRC校驗(yàn)算法。校驗(yàn)算法。v 5. Documentation目錄:存放關(guān)于內(nèi)核各部分的通用解釋目錄:存放

15、關(guān)于內(nèi)核各部分的通用解釋和注釋。和注釋。v 6. drivers目錄:存放設(shè)備驅(qū)動(dòng)程序,每個(gè)不同的驅(qū)動(dòng)占目錄:存放設(shè)備驅(qū)動(dòng)程序,每個(gè)不同的驅(qū)動(dòng)占用一個(gè)子目錄,如聲卡的驅(qū)動(dòng)對(duì)應(yīng)于用一個(gè)子目錄,如聲卡的驅(qū)動(dòng)對(duì)應(yīng)于drivers/sound。這個(gè)。這個(gè)目錄擁有目錄擁有50%以上的內(nèi)核源碼,系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)程以上的內(nèi)核源碼,系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)程序都位于該目錄中序都位于該目錄中v 7. fs目錄:目錄:Linux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄與之對(duì)應(yīng)。如有不同的子目錄與之對(duì)應(yīng)。如ext、fat、ntfs等。等。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移

16、植v 8. include目錄:存放頭文件,包括了內(nèi)核的大多數(shù)頭文目錄:存放頭文件,包括了內(nèi)核的大多數(shù)頭文件,另外對(duì)每種支持的體系結(jié)構(gòu)分別有一個(gè)子目錄。其中,件,另外對(duì)每種支持的體系結(jié)構(gòu)分別有一個(gè)子目錄。其中,和系統(tǒng)相關(guān)的頭文件被放置在和系統(tǒng)相關(guān)的頭文件被放置在linux子目錄下。子目錄下。v 9. init目錄:存放內(nèi)核初始化代碼(注意不是系統(tǒng)引導(dǎo)代目錄:存放內(nèi)核初始化代碼(注意不是系統(tǒng)引導(dǎo)代碼)。包含了所有系統(tǒng)的初始化源碼,許多主要的文件,碼)。包含了所有系統(tǒng)的初始化源碼,許多主要的文件,如如main.c就位于該目錄下。該文件還包含了許多核心代就位于該目錄下。該文件還包含了許多核心代碼碼如

17、實(shí)現(xiàn)如實(shí)現(xiàn)fork()的代碼和最常執(zhí)行的代碼的代碼和最常執(zhí)行的代碼cpuidle()循環(huán)。循環(huán)。v 10. ipc目錄:處理進(jìn)程間通信的全部所需的代碼都放在該目錄:處理進(jìn)程間通信的全部所需的代碼都放在該目錄下。目錄下。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 11. kernel目錄:內(nèi)核的最核心部分,許多最常調(diào)用的內(nèi)目錄:內(nèi)核的最核心部分,許多最常調(diào)用的內(nèi)核函數(shù)放在該目錄下。包括調(diào)度器核函數(shù)放在該目錄下。包括調(diào)度器fork()和和timer.c等,和等,和平臺(tái)相關(guān)的一部分代碼放在平臺(tái)相關(guān)的一部分代碼放在arch/*/kernel目錄下。目錄下。v 12. lib目錄:存放庫(kù)文件代碼。該目錄放

18、置內(nèi)核其他部分目錄:存放庫(kù)文件代碼。該目錄放置內(nèi)核其他部分經(jīng)常所需要的代碼,如經(jīng)常所需要的代碼,如inflate.c就放在這里,它能夠在引就放在這里,它能夠在引導(dǎo)時(shí)解壓內(nèi)核并裝入內(nèi)存。與處理器結(jié)構(gòu)相關(guān)的庫(kù)代碼放導(dǎo)時(shí)解壓內(nèi)核并裝入內(nèi)存。與處理器結(jié)構(gòu)相關(guān)的庫(kù)代碼放在在arch/*/lib目錄下。目錄下。v 13. mm目錄:包含了所有目錄:包含了所有Linux實(shí)現(xiàn)虛擬內(nèi)存管理的源碼。實(shí)現(xiàn)虛擬內(nèi)存管理的源碼。與具體硬件體協(xié)結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于與具體硬件體協(xié)結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下,如對(duì)應(yīng)目錄下,如對(duì)應(yīng)X86就是就是arch/i386/mm/fault.clinux內(nèi)核

19、結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 14. modules目錄目錄: 存放已編譯好的可動(dòng)態(tài)加載的模塊。存放已編譯好的可動(dòng)態(tài)加載的模塊。v 15. net目錄:存放所有提供網(wǎng)絡(luò)支持的代碼代碼,實(shí)現(xiàn)了目錄:存放所有提供網(wǎng)絡(luò)支持的代碼代碼,實(shí)現(xiàn)了各種常見的網(wǎng)絡(luò)協(xié)議,每個(gè)子目錄對(duì)應(yīng)網(wǎng)絡(luò)的一個(gè)方面。各種常見的網(wǎng)絡(luò)協(xié)議,每個(gè)子目錄對(duì)應(yīng)網(wǎng)絡(luò)的一個(gè)方面。v 16. scripts目錄:存放用于配置內(nèi)核的腳本文件及用戶開目錄:存放用于配置內(nèi)核的腳本文件及用戶開發(fā)和維護(hù)手冊(cè)。發(fā)和維護(hù)手冊(cè)。v 17. security目錄:主要是一個(gè)目錄:主要是一個(gè)SELinux的模塊。的模塊。v 18. sound目錄:常用音頻設(shè)備的驅(qū)

20、動(dòng)程序等。目錄:常用音頻設(shè)備的驅(qū)動(dòng)程序等。v 19. usr目錄:目錄:/usr 這是最龐大的目錄,我們要用到的應(yīng)用這是最龐大的目錄,我們要用到的應(yīng)用程序和文件幾乎都存放在這個(gè)目錄下程序和文件幾乎都存放在這個(gè)目錄下linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 一般在每個(gè)目錄下都有一個(gè)一般在每個(gè)目錄下都有一個(gè).depend文件和一個(gè)文件和一個(gè)Makefile文文件。這兩個(gè)文件都是編譯時(shí)使用的輔助文件。仔細(xì)閱讀這件。這兩個(gè)文件都是編譯時(shí)使用的輔助文件。仔細(xì)閱讀這兩個(gè)文件對(duì)弄清各個(gè)文件之間的聯(lián)系和依托關(guān)系很有幫助。兩個(gè)文件對(duì)弄清各個(gè)文件之間的聯(lián)系和依托關(guān)系很有幫助。另外有的目錄下還有另外有的目錄下還有R

21、eadme文件,它是對(duì)該目錄下文件文件,它是對(duì)該目錄下文件的一些說(shuō)明,同樣有利于對(duì)內(nèi)核源碼的理解的一些說(shuō)明,同樣有利于對(duì)內(nèi)核源碼的理解linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v linux的移植的移植v Linux 移植就是把移植就是把 Linux 操作系統(tǒng)針對(duì)具體的目標(biāo)平臺(tái)做操作系統(tǒng)針對(duì)具體的目標(biāo)平臺(tái)做必要改寫之后,安裝到該目標(biāo)平臺(tái)使其正確的運(yùn)行起來(lái)。必要改寫之后,安裝到該目標(biāo)平臺(tái)使其正確的運(yùn)行起來(lái)。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux 移植的基本過(guò)程(以移植的基本過(guò)程(以 Linux2.6.18 為例):為例): 1. 下載下載Linux內(nèi)核:到內(nèi)核:到 ftp:/ftp.a

22、.uk 上下上下載載 Linux2.6.18 內(nèi)核及其關(guān)于內(nèi)核及其關(guān)于 ARM 平臺(tái)的補(bǔ)丁(如:平臺(tái)的補(bǔ)?。ㄈ纾篜atch-2.6.18-rmk1.gz)。)。 2. 給給 Linux2.6.18 打補(bǔ)?。捍蜓a(bǔ)丁:zcat ./patch-2.6.18-rmk1.gz | patch p1(前面(前面./表示補(bǔ)丁文件放在內(nèi)核文件上一層表示補(bǔ)丁文件放在內(nèi)核文件上一層目錄)目錄) 3. 準(zhǔn)備交叉編譯環(huán)境。交叉編譯環(huán)境工具鏈一般包括準(zhǔn)備交叉編譯環(huán)境。交叉編譯環(huán)境工具鏈一般包括 binutils(含(含 AS 匯編器,匯編器,LD 鏈接器等),鏈接器等),arm-gcc,gli

23、bc 等。交叉編譯環(huán)境的搭建也是個(gè)復(fù)雜的過(guò)程,請(qǐng)等。交叉編譯環(huán)境的搭建也是個(gè)復(fù)雜的過(guò)程,請(qǐng)參照參照3.2節(jié)。節(jié)。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux 移植的基本過(guò)程(以移植的基本過(guò)程(以 Linux2.6.18 為例):為例): 4. 修改相關(guān)的配置文件,如修改內(nèi)核目錄下的修改相關(guān)的配置文件,如修改內(nèi)核目錄下的 makefile 文件中關(guān)于交叉編譯工具相關(guān)的內(nèi)容,此后文件中關(guān)于交叉編譯工具相關(guān)的內(nèi)容,此后就可以使用這個(gè)就可以使用這個(gè)makefile進(jìn)行編譯了。進(jìn)行編譯了。 5. 修改修改linux內(nèi)核源碼,主要是修改和內(nèi)核源碼,主要是修改和CPU相關(guān)部分相關(guān)部分 6. 內(nèi)核的裁

24、剪,根據(jù)項(xiàng)目的需要裁剪內(nèi)核模塊。內(nèi)核的裁剪,根據(jù)項(xiàng)目的需要裁剪內(nèi)核模塊。 7. 內(nèi)核的編譯,將裁剪好的內(nèi)核進(jìn)行編譯,生成二進(jìn)內(nèi)核的編譯,將裁剪好的內(nèi)核進(jìn)行編譯,生成二進(jìn)制映像文件。制映像文件。 8. 內(nèi)核的下載,將生成的二進(jìn)制映像文件,燒寫到目?jī)?nèi)核的下載,將生成的二進(jìn)制映像文件,燒寫到目標(biāo)平臺(tái)。標(biāo)平臺(tái)。linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 修改修改linux內(nèi)核源碼內(nèi)核源碼v linux 的移植是個(gè)繁重的工作,其主要包含啟動(dòng)代碼的修的移植是個(gè)繁重的工作,其主要包含啟動(dòng)代碼的修改,內(nèi)核的鏈接及裝入,參數(shù)傳遞,內(nèi)核引導(dǎo)幾個(gè)部分。改,內(nèi)核的鏈接及裝入,參數(shù)傳遞,內(nèi)核引導(dǎo)幾個(gè)部分。linux 內(nèi)核

25、分為體系結(jié)構(gòu)相關(guān)部分和體系結(jié)構(gòu)無(wú)關(guān)部分。內(nèi)核分為體系結(jié)構(gòu)相關(guān)部分和體系結(jié)構(gòu)無(wú)關(guān)部分。在在 Linux 啟動(dòng)的第一階段,內(nèi)核與體系結(jié)構(gòu)相關(guān)部分啟動(dòng)的第一階段,內(nèi)核與體系結(jié)構(gòu)相關(guān)部分(arch 目錄下)首先執(zhí)行,它會(huì)完成硬件寄存器設(shè)置,內(nèi)目錄下)首先執(zhí)行,它會(huì)完成硬件寄存器設(shè)置,內(nèi)存映像等初始化工作。然后把控制權(quán)轉(zhuǎn)給內(nèi)核中與系統(tǒng)結(jié)存映像等初始化工作。然后把控制權(quán)轉(zhuǎn)給內(nèi)核中與系統(tǒng)結(jié)構(gòu)無(wú)關(guān)部分。而我們?cè)谝浦补ぷ髦幸膭?dòng)的代碼主要集中構(gòu)無(wú)關(guān)部分。而我們?cè)谝浦补ぷ髦幸膭?dòng)的代碼主要集中在與體系結(jié)構(gòu)相關(guān)部分。在與體系結(jié)構(gòu)相關(guān)部分。 linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v Linux內(nèi)核的裁剪內(nèi)核的裁剪v

26、Linux 內(nèi)核的裁剪與編譯看上去是個(gè)挺簡(jiǎn)單的過(guò)程。只是內(nèi)核的裁剪與編譯看上去是個(gè)挺簡(jiǎn)單的過(guò)程。只是對(duì)配置菜單的簡(jiǎn)單選擇。但是內(nèi)核配置菜單本身結(jié)構(gòu)龐大,對(duì)配置菜單的簡(jiǎn)單選擇。但是內(nèi)核配置菜單本身結(jié)構(gòu)龐大,內(nèi)容復(fù)雜。具體如何選擇卻難住了不少人。因此熟悉與了內(nèi)容復(fù)雜。具體如何選擇卻難住了不少人。因此熟悉與了解該菜單的各項(xiàng)具體含義就顯得比較重要。解該菜單的各項(xiàng)具體含義就顯得比較重要。v 常用有如下幾種方式常用有如下幾種方式 1. make config: 2. make menuconfig 3. make xconfig linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v make menuconfigli

27、nux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v make xconfiglinux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 在選擇相應(yīng)的配置時(shí),有三種選擇方式,它們分別代表的在選擇相應(yīng)的配置時(shí),有三種選擇方式,它們分別代表的含義如下:含義如下: Y將該功能編譯進(jìn)內(nèi)核將該功能編譯進(jìn)內(nèi)核 N不將該功能編譯進(jìn)內(nèi)核不將該功能編譯進(jìn)內(nèi)核 M將該功能編譯成可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中將該功能編譯成可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中的模塊的模塊linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 內(nèi)核編譯內(nèi)核編譯v 在完成內(nèi)核的裁減之后,內(nèi)核的編譯就是一個(gè)非常簡(jiǎn)單的在完成內(nèi)核的裁減之后,內(nèi)核的編譯就是一個(gè)非常簡(jiǎn)單的過(guò)程。你只要執(zhí)行以下幾條命令就

28、行:過(guò)程。你只要執(zhí)行以下幾條命令就行:v 1. make clean 這條命令是在正式編譯你的內(nèi)核之前先把環(huán)境給清理這條命令是在正式編譯你的內(nèi)核之前先把環(huán)境給清理干凈。有時(shí)你也可以用干凈。有時(shí)你也可以用 make realclean 或或 make mrproper 來(lái)徹底清除相關(guān)依賴,保證沒有不正確的來(lái)徹底清除相關(guān)依賴,保證沒有不正確的.o 文件存在。文件存在。 v 2. make dep 這條命令是編譯相關(guān)依賴文件這條命令是編譯相關(guān)依賴文件linux內(nèi)核結(jié)構(gòu)及移植內(nèi)核結(jié)構(gòu)及移植v 3. make zImage 這條命令就是最終的編譯命令。有時(shí)你可以直接用這條命令就是最終的編譯命令。有時(shí)你可

29、以直接用 make(2.6.X 版本上用版本上用)或或 make bzImage(給(給 PC 機(jī)編譯機(jī)編譯大內(nèi)核時(shí)用)。大內(nèi)核時(shí)用)。v 4. make install 這條命令可以把相關(guān)文件拷貝到默認(rèn)的目錄。當(dāng)然在這條命令可以把相關(guān)文件拷貝到默認(rèn)的目錄。當(dāng)然在給嵌入式設(shè)備編譯時(shí)這步可以不要。因?yàn)榫唧w的內(nèi)核給嵌入式設(shè)備編譯時(shí)這步可以不要。因?yàn)榫唧w的內(nèi)核安裝還需要你手工進(jìn)行。安裝還需要你手工進(jìn)行。嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v Linux支持多種文件系統(tǒng),包括支持多種文件系統(tǒng),包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和和nfs等等v 為了對(duì)各

30、類文件系統(tǒng)進(jìn)行統(tǒng)一管理,為了對(duì)各類文件系統(tǒng)進(jìn)行統(tǒng)一管理,Linux引入了虛擬文引入了虛擬文件系統(tǒng)件系統(tǒng)VFS(Virtual File System),為各類文件系統(tǒng)提供一,為各類文件系統(tǒng)提供一個(gè)統(tǒng)一的操作界面和應(yīng)用編程接口。個(gè)統(tǒng)一的操作界面和應(yīng)用編程接口。嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 基于基于FLASH的文件系統(tǒng)的文件系統(tǒng) 1. jffs2 2. yaffs 3. Cramfs 4. Romfs 嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v JFFS2v JFFS文件系統(tǒng)最早是由瑞典文件系統(tǒng)最早是由瑞典Axis Communications公司基公司基于于Linux2.0的內(nèi)核為

31、嵌入式系統(tǒng)開發(fā)的文件系統(tǒng)。的內(nèi)核為嵌入式系統(tǒng)開發(fā)的文件系統(tǒng)。JFFS2是是RedHat公司基于公司基于JFFS開發(fā)的閃存文件系統(tǒng),最初是針開發(fā)的閃存文件系統(tǒng),最初是針對(duì)對(duì)RedHat公司的嵌入式產(chǎn)品公司的嵌入式產(chǎn)品eCos開發(fā)的嵌入式文件系統(tǒng),開發(fā)的嵌入式文件系統(tǒng),所以所以JFFS2也可以用在也可以用在Linux, uCLinux中中嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v yaffsv yaffs/yaffs2是專為嵌入式系統(tǒng)使用是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計(jì)的型閃存而設(shè)計(jì)的一種日志型文件系統(tǒng)。與一種日志型文件系統(tǒng)。與jffs2相比,它減少了一些功能相比,它減少了一些功能(例如不

32、支持?jǐn)?shù)據(jù)壓縮例如不支持?jǐn)?shù)據(jù)壓縮),所以速度更快,掛載時(shí)間很短,所以速度更快,掛載時(shí)間很短,對(duì)內(nèi)存的占用較小。另外,它還是跨平臺(tái)的文件系統(tǒng),除對(duì)內(nèi)存的占用較小。另外,它還是跨平臺(tái)的文件系統(tǒng),除了了Linux和和eCos,還支持,還支持WinCE, pSOS和和ThreadX等。等。嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v Cramfs v Cramfs是是Linux的創(chuàng)始人的創(chuàng)始人 Linus Torvalds參與開發(fā)的一種參與開發(fā)的一種只讀的壓縮文件系統(tǒng)。它也基于只讀的壓縮文件系統(tǒng)。它也基于MTD驅(qū)動(dòng)程序。驅(qū)動(dòng)程序。v 在在cramfs文件系統(tǒng)中,每一頁(yè)文件系統(tǒng)中,每一頁(yè)(4KB)被單獨(dú)壓縮

33、,可以隨被單獨(dú)壓縮,可以隨機(jī)頁(yè)訪問(wèn),其壓縮比高達(dá)機(jī)頁(yè)訪問(wèn),其壓縮比高達(dá)2:1,為嵌入式系統(tǒng)節(jié)省大量的為嵌入式系統(tǒng)節(jié)省大量的Flash存儲(chǔ)空間,使系統(tǒng)可通過(guò)更低容量的存儲(chǔ)空間,使系統(tǒng)可通過(guò)更低容量的FLASH存儲(chǔ)相存儲(chǔ)相同的文件,從而降低系統(tǒng)成本。同的文件,從而降低系統(tǒng)成本。嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v Romfsv 傳統(tǒng)型的傳統(tǒng)型的Romfs文件系統(tǒng)是一種簡(jiǎn)單的、緊湊的、只讀的文件系統(tǒng)是一種簡(jiǎn)單的、緊湊的、只讀的文件系統(tǒng),不支持動(dòng)態(tài)擦寫保存,按順序存放數(shù)據(jù),因而文件系統(tǒng),不支持動(dòng)態(tài)擦寫保存,按順序存放數(shù)據(jù),因而支持應(yīng)用程序以支持應(yīng)用程序以XIP(eXecute In Place,

34、片內(nèi)運(yùn)行,片內(nèi)運(yùn)行)方式運(yùn)方式運(yùn)行,在系統(tǒng)運(yùn)行時(shí),節(jié)省行,在系統(tǒng)運(yùn)行時(shí),節(jié)省RAM空間??臻g。uClinux系統(tǒng)通常采系統(tǒng)通常采用用Romfs文件系統(tǒng)文件系統(tǒng)嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 基于基于RAM的文件系統(tǒng)的文件系統(tǒng)v 1. Ramdisk v 2. ramfs/tmpfs嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v Ramdiskv Ramdisk是將一部分固定大小的內(nèi)存當(dāng)作分區(qū)來(lái)使用。它是將一部分固定大小的內(nèi)存當(dāng)作分區(qū)來(lái)使用。它并非一個(gè)實(shí)際的文件系統(tǒng),而是一種將實(shí)際的文件系統(tǒng)裝并非一個(gè)實(shí)際的文件系統(tǒng),而是一種將實(shí)際的文件系統(tǒng)裝入內(nèi)存的機(jī)制,并且可以作為根文件系統(tǒng)。將一些經(jīng)

35、常被入內(nèi)存的機(jī)制,并且可以作為根文件系統(tǒng)。將一些經(jīng)常被訪問(wèn)而又不會(huì)更改的文件訪問(wèn)而又不會(huì)更改的文件(如只讀的根文件系統(tǒng)如只讀的根文件系統(tǒng))通過(guò)通過(guò)Ramdisk放在內(nèi)存中,可以明顯地提高系統(tǒng)的性能。在放在內(nèi)存中,可以明顯地提高系統(tǒng)的性能。在Linux的啟動(dòng)階段,的啟動(dòng)階段,initrd提供了一套機(jī)制,可以將內(nèi)核映提供了一套機(jī)制,可以將內(nèi)核映像和根文件系統(tǒng)一起載入內(nèi)存。像和根文件系統(tǒng)一起載入內(nèi)存。 嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v Ramfs/tmpfsv Ramfs/tmpfs文件系統(tǒng)把所有的文件都放在文件系統(tǒng)把所有的文件都放在RAM中,所以中,所以讀讀/寫操作發(fā)生在寫操作發(fā)生在RA

36、M中,可以用中,可以用ramfs/tmpfs來(lái)存儲(chǔ)一些來(lái)存儲(chǔ)一些臨時(shí)性或經(jīng)常要修改的數(shù)據(jù),例如臨時(shí)性或經(jīng)常要修改的數(shù)據(jù),例如/tmp和和/var目錄,這樣目錄,這樣既避免了對(duì)既避免了對(duì)Flash存儲(chǔ)器的讀寫損耗,也提高了數(shù)據(jù)讀寫存儲(chǔ)器的讀寫損耗,也提高了數(shù)據(jù)讀寫速度。速度。v Ramfs/tmpfs相對(duì)傳統(tǒng)的相對(duì)傳統(tǒng)的Ramdisk的不同之處主要在于:的不同之處主要在于:不能格式化,文件系統(tǒng)大小可隨所含文件內(nèi)容大小變化。不能格式化,文件系統(tǒng)大小可隨所含文件內(nèi)容大小變化。Tmpfs的一個(gè)缺點(diǎn)是當(dāng)系統(tǒng)重新引導(dǎo)時(shí)會(huì)丟失所有數(shù)據(jù)的一個(gè)缺點(diǎn)是當(dāng)系統(tǒng)重新引導(dǎo)時(shí)會(huì)丟失所有數(shù)據(jù)嵌入式文件系統(tǒng)及移植嵌入式文件系

37、統(tǒng)及移植v 網(wǎng)絡(luò)文件系統(tǒng)網(wǎng)絡(luò)文件系統(tǒng)NFSv NFS是由是由Sun開發(fā)并發(fā)展起來(lái)的一項(xiàng)在不同機(jī)器、不同操開發(fā)并發(fā)展起來(lái)的一項(xiàng)在不同機(jī)器、不同操作系統(tǒng)之間通過(guò)網(wǎng)絡(luò)共享文件的技術(shù)。在嵌入式作系統(tǒng)之間通過(guò)網(wǎng)絡(luò)共享文件的技術(shù)。在嵌入式Linux系系統(tǒng)的開發(fā)調(diào)試階段,可以利用該技術(shù)在主機(jī)上建立基于統(tǒng)的開發(fā)調(diào)試階段,可以利用該技術(shù)在主機(jī)上建立基于NFS的根文件系統(tǒng),掛載到嵌入式設(shè)備,可以很方便地修的根文件系統(tǒng),掛載到嵌入式設(shè)備,可以很方便地修改根文件系統(tǒng)的內(nèi)容改根文件系統(tǒng)的內(nèi)容嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 文件系統(tǒng)格式選擇的基本策略文件系統(tǒng)格式選擇的基本策略v 通常,當(dāng)設(shè)計(jì)根文件系統(tǒng)時(shí),可以

38、按如下幾點(diǎn)配置方案來(lái)通常,當(dāng)設(shè)計(jì)根文件系統(tǒng)時(shí),可以按如下幾點(diǎn)配置方案來(lái)解決文件系統(tǒng)的選擇:解決文件系統(tǒng)的選擇:v 把任何在運(yùn)行時(shí)不需要進(jìn)行更新的文件放在把任何在運(yùn)行時(shí)不需要進(jìn)行更新的文件放在cramFs文件文件系統(tǒng)中。因?yàn)橄到y(tǒng)中。因?yàn)镃ramFs的壓縮比高達(dá)的壓縮比高達(dá)2:1,節(jié)約存儲(chǔ)空間的效節(jié)約存儲(chǔ)空間的效果是明顯的。如果應(yīng)用程序要求采用果是明顯的。如果應(yīng)用程序要求采用XIP方式運(yùn)行,則可方式運(yùn)行,則可以選以選 擇采用擇采用RomFs文件系統(tǒng)。文件系統(tǒng)。v 那些需要經(jīng)常讀那些需要經(jīng)常讀/寫的目錄,例如寫的目錄,例如/VAR、/tmp,應(yīng)該放在,應(yīng)該放在tmpfs文件系統(tǒng)中,以減少對(duì)文件系統(tǒng)中

39、,以減少對(duì)Flash的擦寫次數(shù),延長(zhǎng)的擦寫次數(shù),延長(zhǎng)flash的使用壽命。的使用壽命。tmptfs文件系統(tǒng)中的變化在下次啟動(dòng)后是不文件系統(tǒng)中的變化在下次啟動(dòng)后是不會(huì)保存的。會(huì)保存的。嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 對(duì)于那些需要進(jìn)行讀、寫,并且在下次啟動(dòng)之后也能將更對(duì)于那些需要進(jìn)行讀、寫,并且在下次啟動(dòng)之后也能將更新信息保存的文件,則應(yīng)該放入日志型文件系統(tǒng)里。如果新信息保存的文件,則應(yīng)該放入日志型文件系統(tǒng)里。如果采用的是采用的是NOR型閃存,則應(yīng)選擇型閃存,則應(yīng)選擇JFFS2文件系統(tǒng);如果是文件系統(tǒng);如果是NAND 閃存,則應(yīng)選擇閃存,則應(yīng)選擇YAFFS文件系統(tǒng)。文件系統(tǒng)。嵌入式文件

40、系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 混合型文件系統(tǒng)格式的設(shè)計(jì)方法混合型文件系統(tǒng)格式的設(shè)計(jì)方法v 綜合考慮存儲(chǔ)空間和系統(tǒng)可用性因素,適用于嵌入式系統(tǒng)綜合考慮存儲(chǔ)空間和系統(tǒng)可用性因素,適用于嵌入式系統(tǒng)的文件系統(tǒng)格式各有千秋,因此可以在嵌入式系統(tǒng)中采用的文件系統(tǒng)格式各有千秋,因此可以在嵌入式系統(tǒng)中采用混雜模式的文件系統(tǒng)格式混雜模式的文件系統(tǒng)格式嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 嵌入式根文件系統(tǒng)的制作嵌入式根文件系統(tǒng)的制作v 結(jié)合結(jié)合UP-NetARM2410-S試驗(yàn)箱介紹試驗(yàn)箱介紹 Linux根文件系統(tǒng)的根文件系統(tǒng)的構(gòu)建過(guò)程構(gòu)建過(guò)程 1.文件系統(tǒng)方案文件系統(tǒng)方案 2.文件系統(tǒng)構(gòu)建流程文件系統(tǒng)

41、構(gòu)建流程 3.根文件系統(tǒng)的實(shí)現(xiàn)根文件系統(tǒng)的實(shí)現(xiàn)嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 文件系統(tǒng)方案文件系統(tǒng)方案v 根文件系統(tǒng):根文件系統(tǒng): 根文件系統(tǒng)是系統(tǒng)啟動(dòng)時(shí)掛載的第一個(gè)文件系統(tǒng),其根文件系統(tǒng)是系統(tǒng)啟動(dòng)時(shí)掛載的第一個(gè)文件系統(tǒng),其他的文件系統(tǒng)需要在跟文件系統(tǒng)目錄中建立節(jié)點(diǎn)后再他的文件系統(tǒng)需要在跟文件系統(tǒng)目錄中建立節(jié)點(diǎn)后再掛載。掛載。 UP-NetARM2410-S 有一個(gè)有一個(gè) 64M 的的 NANDFLASH,根,根文件系統(tǒng)和用戶文件系統(tǒng)都建立在該文件系統(tǒng)和用戶文件系統(tǒng)都建立在該flash 的后大半部的后大半部分。該分。該 flash 的前小半部分用來(lái)存放的前小半部分用來(lái)存放 boot

42、loader 和和 kernel 映像。映像。 根文件系統(tǒng)選用了根文件系統(tǒng)選用了 Cramfs 文件系統(tǒng)文件系統(tǒng)格式。格式。嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 用戶文件系統(tǒng):用戶文件系統(tǒng): 由于由于 Cramfs 為只讀文件系統(tǒng),為了得到可讀寫的文件為只讀文件系統(tǒng),為了得到可讀寫的文件系統(tǒng),用戶文件系統(tǒng)采用系統(tǒng),用戶文件系統(tǒng)采用 YAFFS文件系統(tǒng)文件系統(tǒng)格式。用戶格式。用戶文件系統(tǒng)掛載于根文件系統(tǒng)下的文件系統(tǒng)掛載于根文件系統(tǒng)下的/mnt/yaffs 目錄。目錄。v 臨時(shí)文件系統(tǒng):臨時(shí)文件系統(tǒng): 采用了采用了 Ramfs 文件系統(tǒng)文件系統(tǒng)。根目錄下的。根目錄下的/var,/tmp 目錄

43、目錄為為 Ramfs 臨時(shí)文件系統(tǒng)的掛載點(diǎn)臨時(shí)文件系統(tǒng)的掛載點(diǎn)嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 文件系統(tǒng)構(gòu)建流程文件系統(tǒng)構(gòu)建流程v 在嵌人式在嵌人式 Linux 系統(tǒng)中混合使用系統(tǒng)中混合使用 Cramfs、YAFFS 和和 Ramfs 三種文件系統(tǒng)的實(shí)現(xiàn)思路如下:三種文件系統(tǒng)的實(shí)現(xiàn)思路如下:v 1. 配置內(nèi)核:將內(nèi)核對(duì)配置內(nèi)核:將內(nèi)核對(duì) MTD,Cramfs,YAFFS 以及以及 Ramfs 文件系統(tǒng)的支持功能編譯進(jìn)內(nèi)核。文件系統(tǒng)的支持功能編譯進(jìn)內(nèi)核。v 2. 劃分劃分 Flash 分區(qū)分區(qū):對(duì)對(duì) Flash 物理空間進(jìn)行分區(qū),以便在物理空間進(jìn)行分區(qū),以便在不同的分區(qū)上存放不同的數(shù)據(jù)

44、,采用不同的文件系統(tǒng)格式不同的分區(qū)上存放不同的數(shù)據(jù),采用不同的文件系統(tǒng)格式;必要時(shí)編寫必要時(shí)編寫 MAPS 文件。今修改系統(tǒng)腳本文件。今修改系統(tǒng)腳本,在系統(tǒng)啟動(dòng)后在系統(tǒng)啟動(dòng)后利用腳本掛載文件系統(tǒng)。創(chuàng)建文件系統(tǒng)鏡像文件利用腳本掛載文件系統(tǒng)。創(chuàng)建文件系統(tǒng)鏡像文件,利用工利用工具生成文件系統(tǒng)鏡像文件,并通過(guò)具生成文件系統(tǒng)鏡像文件,并通過(guò) Flash 燒寫工具將鏡像燒寫工具將鏡像文件燒寫到文件燒寫到 Flash 物理空間。物理空間。 嵌入式文件系統(tǒng)及移植嵌入式文件系統(tǒng)及移植v 根文件系統(tǒng)的實(shí)現(xiàn)根文件系統(tǒng)的實(shí)現(xiàn)v 制作制作 Cramfs 格式的根文件系統(tǒng):一個(gè)使用格式的根文件系統(tǒng):一個(gè)使用 linux

45、內(nèi)核的內(nèi)核的嵌入式系統(tǒng)中的嵌入式系統(tǒng)中的 root 文件系統(tǒng)必須包括支持完整文件系統(tǒng)必須包括支持完整 linux 系系統(tǒng)的全部東西,因此,它至少應(yīng)包括:基本文件系統(tǒng)結(jié)構(gòu);統(tǒng)的全部東西,因此,它至少應(yīng)包括:基本文件系統(tǒng)結(jié)構(gòu);至少含有目錄至少含有目錄/dev、/proc、/bin、/etc、/lib、/usr;最基本;最基本的應(yīng)用程序,如的應(yīng)用程序,如 sh、ls、cp、mv 等;最低限度的配置文等;最低限度的配置文件,如件,如 inittab、fstab 等;設(shè)備:等;設(shè)備:/dev/null、/dev/console、/dev/ tty*、/dev/ttyS*、對(duì)應(yīng)、對(duì)應(yīng) flash 分區(qū)的設(shè)

46、備節(jié)點(diǎn)等;基分區(qū)的設(shè)備節(jié)點(diǎn)等;基本程序運(yùn)行所需的函數(shù)庫(kù)。但由于嵌入式系統(tǒng)資源相對(duì)緊本程序運(yùn)行所需的函數(shù)庫(kù)。但由于嵌入式系統(tǒng)資源相對(duì)緊缺,在構(gòu)建的時(shí)候要根據(jù)系統(tǒng)進(jìn)行定制。缺,在構(gòu)建的時(shí)候要根據(jù)系統(tǒng)進(jìn)行定制。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v linux設(shè)備驅(qū)動(dòng)作用設(shè)備驅(qū)動(dòng)作用v 驅(qū)動(dòng)程序驅(qū)動(dòng)程序Device Driver,全稱為,全稱為“設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序”, 是一種可以使計(jì)是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序,可以說(shuō)相當(dāng)于硬件的接口,操作系統(tǒng)只算機(jī)和設(shè)備通信的特殊程序,可以說(shuō)相當(dāng)于硬件的接口,操作系統(tǒng)只有通過(guò)這個(gè)接口,才能控制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動(dòng)程序有通過(guò)這個(gè)接口,才能控

47、制硬件設(shè)備的工作,假如某設(shè)備的驅(qū)動(dòng)程序未能正確安裝,便不能正常工作。未能正確安裝,便不能正常工作。v Linux 系統(tǒng)內(nèi)核通過(guò)設(shè)備驅(qū)動(dòng)程序與外圍設(shè)備進(jìn)行交互,設(shè)備驅(qū)動(dòng)程系統(tǒng)內(nèi)核通過(guò)設(shè)備驅(qū)動(dòng)程序與外圍設(shè)備進(jìn)行交互,設(shè)備驅(qū)動(dòng)程序是序是Linux內(nèi)核的一部分,它是一組數(shù)據(jù)結(jié)構(gòu)和函數(shù),這些數(shù)據(jù)結(jié)構(gòu)內(nèi)核的一部分,它是一組數(shù)據(jù)結(jié)構(gòu)和函數(shù),這些數(shù)據(jù)結(jié)構(gòu)和函數(shù)通過(guò)定義的接口控制一個(gè)或多個(gè)設(shè)備。對(duì)應(yīng)用程序而言,設(shè)備和函數(shù)通過(guò)定義的接口控制一個(gè)或多個(gè)設(shè)備。對(duì)應(yīng)用程序而言,設(shè)備驅(qū)動(dòng)程序隱藏了設(shè)備的具體細(xì)節(jié),對(duì)各種不同設(shè)備提供一致的接口。驅(qū)動(dòng)程序隱藏了設(shè)備的具體細(xì)節(jié),對(duì)各種不同設(shè)備提供一致的接口。不同于不同于wind

48、ows驅(qū)動(dòng)程序,驅(qū)動(dòng)程序,Linux設(shè)備驅(qū)動(dòng)程序在與硬件設(shè)備之間建設(shè)備驅(qū)動(dòng)程序在與硬件設(shè)備之間建立了標(biāo)準(zhǔn)的抽象接口。通過(guò)這個(gè)接口,用戶可以像處理普通文件一樣,立了標(biāo)準(zhǔn)的抽象接口。通過(guò)這個(gè)接口,用戶可以像處理普通文件一樣,通過(guò)通過(guò)open,close,read,write等系統(tǒng)調(diào)用對(duì)設(shè)備進(jìn)行操作,如此一等系統(tǒng)調(diào)用對(duì)設(shè)備進(jìn)行操作,如此一來(lái)也大大簡(jiǎn)化了來(lái)也大大簡(jiǎn)化了linux驅(qū)動(dòng)程序的開發(fā)。驅(qū)動(dòng)程序的開發(fā)。 linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 設(shè)備驅(qū)動(dòng)程序的主要功能設(shè)備驅(qū)動(dòng)程序的主要功能 對(duì)設(shè)備進(jìn)行初始化。對(duì)設(shè)備進(jìn)行初始化。 啟動(dòng)或停止設(shè)備的運(yùn)行。啟動(dòng)或停止設(shè)備的運(yùn)行。 把數(shù)據(jù)從內(nèi)核傳送到硬件和從

49、硬件讀取數(shù)據(jù)。把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)。 讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)。請(qǐng)求的數(shù)據(jù)。 檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤等。檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤等。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 設(shè)備驅(qū)動(dòng)程序有如下特點(diǎn):設(shè)備驅(qū)動(dòng)程序有如下特點(diǎn): 驅(qū)動(dòng)程序是與設(shè)備相關(guān)的。驅(qū)動(dòng)程序是與設(shè)備相關(guān)的。 驅(qū)動(dòng)程序的代碼由內(nèi)核統(tǒng)一管理。驅(qū)動(dòng)程序的代碼由內(nèi)核統(tǒng)一管理。 驅(qū)動(dòng)程序在具有特權(quán)級(jí)別的內(nèi)核態(tài)下運(yùn)行。驅(qū)動(dòng)程序在具有特權(quán)級(jí)別的內(nèi)核態(tài)下運(yùn)行。 設(shè)備驅(qū)動(dòng)程序是輸入輸出系統(tǒng)的一部分。設(shè)備驅(qū)動(dòng)程序是輸入輸出系統(tǒng)的一部分。 驅(qū)動(dòng)程序是為某個(gè)進(jìn)

50、程服務(wù)的,其執(zhí)行過(guò)程仍處在進(jìn)驅(qū)動(dòng)程序是為某個(gè)進(jìn)程服務(wù)的,其執(zhí)行過(guò)程仍處在進(jìn)程運(yùn)行的過(guò)程中,即處于進(jìn)程的上下文中。程運(yùn)行的過(guò)程中,即處于進(jìn)程的上下文中。 若驅(qū)動(dòng)程序需要等待設(shè)備的某種狀態(tài),它將阻塞當(dāng)前若驅(qū)動(dòng)程序需要等待設(shè)備的某種狀態(tài),它將阻塞當(dāng)前進(jìn)程,把進(jìn)程加入到該設(shè)備的等待隊(duì)列中。進(jìn)程,把進(jìn)程加入到該設(shè)備的等待隊(duì)列中。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v linux設(shè)備驅(qū)動(dòng)程序的基本結(jié)構(gòu)設(shè)備驅(qū)動(dòng)程序的基本結(jié)構(gòu)linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 應(yīng)用程序、庫(kù)、內(nèi)核、驅(qū)動(dòng)程序的關(guān)系:應(yīng)用程序、庫(kù)、內(nèi)核、驅(qū)動(dòng)程序的關(guān)系:v 應(yīng)用程序調(diào)用應(yīng)用程序函數(shù)庫(kù)完成功能、應(yīng)用程序以文件應(yīng)用程序調(diào)用應(yīng)用程序函數(shù)

51、庫(kù)完成功能、應(yīng)用程序以文件形式訪問(wèn)各種資源、應(yīng)用程序函數(shù)庫(kù)、部分函數(shù)直接完成形式訪問(wèn)各種資源、應(yīng)用程序函數(shù)庫(kù)、部分函數(shù)直接完成功能、部分函數(shù)通過(guò)系統(tǒng)調(diào)用。由內(nèi)核完成內(nèi)核處理系統(tǒng)功能、部分函數(shù)通過(guò)系統(tǒng)調(diào)用。由內(nèi)核完成內(nèi)核處理系統(tǒng)調(diào)用。調(diào)用設(shè)備驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)直接與硬件通信。調(diào)用。調(diào)用設(shè)備驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)直接與硬件通信。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v linux設(shè)備驅(qū)動(dòng)的分類設(shè)備驅(qū)動(dòng)的分類v Linux 的方式看待設(shè)備可區(qū)分為三種基本設(shè)備:的方式看待設(shè)備可區(qū)分為三種基本設(shè)備: 字符設(shè)備字符設(shè)備 塊設(shè)備塊設(shè)備 網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)設(shè)備 linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 字符設(shè)備字符設(shè)備 :v

52、一個(gè)字符一個(gè)字符( char ) 設(shè)備是一種可以當(dāng)作一個(gè)設(shè)備是一種可以當(dāng)作一個(gè)字節(jié)流字節(jié)流來(lái)存取的設(shè)備來(lái)存取的設(shè)備( 如同如同一個(gè)文件一個(gè)文件 ); 一個(gè)字符驅(qū)動(dòng)負(fù)責(zé)實(shí)現(xiàn)這種行為。一個(gè)字符驅(qū)動(dòng)負(fù)責(zé)實(shí)現(xiàn)這種行為。 這樣的驅(qū)動(dòng)常常至少這樣的驅(qū)動(dòng)常常至少實(shí)現(xiàn)實(shí)現(xiàn) open, close, read, 和和 write 系統(tǒng)調(diào)用。系統(tǒng)調(diào)用。 v 文本控制臺(tái)文本控制臺(tái)( /dev/console )和串口和串口( /dev/ttyS0 )是字符設(shè)備的例子是字符設(shè)備的例子, 因因?yàn)樗鼈兒芎玫卣宫F(xiàn)了流的抽象。為它們很好地展現(xiàn)了流的抽象。v 字符設(shè)備通過(guò)字符設(shè)備通過(guò)文件系統(tǒng)結(jié)點(diǎn)文件系統(tǒng)結(jié)點(diǎn)來(lái)存取來(lái)存取, 例如

53、例如 /dev/tty1 和和 /dev/lp0。 v 在一個(gè)字符設(shè)備和一個(gè)普通文件之間唯一有關(guān)的不同就是在一個(gè)字符設(shè)備和一個(gè)普通文件之間唯一有關(guān)的不同就是, 你經(jīng)??赡憬?jīng)??梢栽谄胀ㄎ募幸苼?lái)移去以在普通文件中移來(lái)移去, 但是但是大部分字符設(shè)備僅僅是數(shù)據(jù)通道大部分字符設(shè)備僅僅是數(shù)據(jù)通道, 你只你只能順序存取能順序存取。當(dāng)然。當(dāng)然,也存在看起來(lái)象數(shù)據(jù)區(qū)的字符設(shè)備也存在看起來(lái)象數(shù)據(jù)區(qū)的字符設(shè)備, 你可以在里面你可以在里面移來(lái)移去。移來(lái)移去。 例如例如, frame grabber 經(jīng)常這樣經(jīng)常這樣, 應(yīng)用程序可以使用應(yīng)用程序可以使用 mmap 或者或者 lseek 存取整個(gè)要求的圖像。存取整個(gè)要

54、求的圖像。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 塊設(shè)備塊設(shè)備 v 如同字符設(shè)備如同字符設(shè)備, 塊設(shè)備通過(guò)位于塊設(shè)備通過(guò)位于 /dev 目錄的文件系統(tǒng)結(jié)點(diǎn)來(lái)存取。目錄的文件系統(tǒng)結(jié)點(diǎn)來(lái)存取。 一一個(gè)塊設(shè)備個(gè)塊設(shè)備(例如一個(gè)磁盤例如一個(gè)磁盤)應(yīng)該是可以駐有一個(gè)文件系統(tǒng)的。應(yīng)該是可以駐有一個(gè)文件系統(tǒng)的。v 在大部分的在大部分的 Unix 系統(tǒng)中系統(tǒng)中, 一個(gè)塊設(shè)備只能處理這樣的一個(gè)塊設(shè)備只能處理這樣的 I/O 操作操作, 傳送傳送一個(gè)或多個(gè)長(zhǎng)度經(jīng)常是一個(gè)或多個(gè)長(zhǎng)度經(jīng)常是 512 字節(jié)字節(jié)( 或一個(gè)更大的或一個(gè)更大的 2 的冪的數(shù)的冪的數(shù) )的整塊。的整塊。 v Linux中則相反中則相反, 允許應(yīng)用程

55、序讀寫一個(gè)塊設(shè)備象一個(gè)字符設(shè)備一樣,允許應(yīng)用程序讀寫一個(gè)塊設(shè)備象一個(gè)字符設(shè)備一樣,它允許一次傳送任意數(shù)目的字節(jié)。它允許一次傳送任意數(shù)目的字節(jié)。 結(jié)果就是結(jié)果就是, 塊和字符設(shè)備的區(qū)別僅塊和字符設(shè)備的區(qū)別僅僅在內(nèi)核在內(nèi)部管理數(shù)據(jù)的方式上僅在內(nèi)核在內(nèi)部管理數(shù)據(jù)的方式上, 并且因此在內(nèi)核并且因此在內(nèi)核/驅(qū)動(dòng)的軟件接口驅(qū)動(dòng)的軟件接口上不同上不同。 如同一個(gè)字符設(shè)備如同一個(gè)字符設(shè)備, 每個(gè)塊設(shè)備都通過(guò)一個(gè)文件系統(tǒng)結(jié)點(diǎn)被每個(gè)塊設(shè)備都通過(guò)一個(gè)文件系統(tǒng)結(jié)點(diǎn)被存取的存取的, 它們之間的區(qū)別對(duì)用戶是透明的。它們之間的區(qū)別對(duì)用戶是透明的。 塊驅(qū)動(dòng)和字符驅(qū)動(dòng)相比塊驅(qū)動(dòng)和字符驅(qū)動(dòng)相比, 與內(nèi)核的接口完全不同。與內(nèi)核的接

56、口完全不同。 linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 網(wǎng)絡(luò)設(shè)備網(wǎng)絡(luò)設(shè)備v 任何網(wǎng)絡(luò)事務(wù)都通過(guò)一個(gè)接口來(lái)進(jìn)行任何網(wǎng)絡(luò)事務(wù)都通過(guò)一個(gè)接口來(lái)進(jìn)行, 就是說(shuō)就是說(shuō), 一個(gè)能夠與一個(gè)能夠與其他主機(jī)交換數(shù)據(jù)的設(shè)備。其他主機(jī)交換數(shù)據(jù)的設(shè)備。 通常通常, 一個(gè)接口是一個(gè)硬件設(shè)一個(gè)接口是一個(gè)硬件設(shè)備備, 但是它也可能是一個(gè)純粹的軟件設(shè)備但是它也可能是一個(gè)純粹的軟件設(shè)備, 比如回環(huán)接口。比如回環(huán)接口。 一個(gè)網(wǎng)絡(luò)接口負(fù)責(zé)發(fā)送和接收數(shù)據(jù)報(bào)文一個(gè)網(wǎng)絡(luò)接口負(fù)責(zé)發(fā)送和接收數(shù)據(jù)報(bào)文, 在內(nèi)核網(wǎng)絡(luò)子系在內(nèi)核網(wǎng)絡(luò)子系統(tǒng)的驅(qū)動(dòng)下統(tǒng)的驅(qū)動(dòng)下, 不必知道單個(gè)事務(wù)是如何映射到實(shí)際的被發(fā)不必知道單個(gè)事務(wù)是如何映射到實(shí)際的被發(fā)送的報(bào)文上的。送

57、的報(bào)文上的。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 字符設(shè)備與塊設(shè)備的主要區(qū)別是:字符設(shè)備與塊設(shè)備的主要區(qū)別是:v 在對(duì)字符設(shè)備發(fā)出讀在對(duì)字符設(shè)備發(fā)出讀/寫請(qǐng)求時(shí),實(shí)際的硬件寫請(qǐng)求時(shí),實(shí)際的硬件I/O一般緊接一般緊接著發(fā)生。塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),著發(fā)生。塊設(shè)備則不然,它利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),若用戶進(jìn)程對(duì)設(shè)備的請(qǐng)求能滿足用戶的要求,就返回請(qǐng)求若用戶進(jìn)程對(duì)設(shè)備的請(qǐng)求能滿足用戶的要求,就返回請(qǐng)求的數(shù)據(jù);否則,就調(diào)用請(qǐng)求函數(shù)來(lái)進(jìn)行實(shí)際的的數(shù)據(jù);否則,就調(diào)用請(qǐng)求函數(shù)來(lái)進(jìn)行實(shí)際的I/O操作。操作。塊設(shè)備主要是針對(duì)磁盤等慢速設(shè)備設(shè)計(jì)的,以免耗費(fèi)過(guò)多塊設(shè)備主要是針對(duì)磁盤等慢速設(shè)備設(shè)計(jì)

58、的,以免耗費(fèi)過(guò)多的的CPU時(shí)間用來(lái)等待。時(shí)間用來(lái)等待。v 網(wǎng)絡(luò)設(shè)備可以通過(guò)網(wǎng)絡(luò)設(shè)備可以通過(guò)BSD套接口訪問(wèn)數(shù)據(jù)。套接口訪問(wèn)數(shù)據(jù)。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v linux設(shè)備文件和設(shè)備文件系統(tǒng)設(shè)備文件和設(shè)備文件系統(tǒng)v Linux是一種類是一種類Unix系統(tǒng),系統(tǒng),Unix的一個(gè)基本特點(diǎn)是的一個(gè)基本特點(diǎn)是“一切一切皆為文件皆為文件”,它抽象了設(shè)備的處理,將所有的硬件設(shè)備都,它抽象了設(shè)備的處理,將所有的硬件設(shè)備都像普通文件一樣看待,也就是說(shuō)硬件可以跟普通文件一樣像普通文件一樣看待,也就是說(shuō)硬件可以跟普通文件一樣來(lái)打開、關(guān)閉和讀寫。來(lái)打開、關(guān)閉和讀寫。 v 系統(tǒng)中設(shè)備都用一個(gè)設(shè)備特殊文件代表,

59、叫做設(shè)備文件,系統(tǒng)中設(shè)備都用一個(gè)設(shè)備特殊文件代表,叫做設(shè)備文件,設(shè)備類型、主次設(shè)備號(hào)是內(nèi)核與設(shè)備驅(qū)動(dòng)程序通信時(shí)所使設(shè)備類型、主次設(shè)備號(hào)是內(nèi)核與設(shè)備驅(qū)動(dòng)程序通信時(shí)所使用的,但是對(duì)于開發(fā)應(yīng)用程序的用戶來(lái)說(shuō)比較難于理解和用的,但是對(duì)于開發(fā)應(yīng)用程序的用戶來(lái)說(shuō)比較難于理解和記憶,所以記憶,所以 Linux使用了設(shè)備文件的概念來(lái)統(tǒng)一對(duì)設(shè)備的使用了設(shè)備文件的概念來(lái)統(tǒng)一對(duì)設(shè)備的訪問(wèn)接口,在引入設(shè)備文件系統(tǒng)訪問(wèn)接口,在引入設(shè)備文件系統(tǒng)devfs之前之前 Linux 將設(shè)備將設(shè)備文件放在文件放在/dev目錄下,設(shè)備的命名一般為設(shè)備文件名數(shù)目錄下,設(shè)備的命名一般為設(shè)備文件名數(shù)字或字母表示的子類,例如字或字母表示的子

60、類,例如/dev/hda1、/dev/hda2 等。等。linux設(shè)備驅(qū)動(dòng)概述設(shè)備驅(qū)動(dòng)概述v 每個(gè)設(shè)備文件都有其文件屬性每個(gè)設(shè)備文件都有其文件屬性(c/b),表示是字符設(shè)備還是,表示是字符設(shè)備還是塊設(shè)備。另外每個(gè)文件都有塊設(shè)備。另外每個(gè)文件都有2個(gè)設(shè)備號(hào),第一個(gè)是主設(shè)備個(gè)設(shè)備號(hào),第一個(gè)是主設(shè)備號(hào),唯一標(biāo)識(shí)一個(gè)設(shè)備。主設(shè)備號(hào)相同的設(shè)備使用相同的號(hào),唯一標(biāo)識(shí)一個(gè)設(shè)備。主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序;第二個(gè)是從設(shè)備號(hào),標(biāo)識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)驅(qū)動(dòng)程序;第二個(gè)是從設(shè)備號(hào),標(biāo)識(shí)使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的、不同的硬件設(shè)備。程序的、不同的硬件設(shè)備。 v 在在 Linux 2.4 內(nèi)核中引入了設(shè)備文件系統(tǒng)內(nèi)

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論