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