歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

嵌入式操作系統(tǒng)(Linu進(jìn)程及設(shè)備驅(qū)動(dòng)程序).ppt

  • 資源ID:12724570       資源大?。?span id="xv8vn0w" class="font-tahoma">809KB        全文頁數(shù):65頁
  • 資源格式: PPT        下載積分:14.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要14.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

嵌入式操作系統(tǒng)(Linu進(jìn)程及設(shè)備驅(qū)動(dòng)程序).ppt

Linux進(jìn)程間通信及驅(qū)動(dòng)程序,軟件學(xué)院張亮liangzhang,西安電子科技大學(xué)軟件學(xué)院,2,通信目的,進(jìn)程間的數(shù)據(jù)傳遞,A向B傳送,進(jìn)程間的數(shù)據(jù)共享,一個(gè)修改后,別的可以看到,通知事件:一個(gè)進(jìn)程要向一個(gè)或者一組進(jìn)程發(fā)送消息,表明某種事件的產(chǎn)生,資源共享:多個(gè)進(jìn)程要共享同樣的資源,需要加鎖和同步,進(jìn)程控制:需要控制另外一個(gè)進(jìn)程的執(zhí)行(知道他的狀態(tài)信息),西安電子科技大學(xué)軟件學(xué)院,3,通信方法,信號(hào),管道,消息,信號(hào)量,共享內(nèi)存,套接字,自定義,西安電子科技大學(xué)軟件學(xué)院,4,通信方法信號(hào),最古老的進(jìn)程間通信方式之一,內(nèi)核為進(jìn)程產(chǎn)生信號(hào),以表示不同的事件,這些事件就是信號(hào)源,異常:進(jìn)程運(yùn)行過程產(chǎn)生的異常,其他進(jìn)程:一個(gè)進(jìn)程可以向另一一個(gè)或者一組進(jìn)程發(fā)送信號(hào),終端中斷:Ctrl-C,報(bào)警:計(jì)時(shí)器到期,其他:通知。例如IO就緒,西安電子科技大學(xué)軟件學(xué)院,5,通信方法信號(hào)處理,內(nèi)核對(duì)信號(hào)的5種缺省動(dòng)作,異常終止,將進(jìn)程的地址空間內(nèi)容、寄存器內(nèi)容保存到一個(gè)core文件中,終止進(jìn)程,退出:不產(chǎn)生core文件,終止進(jìn)程,忽略:不處理該信號(hào),停止:掛起該進(jìn)程,繼續(xù):如果該進(jìn)程被掛起,則恢復(fù)進(jìn)程運(yùn)行,否則,忽略該信號(hào),西安電子科技大學(xué)軟件學(xué)院,6,通信方法信號(hào)處理,信號(hào)的特定處理動(dòng)作,忽略,但是SIGKILL、SIGSTOP不能被忽略,阻塞信號(hào):進(jìn)程可以選擇阻塞某些信號(hào),先將到來的信號(hào)記錄下來,等到以后解除阻塞后再處理,進(jìn)程處理該信號(hào):注冊(cè)處理程序,信號(hào)對(duì)照含義?,SIGHUP、SIGINT、SIGQUIT、SIGFPE、SIGKILL、SIGALRM、SIGTERM、SIGHLD、SIGSTOP,西安電子科技大學(xué)軟件學(xué)院,7,通信方法信號(hào)處理,系統(tǒng)調(diào)用,Signal、sigaction,定時(shí)器相關(guān):alarm,settimer,西安電子科技大學(xué)軟件學(xué)院,8,通信方法管道,特點(diǎn),單向的、先進(jìn)先出、無結(jié)構(gòu)、固定大小的字節(jié)流,一個(gè)讀、一個(gè)寫,管道大小的定義:PIPE_BUF,在include/linux/limits.h中,一般大小為4096,西安電子科技大學(xué)軟件學(xué)院,9,通信方法管道調(diào)用,系統(tǒng)調(diào)用,Pipe(),讀、寫操作,輸入?yún)?shù)intfiledes2返回值中filedes0為讀句柄filedes1為寫句柄,西安電子科技大學(xué)軟件學(xué)院,10,通信方法消息,使用消息隊(duì)列標(biāo)識(shí)符進(jìn)行標(biāo)識(shí),Msgget創(chuàng)建一個(gè)新隊(duì)列或者打開一個(gè)已經(jīng)存在的隊(duì)列,Msgsnd向隊(duì)列末端添加一條新消息,Msgrcv從隊(duì)列中取消息,注:取消息不一定是按照先進(jìn)先出原則,也可以按照消息類型字段獲取(msgrcv方式?jīng)Q定),西安電子科技大學(xué)軟件學(xué)院,11,通信方法-信號(hào)量,用于保護(hù)臨界資源,以及進(jìn)程間同步,初始化函數(shù)sem_init(),注意參數(shù),等待信號(hào)量可用sem_wait/sem_trywait,釋放信號(hào)量sem_post,西安電子科技大學(xué)軟件學(xué)院,12,通信方法-共享內(nèi)存,進(jìn)程間數(shù)據(jù)通信方法,直接讀寫內(nèi)存,不需要任何數(shù)據(jù)拷貝,管道、消息機(jī)制都需要在內(nèi)核、用戶空間進(jìn)行數(shù)據(jù)拷貝(系統(tǒng)調(diào)用過多),Shm_get用于創(chuàng)建或者獲取標(biāo)識(shí)符,Shm_at用于獲取對(duì)應(yīng)的地址,Shm_dt用于刪除,西安電子科技大學(xué)軟件學(xué)院,13,通信方法-套接字,進(jìn)程間數(shù)據(jù)通信方法,事件形式,RAW_SOCKET,發(fā)送、接收都一致,西安電子科技大學(xué)軟件學(xué)院,14,什么是設(shè)備驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)程序就是外部設(shè)備的軟件抽象,或者說是軟件表現(xiàn),是系統(tǒng)看到的設(shè)備,是虛擬的設(shè)備。,一個(gè)外設(shè)的性能在很大程度上取決于驅(qū)動(dòng)程序的性能。驅(qū)動(dòng)程序之于外部設(shè)備,猶如操作系統(tǒng)之于硬件環(huán)境。,西安電子科技大學(xué)軟件學(xué)院,15,驅(qū)動(dòng)程序有什么用,Linux下的設(shè)備驅(qū)動(dòng)程序都是一個(gè)個(gè)獨(dú)立的“黑盒子”,使某個(gè)特定的硬件響應(yīng)一個(gè)定義良好的內(nèi)部編程接口,同時(shí)完全隱藏了設(shè)備的工作細(xì)節(jié)。,用戶對(duì)設(shè)備的操作通過一組標(biāo)準(zhǔn)化的系統(tǒng)調(diào)用來完成。驅(qū)動(dòng)程序就是將這些調(diào)用映射到作用于實(shí)際硬件的設(shè)備特定的操作上(寫寄存器命令)。,西安電子科技大學(xué)軟件學(xué)院,16,系統(tǒng)調(diào)用接口,設(shè)備1,設(shè)備2,設(shè)備3,驅(qū)動(dòng)1,驅(qū)動(dòng)2,驅(qū)動(dòng)3,用戶程序,用戶空間,內(nèi)核空間,內(nèi)核子系統(tǒng),其它模塊,其它模塊,硬件,驅(qū)動(dòng)程序在內(nèi)核中的位置,西安電子科技大學(xué)軟件學(xué)院,17,模塊化的驅(qū)動(dòng)程序,為了使系統(tǒng)更有效的運(yùn)行,Linux支持內(nèi)核的動(dòng)態(tài)擴(kuò)展,即在系統(tǒng)運(yùn)行時(shí)給內(nèi)核增加新的功能(模塊)。,驅(qū)動(dòng)程序就是幾個(gè)可以模塊化的功能之一。這也是Linux下驅(qū)動(dòng)程序與Windows下驅(qū)動(dòng)程序的最大區(qū)別。,西安電子科技大學(xué)軟件學(xué)院,18,什么是模塊,模塊是一段沒有鏈接的目標(biāo)代碼(.o)可由insmod程序動(dòng)態(tài)的鏈接到正在運(yùn)行的內(nèi)核鏈接后,它就成了內(nèi)核的一部分,直到用rmmod程序解除鏈接。和用戶函數(shù)庫的動(dòng)態(tài)鏈接有些相似;但函數(shù)的功能在鏈接前就已明確,而模塊連接時(shí)才注冊(cè)自己的功能。,西安電子科技大學(xué)軟件學(xué)院,19,系統(tǒng)內(nèi)核,西安電子科技大學(xué)軟件學(xué)院,20,驅(qū)動(dòng)程序,系統(tǒng)內(nèi)核,西安電子科技大學(xué)軟件學(xué)院,21,驅(qū)動(dòng)程序,將驅(qū)動(dòng)程序加入到內(nèi)核中,系統(tǒng)內(nèi)核,西安電子科技大學(xué)軟件學(xué)院,22,西安電子科技大學(xué)軟件學(xué)院,23,核心模塊與應(yīng)用程序的對(duì)比,西安電子科技大學(xué)軟件學(xué)院,24,簡(jiǎn)單驅(qū)動(dòng)程序舉例子-2.4,#ifndefMODULE#defineMODULE#endif#ifndef_KERNEL_#define_KERNEL_#endif#include#includeintinit_module(void)printk(KERN_ALERT“HelloWorld!n”);return0;,西安電子科技大學(xué)軟件學(xué)院,25,voidcleanup_module(void)printk(KERN_ALERT“Goodbye!n”);MODULE_LICENSE(“GPL”)/為了避免”nolicense”警告-MakeFile文件MODULECFLAGS:=-I/usr/src/linux-2.4/includeDMODULED_KERNEL_hello.o:hello.cgcc$(MODULECFLAGS)chello.c.PHONY:cleanclean:rmfhello.o,簡(jiǎn)單驅(qū)動(dòng)程序舉例子-2.4,注意之處1:2.4內(nèi)核中,MODULE和_KERNEL_宏必須定義,無論是在編譯選項(xiàng)時(shí)還是在源文件代碼中。保險(xiǎn)期間:兩邊都寫,同時(shí)使用ifdef宏加了保護(hù),不會(huì)出現(xiàn)重復(fù)定義2:如果在printk打印時(shí)候不使用KERN_ALERT宏,則linux/kernel.h可以不包括3:頭文件linux/module.h必須添加4:初始化必須是init_module,退出函數(shù)必須是cleanup_module,西安電子科技大學(xué)軟件學(xué)院,26,簡(jiǎn)單驅(qū)動(dòng)程序舉例子-2.4,西安電子科技大學(xué)軟件學(xué)院,27,簡(jiǎn)單驅(qū)動(dòng)程序舉例子-2.6,#include#include#includeMODULE_LICENSE("DualBSD/GPL");staticchar*whom="world"module_param(whom,charp,0);staticinthowmany=1;module_param(howmany,int,0);staticinthello_init(void)inti;for(i=0;i<howmany;i+)printk(KERN_ALERT"(%d)Hello,%s!n",i,whom);return0;,西安電子科技大學(xué)軟件學(xué)院,28,簡(jiǎn)單驅(qū)動(dòng)程序舉例子-2.6,staticvoidhello_exit(void)printk(KERN_ALERT"Goodbye!n");module_init(hello_init);module_exit(hello_exit);-Makefile文件:obj-m+=hello.oall:make-C/lib/modules/$(shelluname-r)/buildM=$(PWD)modulesclean:make-C/lib/modules/$(shelluname-r)/buildM=$(PWD)clean,2.6加載insmodhello.kohowmany=5whom=islab注意事項(xiàng)初始化和退出函數(shù)可以寫成任何名字,使用module_init以及module_exit宏調(diào)用一下即可,本質(zhì)和2.4的init,cleanup一致參數(shù)傳遞的注意事項(xiàng)信息查看在cat/var/log/messages,西安電子科技大學(xué)軟件學(xué)院,29,簡(jiǎn)單驅(qū)動(dòng)程序舉例子-2.6,2.6內(nèi)核模塊參數(shù)傳遞,內(nèi)核提供了一個(gè)簡(jiǎn)單框架,允許驅(qū)動(dòng)程序聲明參數(shù),并且用戶在系統(tǒng)啟動(dòng)或者模塊裝載時(shí)候?yàn)閰?shù)指定相應(yīng)的值。-必須包含linux/moduleparam.h文件,西安電子科技大學(xué)軟件學(xué)院,30,模塊參數(shù)定義方式module_param(int_name,type,perm);module_param_named(ext_name,int_name,type,perm);module_param_string(ext_name,string,len,perm);module_param_array(int_name,type,nump,perm);module_param_array_named(ext_name,int_name,type,nump,perm);使用宏MODULE_PARM_DESC()對(duì)定義的參數(shù)進(jìn)行說明,各個(gè)參數(shù)含義int_name:當(dāng)參數(shù)中沒有ext_name的時(shí)候,此參數(shù)即是用戶看到的參數(shù)名,又是模塊內(nèi)接受參數(shù)的變量,西安電子科技大學(xué)軟件學(xué)院,31,2.6內(nèi)核模塊參數(shù)傳遞,len:當(dāng)參數(shù)是string的時(shí)候,表示字符串string數(shù)組的大小,type:表示參數(shù)的數(shù)據(jù)類型,可以為byte,short,ushort,int,uint,long,ulong,charp,bool,invbool,perm:指定了在sysfs中相應(yīng)文件的訪問權(quán)限。(一般不考慮),ext_name:用戶看到的參數(shù)名,對(duì)外的參數(shù)名,nump:指向一個(gè)整數(shù),其值表示有多少個(gè)參數(shù)存放在數(shù)組中,module_param_array_named(ext_name,int_name,type,nump,perm);,模塊參數(shù)傳遞舉例,西安電子科技大學(xué)軟件學(xué)院,32,#include#include#include#defineMAX_ARRAY6staticintint_var=0;staticconstchar*str_var="default"staticintint_array6;intnarr;module_param(int_var,int,0);MODULE_PARM_DESC(int_var,"Aintegervariable");module_param(str_var,charp,0);MODULE_PARM_DESC(str_var,"Astringvariable");module_param_array(int_array,int,模塊參數(shù)傳遞舉例,西安電子科技大學(xué)軟件學(xué)院,33,staticint_inithello_init(void)inti;printk(KERN_ALERT"Hello,myLKM.n");printk(KERN_ALERT"int_var%d.n",int_var);printk(KERN_ALERT"str_var%s.n",str_var);for(i=0;iname=DEV_NAME;dev->major=MAJOR(inode->i_rdev);dev->minor=MINOR(inode->i_rdev);dev->read_buffer=kmalloc(sizeof(READ_BUF_SIZE),GFP_KERNEL);if(dev->read_buffer=NULL)printk("KERN_ALERTallocatereadbuffermemoryfailed.n");dev->write_buffer=kmalloc(sizeof(WRITE_BUF_SIZE),GFP_KERNEL);if(dev->read_buffer=NULL)printk("KERN_ALERTallocatewritebuffermemoryfailed.n");init_waitqueue_head(,55,西安電子科技大學(xué)軟件學(xué)院,intmy_release(structinode*inode,structfile*filp)structMydevice*dev=filp->private_data;if(dev->read_buffer!=NULL)kfree(dev->read_buffer);if(dev->write_buffer!=NULL)kfree(dev->write_buffer);kfree(dev);printk("ThefunctionofMyreleasehasbeencalled!n");return0;,56,西安電子科技大學(xué)軟件學(xué)院,ssize_tmy_read(structfile*filp,char*buf,size_tcount,loff_t*offp)char*pdata=kmalloc(sizeof(count),GFP_KERNEL);if(pdata=NULL)return(-ENOMEM);copy_to_user(buf,pdata,count);*offp+=count;printk("ThefunctionofMyreadhasbeencalled!n");returncount;,57,西安電子科技大學(xué)軟件學(xué)院,ssize_tmy_write(structfile*filp,char*buf,size_tcount,loff_t*offp)char*pdata=kmalloc(sizeof(count),GFP_KERNEL);if(pdata=NULL)return(-ENOMEM);copy_from_user(pdata,buf,count);*offp+=count;printk("ThefunctionofMyreadhasbeencalled!n");returncount;,58,西安電子科技大學(xué)軟件學(xué)院,intmy_ioctl(structinode*inode,structfile*filp,unsignedintcmd,unsignedlongarg)switch(cmd)case1:printk("Thisiscommand1!n");break;case2:printk("Thisiscommand2!n");break;case3:printk("Thisiscommand3!n");break;default:printk("Thereisnosuchcommand!n");return-1;return0;,59,西安電子科技大學(xué)軟件學(xué)院,structfile_operationsfops=open:my_open,/*open函數(shù)*/release:my_release,/*write函數(shù)*/read:my_read,/*read函數(shù)*/write:my_write,/*write函數(shù)*/ioctl:my_ioctl,/*ioctl函數(shù)*/;用上面聲明的各函數(shù)聲明文件操作結(jié)構(gòu)file_operations。,60,西安電子科技大學(xué)軟件學(xué)院,intmy_init(void)intres=register_chrdev(DEV_MAJOR,DEV_NAME,61,西安電子科技大學(xué)軟件學(xué)院,intmy_cleanup(void)unregister_chrdev(major,DEV_NAME);printk("Mydevicereleasesuccess!n");return0;module_init(my_init);module_exit(my_cleanup);MODULE_LICENSE("GPL");,62,西安電子科技大學(xué)軟件學(xué)院,西安電子科技大學(xué)軟件學(xué)院,63,傻瓜步驟,設(shè)計(jì)驅(qū)動(dòng)程序1.1實(shí)現(xiàn)各個(gè)文件操作函數(shù)1.2聲明函數(shù)指針數(shù)組1.3完成初始化函數(shù),并向系統(tǒng)注冊(cè)。完成清除函數(shù)。建立設(shè)備文件節(jié)點(diǎn)mknod/dev/testdevcxxx0設(shè)計(jì)測(cè)試應(yīng)用程序,西安電子科技大學(xué)軟件學(xué)院,64,傻瓜步驟,加載驅(qū)動(dòng)程序insmodchar_dev.o運(yùn)行應(yīng)用程序進(jìn)行測(cè)試卸載驅(qū)動(dòng)程序rmmodchar_dev,西安電子科技大學(xué)軟件學(xué)院,65,謝謝!,

注意事項(xiàng)

本文(嵌入式操作系統(tǒng)(Linu進(jìn)程及設(shè)備驅(qū)動(dòng)程序).ppt)為本站會(huì)員(max****ui)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!