版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗實驗1Linux模塊定義與操作模塊定義與操作本實驗在Linux2.6內(nèi)核的環(huán)境下,演示了模塊的符號表導(dǎo)出以及模塊參數(shù)機制。1.1實驗?zāi)康膶嶒災(zāi)康?.練習(xí)簡單模塊的編寫;2.熟悉模塊的符號表;3.熟悉模塊的參數(shù)使用方法。1.2實驗原理實驗原理1.2.1內(nèi)核編程的注意事項內(nèi)核編程的注意事項首先,Linux可以運行在兩種模式下:用戶模式(usermode)和內(nèi)核模式(kernelmode)。當(dāng)我們編寫一個普通程序時,常常會引用stdlib
2、.h文件,就代表我們要使用C標(biāo)準(zhǔn)庫,這是在用戶空間的做法,用戶空間的應(yīng)用程序也要鏈接標(biāo)準(zhǔn)C庫。而在內(nèi)核模式下不存在libc庫,也就沒有這些函數(shù)供我們調(diào)用,因此,我們在內(nèi)核模式下編程也存在一些限制:?不能使用浮點運算。因為Linux內(nèi)核在切換模式時不保存處理器的浮點狀態(tài)。?不要讓內(nèi)核程序忙等。Linux操作系統(tǒng)本身是搶占式的,但是在內(nèi)核是非搶占內(nèi)核,就是說用戶空間的程序可以搶占運行,但是內(nèi)核空間程序不可以。在內(nèi)核里一個用時1秒的循環(huán)看上去
3、就像是把整個系統(tǒng)掛起了1秒,并且在這段時間里其他什么工作也做不了。?盡可能保持代碼的清潔。內(nèi)核調(diào)試是一個十分痛苦的過程,因此,前期代碼編寫的過程中保持代碼的清潔易懂,將大大方便后期的調(diào)試。1.2.2Linux的模塊機制的模塊機制從2.4到2.6:Linux內(nèi)核可裝載模塊機制的改變:1.模塊編譯從2.4到2.6,外部可裝載內(nèi)核模塊的編譯、連接過程以及Makefile的書寫都發(fā)生了改變。2.4內(nèi)核中,模塊的編譯只需內(nèi)核源碼頭文件;需要在包含
4、linuxmodules.h之前定義MODULE;編譯、連接后生成的內(nèi)核模塊后綴為.o。2.6內(nèi)核中,模塊的編譯需要配置過的內(nèi)核源碼;編譯、連接后生成的內(nèi)核模塊后綴為.ko;編譯過程首先會到內(nèi)核源碼目錄下,讀取頂層的Makefile文件,然后再返回模塊源碼所在目錄。2.6內(nèi)核模塊的Makefile模板:的指令:EXPT_SYMBOL()和EXPT_SYMPOL_GPL()。導(dǎo)出的內(nèi)核函數(shù)可以被模塊調(diào)用,而未導(dǎo)出的函數(shù)模塊則無法被調(diào)用。模
5、塊代碼的鏈接和調(diào)用規(guī)則相比核心內(nèi)核鏡像中的代碼而言,要更加嚴(yán)格了。核心代碼在內(nèi)核中可以調(diào)用任意非靜態(tài)接口,因為所有的核心源代碼文件被鏈接成了同一個鏡像。當(dāng)然,被導(dǎo)出的符號表所含的函數(shù)必然也是非靜態(tài)的。導(dǎo)出的內(nèi)核符號表被看作是導(dǎo)出的內(nèi)核接口,甚至成為內(nèi)核API。導(dǎo)出符號相當(dāng)簡單,在生命函數(shù)后,緊跟上EXPT_SYMBOL()指令就可以了。1.2.4模塊參數(shù)模塊參數(shù)Linux提供了一種模塊帶參數(shù)的機制,這樣驅(qū)動程序的編寫者就可以在驅(qū)動程序加
6、載的時候提供一些信息。這些參數(shù)對于模塊來講是一個全局變量。定義一個模塊參數(shù)可通過module_param()完成:module_param(nametypeperm)參數(shù)name,是用戶可見的參數(shù)名,也是模塊中存放模塊參數(shù)的變量名。參數(shù)type代表參數(shù)的類型,它可以是byte、sht、usht、int、uint、long、ulong、p、bool或invbool,它們分別代表字節(jié)型、短整型、無符號短整型、整型、無符號整型、長整型、無符號
7、長整型、字符指針、布爾型,以及應(yīng)用戶要求轉(zhuǎn)換得來的布爾型。最后一個參數(shù)perm指定了模塊z在sysfs文件系統(tǒng)下對應(yīng)的文件權(quán)限,可以是八進制的格式,比如0644(所有者可以讀寫,組內(nèi)可以讀,其他人可讀),或是S_Ifoo的定義形式,比如S_IRUGO|SIWUSR(任何人可讀,user可寫),如果該值為零在表示禁止所有的sysfs項。需要注意的是,上面的宏并沒有定義變量,一般要自己聲明變量。1.2.5模塊使用計數(shù)模塊使用計數(shù)在一些高級語
8、言中,比如C#或者Java常常對引用類型的變量進行計數(shù),在Java中有垃圾的自動回收機制,當(dāng)一個變量的引用計數(shù)為0的話,JVM將啟動垃圾回收例程,回收這個變量。在Linux模塊機制也有類似的思想,但是這些需要我們自己去完成。內(nèi)核記錄加載到系統(tǒng)里的每一個模塊的使用情況。如果不這么做,內(nèi)核就無法知道什么時候可以安全的移除一個模塊,所謂的安全移除,就是說當(dāng)你試圖移除一個模塊的時候保證沒有其他的應(yīng)用程序使用這個模塊。在Linux中用兩個宏來完成
9、對模塊引用計數(shù)的操作:MOD_INC_USE_COUNT和MOD_DEC_USE_MOUNT。前者給計數(shù)器加1,后者給計數(shù)器減1。1.2.5內(nèi)核調(diào)試函數(shù)內(nèi)核調(diào)試函數(shù)printk本實驗中的模塊代碼中要到了內(nèi)核調(diào)試函數(shù)printk,在用戶空間里我們經(jīng)常使用printf函數(shù)來向標(biāo)準(zhǔn)輸出流打印信息。printk是內(nèi)核使用的函數(shù),因為內(nèi)核沒有鏈接標(biāo)準(zhǔn)C函數(shù)庫,其實printk()接口和printf()完全一樣,它可以在控制臺顯示多達1024個字符
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)實驗linux進程與線程通訊
- 操作系統(tǒng)linux主存管理操作系統(tǒng)實驗 5
- linux操作系統(tǒng)實驗指導(dǎo)書
- 模塊定義 (.def) 文件
- 嵌入式linux操作系統(tǒng)模塊改進技術(shù)研究
- 基于Linux操作系統(tǒng)的嵌入式數(shù)據(jù)采集模塊設(shè)計與實現(xiàn).pdf
- 基于LINUX的操作系統(tǒng)實驗平臺的設(shè)計與實現(xiàn).pdf
- 基于Linux內(nèi)核的操作系統(tǒng)實驗系統(tǒng).pdf
- 哈工大操作系統(tǒng)實驗linux-0.11_實驗一-啟動系統(tǒng)
- 跨Linux與Windows操作系統(tǒng)平臺的藏文輸入法接口模塊研究.pdf
- 化學(xué)實驗操作1
- linux操作系統(tǒng)
- linux進程操作命令
- linux常用操作命令
- 操作系統(tǒng)實驗報告熟悉linux的基本環(huán)境和linux的基本命令
- 實驗一數(shù)據(jù)定義與簡單查詢實驗
- 定義與命題教案1
- 操作系統(tǒng)實驗報告熟悉linux的基本環(huán)境和linux的基本命令
- 化學(xué)基本實驗操作1
- linux安全模塊(lsm)外文翻譯
評論
0/150
提交評論