《核心模组》PPT课件

《核心模组》PPT课件

ID:39588960

大小:261.19 KB

页数:72页

时间:2019-07-06

《核心模组》PPT课件_第1页
《核心模组》PPT课件_第2页
《核心模组》PPT课件_第3页
《核心模组》PPT课件_第4页
《核心模组》PPT课件_第5页
资源描述:

《《核心模组》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Driver核心模組vs應用程式應用程式啟動後從頭到尾都只執行同一件任務.模組被載入核心之後必須先向核心註冊它自己.•init_module()函式(模組的入口點)任務是將模組的功能準備好以便事後可被invocation(調用).•cleanup_module()在模組離開之前必須要被呼叫.模組只能與核心連結所以模組只能呼叫核心所提供的程式ex:printfk().由於上一點,模組的原始碼不能引入一般的標頭檔.•有關核心相關事物放在/usr/src/linux下的include/linux與include/asm/目錄下的標頭檔.使用者空間與核心空間模組存活在kernelspace(核心空間

2、)而應用程式存在userspace(使用者空間).作業系統必須負責讓程式得以獨立運作並保護系統資源避免非授權的存取.由CPU來保護系統軟體所以CPU本身提供了不同層級的作業模式(operatingmodality).Unix系統提供兩個層級而現在CPU也至少有兩種層級,故Unix系統只使用最高與最低層級,Unix核心運作在最高層級(supervisormode)應用程式運作在最低層級(usermode).executionmode:包括kernel-space與user-space分別有各自的memorymapping(記憶體對應關係)的關係與各自的addressspace(定址空間).in

3、smod載入•insmod對模組的作用:將模組內的任何unresolvedsymbol(懸置符號)連結到目前核心(函式庫)的符號表.•核心如何支援insmod?依賴定義在kernel/module.c的systemcall函式:1)sys_create_module():配置一塊可以容納模組的核心記憶空間.2)sys_get_kernel_syms():傳回核心符號表,解決模組的懸置符號.3)sys_init_module():將insmod改好的relocatedobjectcode移到預先配置的核心空間.系統呼叫大略表:kernel/目錄執行egrep“sys_.*)$”*.c版本依存

4、性模組與連結對象核心息息相關每當升級何新版本時模組就必須再新版本核心下重新編譯一次.編譯器會在ELF(executableLinkingandFormat).的.modifo(chap11)區定義_module_kernel_version符號insmod會依照此符號與當時的核心作比較.定義在.可使用insmod–f來略過版本檢查.針對特定版本的核心來編譯模組必須引入該版本核心的標頭檔再Makefile定義一個KERNELDIR環境變數讓他指另一個不同的位置.核心符號表模組化驅動程式所需的[核心全域項目(函式與變數)]的位置都紀錄在符號表裡可從/proc/k

5、syms取的此表.若模組能被順利載入核心,模組所釋放的符號也會成為核心符號的一部分.模組所釋出的符號可以被新模組使用新模組可以疊在其他模組之上.ex:msdos檔案系統得仰賴fat模組所釋出的符號模組的生與死init_module()會註冊模組所提供的任何facility(功能性).模組可以註冊許多不同類型的facility,對於每一個facility都有一個特定的核心函式來完成其註冊程序.傳給核心註冊函式的引數:facility註冊名稱,指標(指向此facility的資料結構).facility種類:序列阜,雜項裝置,/proc檔案,作業領域(executabledomain),管制線路

6、(linediscipline).Init_module的錯誤處置註冊失敗:系統沒有足夠空間或某資源已被其他驅動程式佔用…模組自己要負責回復(undo)到註冊失敗之前的狀態,如果init_module()在中途失敗,模組必須自己主動註銷(unregister)那些已經註冊成功的facility.不能藉由重新載入模組來重新註冊facility,也不太可能註銷他們,因為需要當初註冊所用的相同指標.使用goto解決.卸載模組使用rmmod可卸載(unload)沒用的模組.原理:rmmod觸發delete_module()systemcall,如果模組的用量為零,則delete_module()會呼

7、叫模組本身的cleanup_module();否則回傳作錯誤代碼.cleanup_module()必須負責註銷該模組的每一項facility.實際的初始化與清理函式命名模組函式,須引入•module_init(my_init);•module_exit(my_cleanup);my_init取代init_module(),my_cleanup取代cleanup_module();所

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。