




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、模塊編程實驗模塊編程實驗 _ 1 成都信息工程學院 徐虹第1頁,共26頁,2022年,5月20日,6點22分,星期四. / 聲明是一個模塊. / 加載時,初始化模塊的編碼 #include / 說明是個內(nèi)核功能 / read()、ioctl()等函數(shù) . void cleanup_module() . / 卸載時,注銷模塊的編碼 模塊編程實驗 _ 2 成都信息工程學院 徐虹第2頁,共26頁,2022年,5月20日,6點22分,星期四6.2.2 模塊的編譯 #gcc O2 g Wall DMODULE D_KERNEL_c filename.c / filename.c為自己編寫的模塊程序源代碼
2、文件 6.2.3 模塊的加載 6.2.4 模塊的卸載 6.2.5 模塊鏈接到內(nèi)核的示意圖 6.2.6 模塊程序中管理模塊的幾個文件操作模塊編程實驗 _ 3 成都信息工程學院 徐虹第3頁,共26頁,2022年,5月20日,6點22分,星期四int(*lseek)(),int(*read)(),int(*write)(),int(*readdir)(),int(*select)(),int (*ioctl)(),int (*mmap)(),int (*open)(),void (*release)(),int(*fsync)(), int(*fasync)(), int(*check_media_
3、change)(), int(*revalidate)() 模塊編程實驗 _ 4 成都信息工程學院 徐虹第4頁,共26頁,2022年,5月20日,6點22分,星期四圖6-1 模塊鏈接到內(nèi)核的示意圖模塊編程實驗 _ 5 成都信息工程學院 徐虹第5頁,共26頁,2022年,5月20日,6點22分,星期四 NULL, / modulename_lseek, 改變模塊結構中的操作位置 modulename_read, modulename_write, NULL, / modulename_readdir,讀取某個子目錄中的內(nèi)容struct file_operationsmodulename_fops
4、 = NULL, / modulename_select,允許應用程序響應來自模塊的事件 模塊編程實驗 _ 6 成都信息工程學院 徐虹第6頁,共26頁,2022年,5月20日,6點22分,星期四 NULL, / modulename_ioctl,應用程序通過I/O控制系統(tǒng)的系統(tǒng)調(diào) / 用來控制模塊行為 NULL, / modulename_mmap,模塊地址空間到用戶地址空間的映射 modulename_open, modulename_release, NULL, / modulename_fsync,同步內(nèi)存與磁盤上的數(shù)據(jù)狀態(tài),輸模塊編程實驗 _ 7 成都信息工程學院 徐虹第7頁,共26頁
5、,2022年,5月20日,6點22分,星期四 / 出緩沖區(qū)里尚未寫到磁盤的數(shù)據(jù)寫出去 NULL, / modulename_fasync,改變模塊行為 NULL, / modulename_check_media_change,檢查自上次操作后, / 介質(軟盤和CD-ROM)是否更換 NULL / modulename_revalidate,若更換了介質,則更新信息 模塊編程實驗 _ 8 成都信息工程學院 徐虹第8頁,共26頁,2022年,5月20日,6點22分,星期四6.3 實驗內(nèi)容 6.3.1 編寫一個簡單的內(nèi)核模塊6.3.2 模塊加載前后的比較6.3.3 向模塊中再添加一些新函數(shù)6.4
6、 實驗指導 6.4.1 一個簡單的內(nèi)核模塊模塊編程實驗 _ 9 成都信息工程學院 徐虹第9頁,共26頁,2022年,5月20日,6點22分,星期四#include / 在內(nèi)核模塊中共享 #include / 一個模塊 / 處理CONFIG_MODVERSIONS #if CONFIG_MODVERSIONS = 1 #define MODVERSIONS #include #endif int init_module() / 初始化模塊 模塊編程實驗 _ 10 成都信息工程學院 徐虹第10頁,共26頁,2022年,5月20日,6點22分,星期四 printk(Hello! This is a
7、testing module! n); return 0; void cleanup_module() / 取消init_module()函數(shù)所做的打印功能操作 printk(Sorry! The testing module is unloading now! n); 模塊編程實驗 _ 11 成都信息工程學院 徐虹第11頁,共26頁,2022年,5月20日,6點22分,星期四rootlinux /# gcc O2 Wall DMODULE D_KERNEL_ c testmodule.c rootlinux /# ls s / 在當前目錄下查看生成的目標文件testmodule.o root
8、linux /# insmod f testmodule.o Hello! This is a testing module! 模塊編程實驗 _ 12 成都信息工程學院 徐虹第12頁,共26頁,2022年,5月20日,6點22分,星期四rootlinux /# rmmod testmodule Sorry! The testing module is unloading now! 6.4.2 模塊加載前后的比較#include / 用戶空間的標準I/O出頭文件void GetCr3() 模塊編程實驗 _ 13 成都信息工程學院 徐虹第13頁,共26頁,2022年,5月20日,6點22分,星期四
9、 int iValue; _ _asm_ _volatile_ _(movl %cr3,%0: =r (a);printf(“the value in cr3 is: %d”,a); / 用戶空間的標準輸出函數(shù)int main()模塊編程實驗 _ 14 成都信息工程學院 徐虹第14頁,共26頁,2022年,5月20日,6點22分,星期四 GetCr3(); return 0;#include int init_module() int iValue; _ _asm_ _volatile_(模塊編程實驗 _ 15 成都信息工程學院 徐虹第15頁,共26頁,2022年,5月20日,6點22分,星期
10、四movl %cr3,%0: =r(iValue); printf(cr3:%d,iValue); return 0;void cleanup_module(void) printk(uninstall GetCr3! n);模塊編程實驗 _ 16 成都信息工程學院 徐虹第16頁,共26頁,2022年,5月20日,6點22分,星期四DFLAGS=D_KERNEL_DMODULECFLAGS=O2 g Wall Wstrict-prototypes pipe l/user/include/linux/gcc c GetCr3.c $(DFLAGS) $(CFLAGS) o GetCr3.ocle
11、an:rm f*.oGetCr3.o: GetCr3.c模塊編程實驗 _ 17 成都信息工程學院 徐虹第17頁,共26頁,2022年,5月20日,6點22分,星期四rootlinuxserver root# /sbin/insmod GetCr3.o Cr3:234320012 / 這個數(shù)值有可能不一樣rootlinuxserver root# /sbin/rmmod GetCr3Uninstall GetCr3!模塊編程實驗 _ 18 成都信息工程學院 徐虹第18頁,共26頁,2022年,5月20日,6點22分,星期四6.4.3 向模塊中添加新函數(shù)int open(struct inode*
12、inode,struct file*filp) MOD_INC_USE_COUNT; / 增加該模塊的用戶數(shù)目 printk(This module is in open!n); return 0; 模塊編程實驗 _ 19 成都信息工程學院 徐虹第19頁,共26頁,2022年,5月20日,6點22分,星期四 void release(struct inode*inode,struct file*filp) MOD_DEC_USE_COUNT; / 該模塊的用戶數(shù)目減1 printk(This module is in release!n); return 0; #ifdef DEBUG 模塊編
13、程實驗 _ 20 成都信息工程學院 徐虹第20頁,共26頁,2022年,5月20日,6點22分,星期四 printk(release(%p,%p)n,inode,filp); #endif int read(struct inode*inode,struct file*filp,char*buf,int count) int leave; if(verify_area(VERIFY_WRITE,buf,count) = DEFAULT) return DEFAULT; for(leave=count;leave0;leave -) 模塊編程實驗 _ 21 成都信息工程學院 徐虹第21頁,共26
14、頁,2022年,5月20日,6點22分,星期四 _ _put_user(1,buf,1); buf +; return count; Int write(struct inode*inode,struct file*filp,const char*buf,int count) return count; 模塊編程實驗 _ 22 成都信息工程學院 徐虹第22頁,共26頁,2022年,5月20日,6點22分,星期四6.4.4 模塊的測試 #mknod /dev/moduledev c major minor rootlinux /#cat /proc/modules | awk $2= moduledev print$1模塊編程實驗 _ 23 成都信息工程學院 徐虹第23頁,共26頁,2022年,5月20日,6點22分,星期四#include #include #include #include main ( ) int i,testmoduledev; char buf10; testmoduledev=open(/dev/moduledev,O_RDWR); if(testmoduledev = 1) 模塊編程實驗 _ 24 成都信息工程學院 徐虹第24頁,共26頁,2022年,5月20日,6點22分,星期四 printf(C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國傳統(tǒng)管理智慧以孝治企
- 2025年黨員領導干部廉潔自律知識考試題庫及答案(共250題)
- 出納轉正的工作計劃
- 出口退稅服務合同范本
- 《國際市場營銷》課件-第2章 國際市場營銷環(huán)境
- 《國際市場推廣》課件-項目八 海外社交媒體認知
- 杭州市舞蹈工作室租賃合同
- 二零二五年度藝術品保管與藝術品展覽展示合同
- 電子信息系統(tǒng)測試規(guī)范與流程說明書
- 商業(yè)零售店面的經(jīng)營策略手冊
- 《柯高峰行政監(jiān)察學》課件
- 2024城市道路路面維修養(yǎng)護技術規(guī)程
- 老年糖尿病夜間低血糖的預防及護理
- 梅毒病人產(chǎn)后護理查房
- 小班-語言社會-幸福的“叮咚”-課件(基礎版)公開課教案教學設計課件案例試卷
- 專業(yè)培訓金蝶k3wise供應鏈系統(tǒng)培訓
- 辦公耗材采購 投標方案(技術方案)
- 《干部履歷表》填寫樣式
- 汽車電氣設備檢測與維修中職全套教學課件
- 卡支付敏感信息管理實施細則
- Hadoop技術之大數(shù)據(jù)概念介紹課件
評論
0/150
提交評論