資源描述:
《linux課件--Linux 設(shè)備管理》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Linux設(shè)備管理模塊的安裝和卸載設(shè)備管理模塊的安裝和卸載模塊:可以作為獨(dú)立程序來(lái)編譯的函數(shù)和數(shù)據(jù)結(jié)構(gòu)的集合。它可以動(dòng)態(tài)的增加內(nèi)核的功能。裝載:靜態(tài)裝載:在內(nèi)核啟動(dòng)時(shí)動(dòng)態(tài)裝載:在內(nèi)核運(yùn)行時(shí)注:當(dāng)前裝載的模塊可以在/proc/modeles讀出。模塊一旦被裝入系統(tǒng),就在內(nèi)核地址空間中管態(tài)下執(zhí)行。模塊中的每個(gè)新函數(shù)都必須在模塊裝入內(nèi)核中時(shí)進(jìn)行注冊(cè)。模塊卸載時(shí),函數(shù)必須注銷(xiāo)。模塊的裝載insmode過(guò)程:1、新模塊加入到內(nèi)核空間2、查找導(dǎo)出的內(nèi)核符號(hào)對(duì)模塊中的外部符號(hào)引用進(jìn)行解析,并確保該模塊所引用的其它模塊均已裝入系統(tǒng)。3、為新模塊分配內(nèi)存空間4、裝
2、載新模塊,并導(dǎo)出該模塊定義的符號(hào)。5、調(diào)用新模塊中的初始化函數(shù)模塊的安裝和卸載模塊的卸載rmmod過(guò)程:注銷(xiāo)相應(yīng)的函數(shù)和內(nèi)核符號(hào)取消虛擬地址映像釋放模塊使用空間說(shuō)明:如有其它模塊引用它,則不能卸載。模塊的安裝和卸載設(shè)備管理系統(tǒng)中的所有硬件設(shè)備看起來(lái)都和一般的文件一樣,它們可以使用處理文件的標(biāo)準(zhǔn)系統(tǒng)調(diào)用來(lái)打開(kāi)、關(guān)閉和讀寫(xiě)。系統(tǒng)中的每一個(gè)設(shè)備都由一個(gè)設(shè)備文件來(lái)代表,設(shè)備文件名由主設(shè)備號(hào)和從設(shè)備號(hào)組成。例如,主IDE硬盤(pán)的設(shè)備文件是/dev/hda。一個(gè)設(shè)備驅(qū)動(dòng)程序控制的所有設(shè)備有一個(gè)相同的主設(shè)備號(hào),通過(guò)不同的從設(shè)備號(hào)來(lái)區(qū)分設(shè)備和它們的控制器。例如,主
3、IDE硬盤(pán)的每一個(gè)分區(qū)都有一個(gè)不同的從設(shè)備號(hào),這樣主IDE硬盤(pán)的第二個(gè)分區(qū)的設(shè)備文件是/dev/hda2。Linux系統(tǒng)使用主設(shè)備號(hào)和系統(tǒng)中的一些表來(lái)將系統(tǒng)調(diào)用中使用的設(shè)備文件映射到設(shè)備驅(qū)動(dòng)程序中。Linux系統(tǒng)支持三種類(lèi)型的硬件設(shè)備字符設(shè)備:字符設(shè)備是直接讀取的,不必使用緩沖區(qū)。塊設(shè)備:塊設(shè)備每次只能讀取一定大小的塊的倍數(shù),通常一塊是512或者1024字節(jié)。塊設(shè)備通過(guò)緩沖區(qū)讀寫(xiě),并且可以隨機(jī)地讀寫(xiě)。塊設(shè)備可以通過(guò)它們的設(shè)備文件存取,但通常是通過(guò)文件系統(tǒng)存取。只有塊設(shè)備支持掛接的文件系統(tǒng)。網(wǎng)絡(luò)設(shè)備:網(wǎng)絡(luò)設(shè)備是通過(guò)BSD套接字接口存取的。設(shè)備管理L
4、inux系統(tǒng)支持多種設(shè)備,這些設(shè)備的驅(qū)動(dòng)程序之間有一些共同的特點(diǎn):內(nèi)核代碼:設(shè)備驅(qū)動(dòng)程序是系統(tǒng)內(nèi)核的一部分,所以如果驅(qū)動(dòng)程序出現(xiàn)錯(cuò)誤的話(huà),將可能?chē)?yán)重地破壞整個(gè)系統(tǒng)。內(nèi)核接口:設(shè)備驅(qū)動(dòng)程序必須為系統(tǒng)內(nèi)核或者它們的子系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)的接口。內(nèi)核機(jī)制和服務(wù):設(shè)備驅(qū)動(dòng)程序利用一些標(biāo)準(zhǔn)的內(nèi)核服務(wù),例如內(nèi)存分配等??裳b入:大多數(shù)的Linux設(shè)備驅(qū)動(dòng)程序都可以在需要時(shí)裝入內(nèi)核,在不需要時(shí)卸載??稍O(shè)置:Linux系統(tǒng)設(shè)備驅(qū)動(dòng)程序可以集成為系統(tǒng)內(nèi)核的一部分,至于哪一部分需要集成到內(nèi)核中,可以在系統(tǒng)編譯時(shí)設(shè)置。動(dòng)態(tài)性:當(dāng)系統(tǒng)啟動(dòng)并且各個(gè)設(shè)備驅(qū)動(dòng)程序初始化以后,驅(qū)動(dòng)程
5、序?qū)⒕S護(hù)其控制的設(shè)備。如果設(shè)備驅(qū)動(dòng)程序控制的設(shè)備并不存在,也并不妨礙系統(tǒng)的運(yùn)行。設(shè)備管理設(shè)備管理Linux內(nèi)核和設(shè)備驅(qū)動(dòng)程序之間使用標(biāo)準(zhǔn)的交互接口。設(shè)備驅(qū)動(dòng)程序在其初始化時(shí)就在系統(tǒng)內(nèi)核中進(jìn)行登記。Linux系統(tǒng)使用設(shè)備驅(qū)動(dòng)程序的登記表作為內(nèi)核和驅(qū)動(dòng)程序接口的一部分。這些表中包括指向處理程序的指針和其他信息。主設(shè)備號(hào)chrdevs數(shù)組blkdevs數(shù)組VFSinode數(shù)組元素均為device_struct結(jié)構(gòu)設(shè)備管理字符設(shè)備name:指向登記的設(shè)備驅(qū)動(dòng)程序名fops:指向一個(gè)包括各種文件操作過(guò)程的地址的數(shù)組。此數(shù)組中包括的地址指向設(shè)備驅(qū)動(dòng)程序中處理
6、文件的操作,例如,打開(kāi)、讀寫(xiě)和關(guān)閉子過(guò)程。塊設(shè)備內(nèi)核對(duì)塊設(shè)備的操作要使用緩沖區(qū)。因此,每一個(gè)塊設(shè)備驅(qū)動(dòng)程序必須既向緩沖區(qū)提供接口,也提供一般的文件操作接口。每一個(gè)塊設(shè)備都在blk_dev數(shù)組中有一個(gè)blk_dev_struct結(jié)構(gòu)的記錄。數(shù)據(jù)結(jié)構(gòu)blk_dev_struct包括:request_queue:指向請(qǐng)求數(shù)據(jù)結(jié)構(gòu)鏈表的指針,每一個(gè)請(qǐng)求數(shù)據(jù)結(jié)構(gòu)都代表一個(gè)來(lái)自緩沖區(qū)的請(qǐng)求queue:請(qǐng)求過(guò)程的地址data:輔助信息,幫助找到特定設(shè)備的請(qǐng)求隊(duì)列設(shè)備管理設(shè)備管理每當(dāng)緩沖區(qū)希望和一個(gè)在系統(tǒng)中注冊(cè)的塊設(shè)備交換數(shù)據(jù),它都會(huì)在blk_dev_struc
7、t中添加一個(gè)請(qǐng)求數(shù)據(jù)結(jié)構(gòu)。每一個(gè)請(qǐng)求都有一個(gè)指針指向一個(gè)或者多個(gè)buffer_head數(shù)據(jù)結(jié)構(gòu),每一個(gè)buffer_head結(jié)構(gòu)都是一個(gè)讀寫(xiě)數(shù)據(jù)塊的請(qǐng)求。每一個(gè)請(qǐng)求結(jié)構(gòu)都在一個(gè)靜態(tài)鏈表all_requests中。如果請(qǐng)求添加到了一個(gè)空的請(qǐng)求鏈表中,則調(diào)用設(shè)備驅(qū)動(dòng)程序的請(qǐng)求函數(shù)來(lái)開(kāi)始處理請(qǐng)求隊(duì)列。否則,設(shè)備驅(qū)動(dòng)程序只是簡(jiǎn)單地處理請(qǐng)求隊(duì)列中的每一個(gè)請(qǐng)求。一旦設(shè)備驅(qū)動(dòng)程序完成了一個(gè)請(qǐng)求,它將把buffer_head結(jié)構(gòu)從request結(jié)構(gòu)中移走,并把buffer_head結(jié)構(gòu)標(biāo)記為已更新,同時(shí)將它解鎖。這樣就可以喚醒等待鎖定操作完成的進(jìn)程。設(shè)備管理