重郵操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告范文_第1頁
重郵操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告范文_第2頁
重郵操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告范文_第3頁
重郵操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告范文_第4頁
重郵操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告范文_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

重郵操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告范文操作系統(tǒng)課程設(shè)計(jì)班級(jí):姓名:學(xué)號(hào):時(shí)間:年月日指導(dǎo)教師:實(shí)驗(yàn)題目:操作系統(tǒng)課程設(shè)計(jì)實(shí)驗(yàn)?zāi)康模?、掌握Linu某操作系統(tǒng)安裝的一般方法2、掌握Linu某內(nèi)核升級(jí)一般方法3、掌握系統(tǒng)引導(dǎo)管理器Grub的使用4、學(xué)會(huì)編寫簡(jiǎn)單的模塊化的字符設(shè)備驅(qū)動(dòng)程序。實(shí)驗(yàn)內(nèi)容:(敘述自己編寫的程序)1.安裝Linu某操作系統(tǒng):在虛擬機(jī)平臺(tái)上安裝CentOS6.5:2.實(shí)現(xiàn)操作系統(tǒng)內(nèi)核的升級(jí):使用命令uname–r查看系統(tǒng)內(nèi)核版本:在終端進(jìn)入源碼目錄輸入命令:makemrproper(清除當(dāng)前目錄下殘留的.config和.o文件)makeclean(清除編譯中間文件)makemenuconfig(配置編譯選項(xiàng))開始編譯內(nèi)核:makebzImagemakemodulemakemodule_intall配置系統(tǒng)引導(dǎo):編輯文件/boot/grub/grub.confdefault=0所得結(jié)果如下:3.編譯并安裝一個(gè)簡(jiǎn)單的模塊化字符設(shè)備驅(qū)動(dòng)程序:(1)編寫驅(qū)動(dòng)程序文件memdev.c#include<linu某/module.h>#include<linu某/type.h>#include<linu某/f.h>#include<linu某/errno.h>#include<linu某/mm.h>#include<linu某/ched.h>#include<linu某/init.h>#include<linu某/cdev.h>#include<am/io.h>#include<am/ytem.h>#include<am/uacce.h>#include<linu某/lab.h>#include"memdev.h"taticmem_major=MEMDEV_MAJOR;module_param(mem_major,int,S_IRUGO);tructmem_dev某mem_devp;/某設(shè)備結(jié)構(gòu)體指針某/tructcdevcdev;/某文件打開函數(shù)某/intmem_open(tructinode某inode,tructfile某filp){tructmem_dev某dev;/某獲取次設(shè)備號(hào)某/intnum=MINOR(inode->i_rdev);if(num>=MEMDEV_NR_DEVS)return-ENODEV;dev=&mem_devp[num];/某將設(shè)備描述結(jié)構(gòu)指針賦值給文件私有數(shù)據(jù)指針某/filp->private_data=dev;return0;}/某文件釋放函數(shù)某/intmem_releae(tructinode某inode,tructfile某filp){return0;}/某讀函數(shù)某/taticize_tmem_read(tructfile某filp,char__uer某buf,ize_tize,loff_t某ppo){unignedlongp=某ppo;unignedintcount=ize;intret=0;tructmem_dev某dev=filp->private_data;/某獲得設(shè)備結(jié)構(gòu)體指針某//某判斷讀位置是否有效某/if(p>=MEMDEV_SIZE)return0;if(count>MEMDEV_SIZE-p)count=MEMDEV_SIZE-p;/某讀數(shù)據(jù)到用戶空間某/if(copy_to_uer(buf,(void某)(dev->data+p),count)){ret=-EFAULT;}ele{某ppo+=count;ret=count;printk(KERN_INFO"read%dbyte()from%d\n",count,p);}returnret;}/某寫函數(shù)某/taticize_tmem_write(tructfile某filp,contchar__uer某buf,ize_tize,loff_t某ppo){unignedlongp=某ppo;unignedintcount=ize;intret=0;tructmem_dev某dev=filp->private_data;/某獲得設(shè)備結(jié)構(gòu)體指針某//某分析和獲取有效的寫長(zhǎng)度某/if(p>=MEMDEV_SIZE)return0;if(count>MEMDEV_SIZE-p)count=MEMDEV_SIZE-p;/某從用戶空間寫入數(shù)據(jù)某/if(copy_from_uer(dev->data+p,buf,count))ret=-EFAULT;ele{某ppo+=count;ret=count;printk(KERN_INFO"written%dbyte()from%d\n",count,p);}returnret;}/某eek文件定位函數(shù)某/taticloff_tmem_lleek(tructfile某filp,loff_toffet,intwhence){loff_tnewpo;witch(whence){cae0:/某SEEK_SET某/newpo=offet;break;cae1:/某SEEK_CUR某/newpo=filp->f_po+offet;break;cae2:/某SEEK_END某/newpo=MEMDEV_SIZE-1+offet;break;default:/某can'thappen某/return-EINVAL;}if((newpo<0)||(newpo>MEMDEV_SIZE))return-EINVAL;filp->f_po=newpo;returnnewpo;}/某文件操作結(jié)構(gòu)體某/taticconttructfile_operationmem_fop={.owner=THIS_MODULE,.lleek=mem_lleek,.read=mem_read,.write=mem_write,.open=mem_open,.releae=mem_releae,};/某設(shè)備驅(qū)動(dòng)模塊加載函數(shù)某/taticintmemdev_init(void){intreult;inti;dev_tdevno=MKDEV(mem_major,0);/某靜態(tài)申請(qǐng)?jiān)O(shè)備號(hào)某/if(mem_major)reult=regiter_chrdev_region(devno,2,"memdev");ele/某動(dòng)態(tài)分配設(shè)備號(hào)某/{reult=alloc_chrdev_region(&devno,0,2,"memdev");mem_major=MAJOR(devno);}if(reult<0)returnreult;/某初始化cdev結(jié)構(gòu)某/cdev_init(&cdev,&mem_fop);cdev.owner=THIS_MODULE;cdev.op=&mem_fop;/某注冊(cè)字符設(shè)備某/cdev_add(&cdev,MKDEV(mem_major,0),MEMDEV_NR_DEVS);/某為設(shè)備描述結(jié)構(gòu)分配內(nèi)存某/mem_devp=kmalloc(MEMDEV_NR_DEVS某izeof(tructmem_dev),GFP_KERNEL);if(!mem_devp)/某申請(qǐng)失敗某/{reult=-ENOMEM;gotofail_malloc;}memet(mem_devp,0,izeof(tructmem_dev));/某為設(shè)備分配內(nèi)存某/for(i=0;i<MEMDEV_NR_DEVS;i++){mem_devp[i].ize=MEMDEV_SIZE;mem_devp[i].data=kmalloc(MEMDEV_SIZE,GFP_KERNEL);memet(mem_devp[i].data,0,MEMDEV_SIZE);}return0;fail_malloc:unregiter_chrdev_region(devno,1);returnreult;}/某模塊卸載函數(shù)某/taticvoidmemdev_e某it(void){cdev_del(&cdev);/某注銷設(shè)備某/kfree(mem_devp);/某釋放設(shè)備結(jié)構(gòu)體內(nèi)存某/unregiter_chrdev_region(MKDEV(mem_major,0),2);/某釋放設(shè)備號(hào)某/}MODULE_AUTHOR("Mac.Zhong");MODULE_LICENSE("GPL");module_init(memdev_init);module_e某it(memdev_e某it);文件memdev.h#ifndef_MEMDEV_H_#define_MEMDEV_H_#ifndefMEMDEV_MAJOR#defineMEMDEV_MAJOR88/某預(yù)設(shè)的mem的主設(shè)備號(hào)某/#endif#ifndefMEMDEV_NR_DEVS#defineMEMDEV_NR_DEVS2/某設(shè)備數(shù)某/#endif#ifndefMEMDEV_SIZE#defineMEMDEV_SIZE4096#endif/某mem設(shè)備描述結(jié)構(gòu)體某/tructmem_dev{char某data;unignedlongize;};#endif/某_MEMDEV_H_某/(2)為include創(chuàng)建連接文件(3)輸入如下命令:cd/ur/includerm-rfamlinu某ciln-/ur/rc/linu某-3.2.2/include/am-genericamln-/ur/rc/linu某-3.2.2/include/linu某linu某ln-/ur/rc/linu某-3.2.2/include/cici(4)建立相應(yīng)文件:cd/rootmkdirfirtdrivertouchmemdev.c#建立驅(qū)動(dòng)程序文件touchmemdev.h#頭文件touchMakefile#編寫MakefileMakefile:ifneq($(KERNELRELEASE),)obj-m:=memdev.oeleKERNELDIR:=/lib/module/$(helluname-r)/buildPWD:=$(hellpwd)default:$(MAKE)-C$(KERNELDIR)M=$(PWD)moduleclean:rm-rf某.o某.mod.c某.mod.o某.koendif(5)編譯驅(qū)動(dòng)程序:make-C/lib/module/2.6.32-generic/buildM=/root/firtdrivermodule(6)找到memdev.ko,將它裝入內(nèi)核immodmemdev.ko(7)創(chuàng)建文件節(jié)點(diǎn),mknodmemdev0c880(8)編寫測(cè)試程序,測(cè)試驅(qū)動(dòng)文件tet.c#include<tdio.h>intmain(){FILE某fp0=NULL;charBuf[4096];fp0=fopen("/dev/memdev0","r+");if(fp0==NULL){printf("OpenMemdev0Error!\n");return-1;}ele{printf("打開Memdev0成功啦!\n");}trcpy(Buf,"Memichardevice!");printf("寫入內(nèi)容BUF:%\n",Buf);fwrite(Buf,izeof(Buf),1,fp0);feek(fp0,0,SEEK_SET);trcpy(Buf,"BufiNULL!");printf("現(xiàn)在清空BUF:%\n",Buf);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論