2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩10頁(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、實(shí)驗(yàn)實(shí)驗(yàn)1Linux模塊定義與操作模塊定義與操作本實(shí)驗(yàn)在Linux2.6內(nèi)核的環(huán)境下,演示了模塊的符號(hào)表導(dǎo)出以及模塊參數(shù)機(jī)制。1.1實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康?.練習(xí)簡(jiǎn)單模塊的編寫(xiě);2.熟悉模塊的符號(hào)表;3.熟悉模塊的參數(shù)使用方法。1.2實(shí)驗(yàn)原理實(shí)驗(yàn)原理1.2.1內(nèi)核編程的注意事項(xiàng)內(nèi)核編程的注意事項(xiàng)首先,Linux可以運(yùn)行在兩種模式下:用戶模式(usermode)和內(nèi)核模式(kernelmode)。當(dāng)我們編寫(xiě)一個(gè)普通程序時(shí),常常會(huì)引用stdlib

2、.h文件,就代表我們要使用C標(biāo)準(zhǔn)庫(kù),這是在用戶空間的做法,用戶空間的應(yīng)用程序也要鏈接標(biāo)準(zhǔn)C庫(kù)。而在內(nèi)核模式下不存在libc庫(kù),也就沒(méi)有這些函數(shù)供我們調(diào)用,因此,我們?cè)趦?nèi)核模式下編程也存在一些限制:?不能使用浮點(diǎn)運(yùn)算。因?yàn)長(zhǎng)inux內(nèi)核在切換模式時(shí)不保存處理器的浮點(diǎn)狀態(tài)。?不要讓內(nèi)核程序忙等。Linux操作系統(tǒng)本身是搶占式的,但是在內(nèi)核是非搶占內(nèi)核,就是說(shuō)用戶空間的程序可以搶占運(yùn)行,但是內(nèi)核空間程序不可以。在內(nèi)核里一個(gè)用時(shí)1秒的循環(huán)看上去

3、就像是把整個(gè)系統(tǒng)掛起了1秒,并且在這段時(shí)間里其他什么工作也做不了。?盡可能保持代碼的清潔。內(nèi)核調(diào)試是一個(gè)十分痛苦的過(guò)程,因此,前期代碼編寫(xiě)的過(guò)程中保持代碼的清潔易懂,將大大方便后期的調(diào)試。1.2.2Linux的模塊機(jī)制的模塊機(jī)制從2.4到2.6:Linux內(nèi)核可裝載模塊機(jī)制的改變:1.模塊編譯從2.4到2.6,外部可裝載內(nèi)核模塊的編譯、連接過(guò)程以及Makefile的書(shū)寫(xiě)都發(fā)生了改變。2.4內(nèi)核中,模塊的編譯只需內(nèi)核源碼頭文件;需要在包含

4、linuxmodules.h之前定義MODULE;編譯、連接后生成的內(nèi)核模塊后綴為.o。2.6內(nèi)核中,模塊的編譯需要配置過(guò)的內(nèi)核源碼;編譯、連接后生成的內(nèi)核模塊后綴為.ko;編譯過(guò)程首先會(huì)到內(nèi)核源碼目錄下,讀取頂層的Makefile文件,然后再返回模塊源碼所在目錄。2.6內(nèi)核模塊的Makefile模板:的指令:EXPT_SYMBOL()和EXPT_SYMPOL_GPL()。導(dǎo)出的內(nèi)核函數(shù)可以被模塊調(diào)用,而未導(dǎo)出的函數(shù)模塊則無(wú)法被調(diào)用。模

