模塊編程實驗精品課件_第1頁
模塊編程實驗精品課件_第2頁
模塊編程實驗精品課件_第3頁
模塊編程實驗精品課件_第4頁
模塊編程實驗精品課件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論