嵌入式操作系統(tǒng)(Linu進程及設備驅動程序).ppt
《嵌入式操作系統(tǒng)(Linu進程及設備驅動程序).ppt》由會員分享,可在線閱讀,更多相關《嵌入式操作系統(tǒng)(Linu進程及設備驅動程序).ppt(65頁珍藏版)》請在裝配圖網(wǎng)上搜索。
Linux進程間通信及驅動程序,——軟件學院張亮liangzhang@,西安電子科技大學軟件學院,2,通信目的,進程間的數(shù)據(jù)傳遞,A向B傳送,進程間的數(shù)據(jù)共享,一個修改后,別的可以看到,通知事件:一個進程要向一個或者一組進程發(fā)送消息,表明某種事件的產(chǎn)生,資源共享:多個進程要共享同樣的資源,需要加鎖和同步,進程控制:需要控制另外一個進程的執(zhí)行(知道他的狀態(tài)信息),西安電子科技大學軟件學院,3,通信方法,信號,管道,消息,信號量,共享內(nèi)存,套接字,自定義,西安電子科技大學軟件學院,4,通信方法–信號,最古老的進程間通信方式之一,內(nèi)核為進程產(chǎn)生信號,以表示不同的事件,這些事件就是信號源,異常:進程運行過程產(chǎn)生的異常,其他進程:一個進程可以向另一一個或者一組進程發(fā)送信號,終端中斷:Ctrl-C,報警:計時器到期,其他:通知。。例如IO就緒,西安電子科技大學軟件學院,5,通信方法–信號處理,內(nèi)核對信號的5種缺省動作,異常終止,將進程的地址空間內(nèi)容、寄存器內(nèi)容保存到一個core文件中,終止進程,退出:不產(chǎn)生core文件,終止進程,忽略:不處理該信號,停止:掛起該進程,繼續(xù):如果該進程被掛起,則恢復進程運行,否則,忽略該信號,西安電子科技大學軟件學院,6,通信方法–信號處理,信號的特定處理動作,忽略,但是SIGKILL、SIGSTOP不能被忽略,阻塞信號:進程可以選擇阻塞某些信號,先將到來的信號記錄下來,等到以后解除阻塞后再處理,進程處理該信號:注冊處理程序,信號對照含義?,SIGHUP、SIGINT、SIGQUIT、SIGFPE、SIGKILL、SIGALRM、SIGTERM、SIGHLD、SIGSTOP,西安電子科技大學軟件學院,7,通信方法–信號處理,系統(tǒng)調用,Signal、sigaction,定時器相關:alarm,settimer,西安電子科技大學軟件學院,8,通信方法–管道,特點,單向的、先進先出、無結構、固定大小的字節(jié)流,一個讀、一個寫,管道大小的定義:PIPE_BUF,在include/linux/limits.h中,一般大小為4096,西安電子科技大學軟件學院,9,通信方法–管道調用,系統(tǒng)調用,Pipe(),讀、寫操作,輸入?yún)?shù)intfiledes[2]返回值中filedes[0]為讀句柄filedes[1]為寫句柄,西安電子科技大學軟件學院,10,通信方法–消息,使用消息隊列標識符進行標識,Msgget創(chuàng)建一個新隊列或者打開一個已經(jīng)存在的隊列,Msgsnd向隊列末端添加一條新消息,Msgrcv從隊列中取消息,注:取消息不一定是按照先進先出原則,也可以按照消息類型字段獲?。╩sgrcv方式?jīng)Q定),西安電子科技大學軟件學院,11,通信方法-信號量,用于保護臨界資源,以及進程間同步,初始化函數(shù)sem_init(),注意參數(shù),等待信號量可用sem_wait/sem_trywait,釋放信號量sem_post,西安電子科技大學軟件學院,12,通信方法-共享內(nèi)存,進程間數(shù)據(jù)通信方法,直接讀寫內(nèi)存,不需要任何數(shù)據(jù)拷貝,管道、消息機制都需要在內(nèi)核、用戶空間進行數(shù)據(jù)拷貝(系統(tǒng)調用過多),Shm_get用于創(chuàng)建或者獲取標識符,Shm_at用于獲取對應的地址,Shm_dt用于刪除,西安電子科技大學軟件學院,13,通信方法-套接字,進程間數(shù)據(jù)通信方法,事件形式,RAW_SOCKET,發(fā)送、接收都一致,西安電子科技大學軟件學院,14,什么是設備驅動程序,設備驅動程序就是外部設備的軟件抽象,或者說是軟件表現(xiàn),是系統(tǒng)看到的設備,是虛擬的設備。,一個外設的性能在很大程度上取決于驅動程序的性能。驅動程序之于外部設備,猶如操作系統(tǒng)之于硬件環(huán)境。,西安電子科技大學軟件學院,15,驅動程序有什么用,Linux下的設備驅動程序都是一個個獨立的“黑盒子”,使某個特定的硬件響應一個定義良好的內(nèi)部編程接口,同時完全隱藏了設備的工作細節(jié)。,用戶對設備的操作通過一組標準化的系統(tǒng)調用來完成。驅動程序就是將這些調用映射到作用于實際硬件的設備特定的操作上(寫寄存器命令)。,西安電子科技大學軟件學院,16,系統(tǒng)調用接口,,,,,,,,,,設備1,設備2,設備3,驅動1,驅動2,驅動3,用戶程序,用戶空間,內(nèi)核空間,,內(nèi)核子系統(tǒng),,,,其它模塊,其它模塊,,,,,,,硬件,,,,,驅動程序在內(nèi)核中的位置,西安電子科技大學軟件學院,17,模塊化的驅動程序,為了使系統(tǒng)更有效的運行,Linux支持內(nèi)核的動態(tài)擴展,即在系統(tǒng)運行時給內(nèi)核增加新的功能(模塊)。,驅動程序就是幾個可以模塊化的功能之一。這也是Linux下驅動程序與Windows下驅動程序的最大區(qū)別。,西安電子科技大學軟件學院,18,什么是模塊,模塊是一段沒有鏈接的目標代碼(.o)可由insmod程序動態(tài)的鏈接到正在運行的內(nèi)核鏈接后,它就成了內(nèi)核的一部分,直到用rmmod程序解除鏈接。和用戶函數(shù)庫的動態(tài)鏈接有些相似;但函數(shù)的功能在鏈接前就已明確,而模塊連接時才注冊自己的功能。,西安電子科技大學軟件學院,19,系統(tǒng)內(nèi)核,西安電子科技大學軟件學院,20,驅動程序,系統(tǒng)內(nèi)核,西安電子科技大學軟件學院,21,驅動程序,將驅動程序加入到內(nèi)核中,系統(tǒng)內(nèi)核,西安電子科技大學軟件學院,22,西安電子科技大學軟件學院,23,核心模塊與應用程序的對比,西安電子科技大學軟件學院,24,簡單驅動程序舉例子-2.4,#ifndefMODULE#defineMODULE#endif#ifndef__KERNEL__#define__KERNEL__#endif#include#includeintinit_module(void){printk(KERN_ALERT“HelloWorld!\n”);return0;}},西安電子科技大學軟件學院,25,voidcleanup_module(void){printk(KERN_ALERT“Goodbye!\n”);}MODULE_LICENSE(“GPL”)//為了避免”nolicense”警告----------------------------------------------------------------------------------MakeFile文件MODULECFLAGS:=-I/usr/src/linux-2.4/include–DMODULE–D__KERNEL__hello.o:hello.cgcc$(MODULECFLAGS)–chello.c.PHONY:cleanclean:rm–fhello.o,簡單驅動程序舉例子-2.4,注意之處1:2.4內(nèi)核中,MODULE和__KERNEL__宏必須定義,無論是在編譯選項時還是在源文件代碼中。保險期間:兩邊都寫,同時使用ifdef宏加了保護,不會出現(xiàn)重復定義2:如果在printk打印時候不使用KERN_ALERT宏,則linux/kernel.h可以不包括3:頭文件linux/module.h必須添加4:初始化必須是init_module,退出函數(shù)必須是cleanup_module,西安電子科技大學軟件學院,26,簡單驅動程序舉例子-2.4,西安電子科技大學軟件學院,27,簡單驅動程序舉例子-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- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 嵌入式 操作系統(tǒng) Linu 進程 設備 驅動程序
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.appdesigncorp.com/p-12724570.html