5、塊代碼的鏈接和調(diào)用規(guī)則相比核心內(nèi)核鏡像中的代碼而言,要更加嚴(yán)格了。核心代碼在內(nèi)核中可以調(diào)用任意非靜態(tài)接口,因?yàn)樗械暮诵脑创a文件被鏈接成了同一個(gè)鏡像。當(dāng)然,被導(dǎo)出的符號(hào)表所含的函數(shù)必然也是非靜態(tài)的。導(dǎo)出的內(nèi)核符號(hào)表被看作是導(dǎo)出的內(nèi)核接口,甚至成為內(nèi)核API。導(dǎo)出符號(hào)相當(dāng)簡(jiǎn)單,在生命函數(shù)后,緊跟上EXPT_SYMBOL()指令就可以了。1.2.4模塊參數(shù)模塊參數(shù)Linux提供了一種模塊帶參數(shù)的機(jī)制,這樣驅(qū)動(dòng)程序的編寫(xiě)者就可以在驅(qū)動(dòng)程序加

6、載的時(shí)候提供一些信息。這些參數(shù)對(duì)于模塊來(lái)講是一個(gè)全局變量。定義一個(gè)模塊參數(shù)可通過(guò)module_param()完成:module_param(nametypeperm)參數(shù)name,是用戶可見(jiàn)的參數(shù)名,也是模塊中存放模塊參數(shù)的變量名。參數(shù)type代表參數(shù)的類型,它可以是byte、sht、usht、int、uint、long、ulong、p、bool或invbool,它們分別代表字節(jié)型、短整型、無(wú)符號(hào)短整型、整型、無(wú)符號(hào)整型、長(zhǎng)整型、無(wú)符號(hào)

7、長(zhǎng)整型、字符指針、布爾型,以及應(yīng)用戶要求轉(zhuǎn)換得來(lái)的布爾型。最后一個(gè)參數(shù)perm指定了模塊z在sysfs文件系統(tǒng)下對(duì)應(yīng)的文件權(quán)限,可以是八進(jìn)制的格式,比如0644(所有者可以讀寫(xiě),組內(nèi)可以讀,其他人可讀),或是S_Ifoo的定義形式,比如S_IRUGO|SIWUSR(任何人可讀,user可寫(xiě)),如果該值為零在表示禁止所有的sysfs項(xiàng)。需要注意的是,上面的宏并沒(méi)有定義變量,一般要自己聲明變量。1.2.5模塊使用計(jì)數(shù)模塊使用計(jì)數(shù)在一些高級(jí)語(yǔ)

8、言中,比如C#或者Java常常對(duì)引用類型的變量進(jìn)行計(jì)數(shù),在Java中有垃圾的自動(dòng)回收機(jī)制,當(dāng)一個(gè)變量的引用計(jì)數(shù)為0的話,JVM將啟動(dòng)垃圾回收例程,回收這個(gè)變量。在Linux模塊機(jī)制也有類似的思想,但是這些需要我們自己去完成。內(nèi)核記錄加載到系統(tǒng)里的每一個(gè)模塊的使用情況。如果不這么做,內(nèi)核就無(wú)法知道什么時(shí)候可以安全的移除一個(gè)模塊,所謂的安全移除,就是說(shuō)當(dāng)你試圖移除一個(gè)模塊的時(shí)候保證沒(méi)有其他的應(yīng)用程序使用這個(gè)模塊。在Linux中用兩個(gè)宏來(lái)完成

9、對(duì)模塊引用計(jì)數(shù)的操作:MOD_INC_USE_COUNT和MOD_DEC_USE_MOUNT。前者給計(jì)數(shù)器加1,后者給計(jì)數(shù)器減1。1.2.5內(nèi)核調(diào)試函數(shù)內(nèi)核調(diào)試函數(shù)printk本實(shí)驗(yàn)中的模塊代碼中要到了內(nèi)核調(diào)試函數(shù)printk,在用戶空間里我們經(jīng)常使用printf函數(shù)來(lái)向標(biāo)準(zhǔn)輸出流打印信息。printk是內(nèi)核使用的函數(shù),因?yàn)閮?nèi)核沒(méi)有鏈接標(biāo)準(zhǔn)C函數(shù)庫(kù),其實(shí)printk()接口和printf()完全一樣,它可以在控制臺(tái)顯示多達(dá)1024個(gè)字符

溫馨提示

  • 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ù)僅提供信息存儲(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)論