linux驅(qū)動程序編寫基礎(chǔ).ppt

linux驅(qū)動程序編寫基礎(chǔ).ppt

ID:48186389

大?。?38.50 KB

頁數(shù):45頁

時間:2020-01-18

linux驅(qū)動程序編寫基礎(chǔ).ppt_第1頁
linux驅(qū)動程序編寫基礎(chǔ).ppt_第2頁
linux驅(qū)動程序編寫基礎(chǔ).ppt_第3頁
linux驅(qū)動程序編寫基礎(chǔ).ppt_第4頁
linux驅(qū)動程序編寫基礎(chǔ).ppt_第5頁
資源描述:

《linux驅(qū)動程序編寫基礎(chǔ).ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、Linux操作系統(tǒng)分析與實踐第七講:Linux驅(qū)動程序編寫基礎(chǔ)《Linux操作系統(tǒng)分析與實踐》課程建設(shè)小組北京大學二零零八年春季*致謝:感謝Intel對本課程項目的資助本講主要內(nèi)容Linux內(nèi)核模塊中斷和中斷處理下半部Linux內(nèi)核模塊Linux操作系統(tǒng)的內(nèi)核是單一體系結(jié)構(gòu)(monolithickernel)有了模塊機制后,提高Linux操作系統(tǒng)的可擴充性,內(nèi)核編程不再是一個惡夢什么是模塊呢?模塊的全稱是“動態(tài)可加載內(nèi)核模塊”(LoadableKernelModule,LKM)模塊在內(nèi)核空間運行模塊實際上是一種目標對

2、象文件沒有鏈接,不能獨立運行,但是其代碼可以在運行時鏈接到系統(tǒng)中作為內(nèi)核的一部分運行或從內(nèi)核中取下,從而可以動態(tài)擴充內(nèi)核的功能這種目標代碼通常由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成Linux內(nèi)核模塊的優(yōu)點與缺點優(yōu)點使得內(nèi)核更加緊湊和靈活修改內(nèi)核時,不必全部重新編譯整個內(nèi)核。系統(tǒng)如果需要使用新模塊,只要編譯相應(yīng)的模塊,然后使用insmod將模塊裝載即可模塊的目標代碼一旦被鏈接到內(nèi)核,它的作用域和靜態(tài)鏈接的內(nèi)核目標代碼完全等價缺點由于內(nèi)核所占用的內(nèi)存是不會被換出的,所以鏈接進內(nèi)核的模塊會給整個系統(tǒng)帶來一定的性能和內(nèi)存利用方面的損失;裝

3、入內(nèi)核的模塊就成為內(nèi)核的一部分,可以修改內(nèi)核中的其他部分,因此,模塊的使用不當會導致系統(tǒng)崩潰;為了讓內(nèi)核模塊能訪問所有內(nèi)核資源,內(nèi)核必須維護符號表,并在裝入和卸載模塊時修改符號表;模塊會要求利用其它模塊的功能,所以,內(nèi)核要維護模塊之間的依賴性.Linux內(nèi)核模塊與應(yīng)用程序的區(qū)別C語言程序Linux內(nèi)核模塊運行用戶空間內(nèi)核空間入口main()module_init()指定;出口無module_exit()指定;編譯gcc–cMakefile連接ldinsmod運行直接運行insmod調(diào)試gdbkdbug,kdb,kgd

4、b等模塊相關(guān)命令insmod[moduleparameters]Loadthemodule注意,只有超級用戶才能使用這個命令RmmodUnloadthemodulelsmodListallmodulesloadedintothekernel這個命令和cat/proc/modules等價modprobe[-r]–Loadthemodulespecifiedandmodulesitdepends模塊依賴一個模塊A引用另一個模塊B所導出的符號,我們就說模塊B被模塊A引用。如果要

5、裝載模塊A,必須先要裝載模塊B。否則,模塊B所導出的那些符號的引用就不可能被鏈接到模塊A中。這種模塊間的相互關(guān)系就叫做模塊依賴。最簡單的內(nèi)核模塊例子#include#include#includestaticint__inithello_init(void){printk(KERN_INFO"Helloworld");return0;}staticvoid__exithello_exit(void){printk(KERN

6、_INFO"Goodbyeworld");}module_init(hello_init);module_exit(hello_exit);staticint__inithello_init(void)staticvoid__exithello_exit(void)Static聲明,因為這種函數(shù)在特定文件之外沒有其它意義__init標記,該函數(shù)只在初始化期間使用。模塊裝載后,將該函數(shù)占用的內(nèi)存空間釋放__exit標記該代碼僅用于模塊卸載。Init/exit宏:module_init/module_exit聲明模塊

7、初始化及清除函數(shù)所在的位置裝載和卸載模塊時,內(nèi)核可以自動找到相應(yīng)的函數(shù)module_init(hello_init);module_exit(hello_exit);編譯內(nèi)核模塊Makefile文件obj-m:=hello.oall:make-C/lib/modules/$(shelluname-r)/buildM=$(shellpwd)modulesclean:make-C/lib/modules/$(shelluname-r)/buildM=$(shellpwd)cleanModuleincludesmorefi

8、lesobj-m:=hello.ohello-objs:=a.ob.o裝載和卸載模塊相關(guān)命令lsmodinsmodhello.kormmodhello.ko模塊參數(shù)傳遞有些模塊需要傳遞一些參數(shù)參數(shù)在模塊加載時傳遞#insmodhello.kotest=2參數(shù)需要使用module_param宏來聲明module_param的參數(shù):變量名稱,類型以

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。