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