《操作系統(tǒng)課程設(shè)計(jì)》PPT課件.ppt

上傳人:san****019 文檔編號(hào):15716268 上傳時(shí)間:2020-09-01 格式:PPT 頁(yè)數(shù):52 大?。?39.69KB
收藏 版權(quán)申訴 舉報(bào) 下載
《操作系統(tǒng)課程設(shè)計(jì)》PPT課件.ppt_第1頁(yè)
第1頁(yè) / 共52頁(yè)
《操作系統(tǒng)課程設(shè)計(jì)》PPT課件.ppt_第2頁(yè)
第2頁(yè) / 共52頁(yè)
《操作系統(tǒng)課程設(shè)計(jì)》PPT課件.ppt_第3頁(yè)
第3頁(yè) / 共52頁(yè)

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《《操作系統(tǒng)課程設(shè)計(jì)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《操作系統(tǒng)課程設(shè)計(jì)》PPT課件.ppt(52頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、操作系統(tǒng)課程設(shè)計(jì),2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,2,內(nèi)容簡(jiǎn)介,設(shè)計(jì)目的 設(shè)計(jì)內(nèi)容 實(shí)施方法及要求 時(shí)間安排 輔導(dǎo),2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,3,設(shè) 計(jì) 目 的,掌握Linux操作系統(tǒng)的使用方法; 了解Linux系統(tǒng)內(nèi)核代碼結(jié)構(gòu); 掌握實(shí)例操作系統(tǒng)的實(shí)現(xiàn)方法。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,4,內(nèi)容簡(jiǎn)介,設(shè)計(jì)目的 設(shè)計(jì)內(nèi)容 實(shí)施方法及要求 時(shí)間安排 輔導(dǎo),2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,5,設(shè) 計(jì) 內(nèi) 容(1),要求:熟悉和理解Linux編程環(huán)境 內(nèi)容 1)編寫一個(gè)C程序,實(shí)現(xiàn)文件拷貝功能。 2)編寫一個(gè)C程序,使用Linux下的圖形庫(kù),分窗口顯

2、示三個(gè)并發(fā)進(jìn)程的運(yùn)行。 #include ,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,6,設(shè) 計(jì) 內(nèi) 容(2),要求:掌握添加系統(tǒng)調(diào)用的方法 內(nèi)容 采用編譯內(nèi)核的方法,添加一個(gè)新的系統(tǒng)調(diào)用。 編寫一個(gè)應(yīng)用程序,測(cè)試新添加的系統(tǒng)調(diào)用。 系統(tǒng)調(diào)用的功能:文件拷貝。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,7,設(shè) 計(jì) 內(nèi) 容(3),要求:掌握添加設(shè)備驅(qū)動(dòng)程序的方法 內(nèi)容: 采用模塊方法,添加一個(gè)新的設(shè)備驅(qū)動(dòng)程序。 要求添加字符設(shè)備的驅(qū)動(dòng)。 編寫一個(gè)應(yīng)用程序,測(cè)試添加的驅(qū)動(dòng)程序。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,8,設(shè) 計(jì) 內(nèi) 容(4),要求:理解和分析/proc文件 內(nèi)容 了解/proc

3、文件的特點(diǎn)和使用方法。 監(jiān)控系統(tǒng)狀態(tài),顯示系統(tǒng)中若干部件的使用情況。 用圖形界面顯示系統(tǒng)監(jiān)控狀態(tài)。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,9,設(shè) 計(jì) 內(nèi) 容(5),要求:理解和掌握文件系統(tǒng)的設(shè)計(jì)方法 (選做) 內(nèi)容 設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模擬的文件系統(tǒng)。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,10,內(nèi)容簡(jiǎn)介,設(shè)計(jì)目的 設(shè)計(jì)內(nèi)容 實(shí)施方法及要求 時(shí)間安排 輔導(dǎo),2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,11,實(shí)施方法及要求,每位同學(xué)都必須獨(dú)立完成課程設(shè)計(jì)內(nèi)容。 上機(jī)考核 演示完成的系統(tǒng),并回答老師的問(wèn)題。 提交 文本的課程設(shè)計(jì)報(bào)告,內(nèi)容包括課程設(shè)計(jì)內(nèi)容分析、程序清單(附注釋)、調(diào)試記錄(

4、碰到的問(wèn)題和解決方案)以及課程設(shè)計(jì)心得。 程序(電子版)。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,12,實(shí)施方法及要求(續(xù)),支持借鑒和學(xué)習(xí)已有的優(yōu)秀知識(shí)! 反對(duì)全盤拷貝,不求甚解! 吸收和消化他人經(jīng)驗(yàn),做自己的課程設(shè)計(jì)! 自學(xué)能力的培養(yǎng):學(xué)會(huì)上網(wǎng)查資料、解決問(wèn)題!,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,13,內(nèi)容簡(jiǎn)介,設(shè)計(jì)目的 設(shè)計(jì)內(nèi)容 實(shí)施方法及要求 時(shí)間安排 輔導(dǎo),2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,14,課程設(shè)計(jì)時(shí)間:第一、二周 答疑 南一樓804 EMAIL:鄭偉德 鄭 然 考核 系統(tǒng)、問(wèn)答、報(bào)告,時(shí)間安排,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,15,內(nèi)容簡(jiǎn)介

5、,設(shè)計(jì)目的 設(shè)計(jì)內(nèi)容 實(shí)施方法及要求 時(shí)間安排 輔導(dǎo),2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,16,課程設(shè)計(jì)輔導(dǎo),Linux系統(tǒng)的相關(guān)知識(shí) 以Redhat Linux 9.0為例 添加系統(tǒng)調(diào)用 添加設(shè)備驅(qū)動(dòng)程序 /proc文件分析,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,17,Linux系統(tǒng)的相關(guān)知識(shí),Linux版本 Linux通過(guò)簡(jiǎn)單的編號(hào)來(lái)區(qū)別內(nèi)核的穩(wěn)定版和開(kāi)發(fā)版。每個(gè)版本用三個(gè)數(shù)字描述,由圓點(diǎn)分隔。前兩個(gè)數(shù)表示版本號(hào),第三個(gè)數(shù)表示發(fā)布號(hào),如2.4.20。(2.6版本和2.4版本在具體的操作細(xì)節(jié)上有很大差異) 如果第二個(gè)數(shù)為偶數(shù),則表示穩(wěn)定的內(nèi)核;否則,表示開(kāi)發(fā)中的內(nèi)核。 穩(wěn)定

6、版的發(fā)布主要用來(lái)糾正用戶所報(bào)告的錯(cuò)誤,但實(shí)現(xiàn)內(nèi)核的主要算法和數(shù)據(jù)結(jié)構(gòu)基本不變。然而,開(kāi)發(fā)版本間可能存在很大的差異。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,18,Linux系統(tǒng)的常用目錄,文件目錄結(jié)構(gòu)樹(shù)型結(jié)構(gòu) 常用目錄有: /dev: dev是device的縮寫。這個(gè)目錄包含Linux的所有設(shè)備文件,如/dev/hda代表第一個(gè)物理IDE硬盤。 /etc: 這個(gè)目錄用來(lái)存放系統(tǒng)管理所需要的配置文件和子目錄。 /lib: 這個(gè)目錄里存放著系統(tǒng)最基本的動(dòng)態(tài)鏈接共享庫(kù),幾乎所有的應(yīng)用程序都需要用到這些共享庫(kù)。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,19,Linux系統(tǒng)的常用目錄(續(xù)),/usr

7、: 這是最龐大的目錄,我們要用到的應(yīng)用程序和文件幾乎都存放在這個(gè)目錄下。其中包含以下子目錄: /usr/include: Linux下開(kāi)發(fā)和編譯應(yīng)用程序所需的頭文件; /usr/lib: 常用的動(dòng)態(tài)鏈接共享庫(kù)和靜態(tài)檔案庫(kù); /usr/local: 這是提供給一般用戶的目錄,在這里安裝軟件最適合; /usr/man: 幫助文檔的存放目錄; /usr/src: Linux的源代碼目錄。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,20,Linux系統(tǒng)的核心源碼,Linux核心源代碼位于/usr/src/linux下,包括: arch: 包括所有和CPU類型相關(guān)的核心代碼。它的每一個(gè)子目錄都代表一種支

8、持的CPU類型,例如i386就是關(guān)于Intel CPU及與之相兼容的體系結(jié)構(gòu)的子目錄,PC機(jī)一般都基于此目錄; drivers: 放置系統(tǒng)所有的設(shè)備驅(qū)動(dòng)程序;每種驅(qū)動(dòng)程序又各占用一個(gè)子目錄,如/block下為塊設(shè)備驅(qū)動(dòng)程序; include: 包括編譯核心所需要的大部分頭文件。與平臺(tái)無(wú)關(guān)的頭文件在include/linux子目錄下,與Intel CPU相關(guān)的頭文件在include/asm-i386子目錄下;,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,21,Linux系統(tǒng)的核心源碼(續(xù)),Linux核心源代碼中的內(nèi)容還包括: init: 包含核心的初始化代碼(注:不是系統(tǒng)的引導(dǎo)代碼),包含兩個(gè)文

9、件 main.c和version.c,這是研究核心如何工作的一個(gè)非常好的起點(diǎn); mm: 包括所有獨(dú)立于CPU體系結(jié)構(gòu)的內(nèi)存管理代碼,如頁(yè)式存儲(chǔ)管理中內(nèi)存的分配和釋放等,而和體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼則位于arch/*/mm/下; kernel: 主要的核心代碼,此目錄下的文件實(shí)現(xiàn)了大多數(shù)Linux系統(tǒng)的內(nèi)核函數(shù),其中最重要的文件當(dāng)屬進(jìn)程調(diào)度sched.c,同樣,和體系結(jié)構(gòu)相關(guān)的代碼在arch/*/kernel中。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,22,課程設(shè)計(jì)輔導(dǎo),Linux系統(tǒng)的相關(guān)知識(shí) 以Redhat Linux 9.0為例 添加系統(tǒng)調(diào)用 添加設(shè)備驅(qū)動(dòng)程序 /proc文件分析,2

10、020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,23,添加系統(tǒng)調(diào)用,Linux系統(tǒng)調(diào)用機(jī)制 Linux內(nèi)核中設(shè)置了一組用于實(shí)現(xiàn)各種系統(tǒng)功能的子程序,稱為系統(tǒng)調(diào)用。 用戶可以通過(guò)系統(tǒng)調(diào)用命令在自己的應(yīng)用程序中調(diào)用它們。 系統(tǒng)調(diào)用與普通函數(shù)調(diào)用的區(qū)別 系統(tǒng)調(diào)用 核心態(tài) 操作系統(tǒng)核心提供 普通的函數(shù)調(diào)用 用戶態(tài) 函數(shù)庫(kù)或用戶自己提供,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,24,添加系統(tǒng)調(diào)用(續(xù)),Linux系統(tǒng)調(diào)用機(jī)制 int 0 x80 使用寄存器中適當(dāng)?shù)闹堤D(zhuǎn)到內(nèi)核中事先定義好的代碼中執(zhí)行:跳轉(zhuǎn)到系統(tǒng)調(diào)用的總?cè)肟趕ystem_call,檢查系統(tǒng)調(diào)用號(hào),再查找系統(tǒng)調(diào)用表sys_call_table

11、,調(diào)用內(nèi)核函數(shù),最后返回。 系統(tǒng)調(diào)用是靠一些宏、一張系統(tǒng)調(diào)用表、一個(gè)系統(tǒng)調(diào)用入口來(lái)完成的。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,25,添加系統(tǒng)調(diào)用(續(xù)),與系統(tǒng)調(diào)用相關(guān)的內(nèi)核代碼文件: /usr/src/linux/include/asm-i386/unistd.h 系統(tǒng)調(diào)用清單(為每個(gè)系統(tǒng)調(diào)用分配唯一號(hào)碼) /usr/src/linux/arch/i386/kernel/entry.S 包含系統(tǒng)調(diào)用和異常的底層處理程序、信號(hào)量的識(shí)別程序 ret_from_sys_call:調(diào)用和中斷的返回點(diǎn) 對(duì)sys_call_table (系統(tǒng)功能調(diào)用表)進(jìn)行初始化 /usr/src/linux/k

12、ernel/sys.c 系統(tǒng)調(diào)用實(shí)現(xiàn)代碼 /usr/src/linux/arch/i386/kernel/traps.c 定義許多出錯(cuò)處理程序,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,26,添加系統(tǒng)調(diào)用(續(xù)),步驟_1 添加源代碼 編寫添加到內(nèi)核中的源程序,函數(shù)名以sys_開(kāi)頭。 如:mycall(int num),在/usr/src/linux/kernel/sys.c文件中添加如下代碼: asmlinkage int sys_mycall(int number) return number; //該系統(tǒng)調(diào)用僅返回一個(gè)整型值 ,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,27,添加系統(tǒng)

13、調(diào)用(續(xù)),步驟_2 連接新的系統(tǒng)調(diào)用 使內(nèi)核的其余部分知道該系統(tǒng)調(diào)用的存在。為此,需編輯兩個(gè)文件: /usr/src/linux/include/asm-i386/unistd.h系統(tǒng)調(diào)用清單(為每個(gè)系統(tǒng)調(diào)用分配唯一號(hào)碼) define _NR_name nnn 這里,name:系統(tǒng)調(diào)用名;nnn:系統(tǒng)調(diào)用對(duì)應(yīng)的號(hào)碼,不能與內(nèi)核自身的系統(tǒng)調(diào)用號(hào)相同。 /usr/src/linux/arch/i386/kernel/entry.S對(duì)sys_call_table 進(jìn)行初始化(增加新的內(nèi)核函數(shù)的指針) .long SYMBOL_NAME(sys_mycall),2020/9

14、/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,28,添加系統(tǒng)調(diào)用(續(xù)),步驟_3 重建Linux內(nèi)核 以root身份進(jìn)入/usr/src/linux目錄,重建內(nèi)核 #make config //基于文本的傳統(tǒng)配置界面 #make dep //檢驗(yàn)內(nèi)核源代碼文件的依賴性和完整性 #make clean //清除以前編譯的目標(biāo)文件 #make bzImage //編譯內(nèi)核,也可采用make zImage 編譯生成的內(nèi)核文件為 /usr/src/linux/arch/i386/boot/bzImage,配置內(nèi)核的方式 make config 基于文本的傳統(tǒng)配置界面 make menuconfig 基于文本

15、的菜單形式配置界面,字符終端下使用 make xconfig 基于圖形窗口模式的配置界面,Xwindow下使用 對(duì)每個(gè)配置選項(xiàng),有三種選擇: “Y”將該功能編譯進(jìn)內(nèi)核 “N”不將該功能編譯進(jìn)內(nèi)核 “M”將該功能編譯成可動(dòng)態(tài)載入的內(nèi)核模塊,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,29,補(bǔ)充說(shuō)明,配置內(nèi)核的方式 make config 基于文本的傳統(tǒng)配置界面 make menuconfig 基于文本的菜單形式配置界面,字符終端下使用 make xconfig 基于圖形窗口模式的配置界面,Xwindow下使用 make oldconfig 在原來(lái)的配置上作小的修改 對(duì)每個(gè)配置選

16、項(xiàng),有三種選擇: “Y”將該功能編譯進(jìn)內(nèi)核 “N”不將該功能編譯進(jìn)內(nèi)核 “M”將該功能編譯成可動(dòng)態(tài)載入的內(nèi)核模塊,,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,30,添加系統(tǒng)調(diào)用(續(xù)),步驟_4 重啟內(nèi)核 將/usr/src/linux/arch/i386/boot/bzImage拷貝到/boot/bzImage 配置啟動(dòng)文件 若采用lilo,修改/etc/lilo.conf,添加新的引導(dǎo)內(nèi)核 image=/boot/bzImage // 上面編譯生成的內(nèi)核映象 label=Linuxtest // 給該系統(tǒng)取個(gè)名字 root=/dev/hda5 // 根目錄所在的分區(qū),可用命

17、令df查看 read-only 若采用grub,修改/etc/grub.conf,添加新的引導(dǎo)內(nèi)核 title Linuxtest root(hd0,4) kernel /boot/bzImage ro root=/dev/hda5 initrd /boot/initrd-2.4.18-3.img 重啟后,出現(xiàn)Linuxtest選項(xiàng),選擇它進(jìn)入新的內(nèi)核,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,31,添加系統(tǒng)調(diào)用(續(xù)),步驟_5 使用新的系統(tǒng)調(diào)用 應(yīng)用程序app.c中調(diào)用新添加的系統(tǒng)調(diào)用mycall: 宏指令說(shuō)明:_syscalln(parameters):n表示系統(tǒng)調(diào)用所需參數(shù),

18、parameters為參數(shù)。如上面的宏中,第一個(gè)參數(shù)int表示返回值類型,第二個(gè)參數(shù)mycall為函數(shù)名。第三個(gè)和第四個(gè)分別用來(lái)指定參數(shù)的類型和名稱。 編譯gcc o app app.c,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,32,添加系統(tǒng)調(diào)用(續(xù)),注意(與內(nèi)容一文件拷貝的異同): 相同點(diǎn):功能相同、代碼基本完全一樣 不同點(diǎn):作為內(nèi)核代碼,不能直接調(diào)用系統(tǒng)調(diào)用命令,應(yīng)直接使用系統(tǒng)調(diào)用的實(shí)際函數(shù) printf printk open() sys_open() close() sys_close() read() sys_read() write() sys_write(),2020/9/1

19、,華中科技大學(xué)計(jì)算機(jī)學(xué)院,33,課程設(shè)計(jì)輔導(dǎo),Linux系統(tǒng)的相關(guān)知識(shí) 以Redhat Linux 9.0為例 添加系統(tǒng)調(diào)用 添加設(shè)備驅(qū)動(dòng)程序 /proc文件分析,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,34,添加設(shè)備驅(qū)動(dòng)程序,內(nèi)核模塊 LKM Loadable Kernel Modules Linux核心是一種monolithic類型的內(nèi)核,即單一的大核心。 linux內(nèi)核是一個(gè)整體結(jié)構(gòu),因此向內(nèi)核添加任何東西.或者刪除某些功能,都十分困難。為了解決這個(gè)問(wèn)題,引入了模塊機(jī)制,從而可以動(dòng)態(tài)的在內(nèi)核中添加或者刪除模塊。一旦被插入內(nèi)核,他就和內(nèi)核其他部分一樣。,2020/9/1,華中科技大學(xué)計(jì)

20、算機(jī)學(xué)院,35,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),模塊的實(shí)現(xiàn)機(jī)制 模塊初始化 int init_module( ) ; 模塊卸載 int cleanup_module( ) ; 操作 unsigned long sys_create_module (char *name, unsigned long size); //重新分配內(nèi)存 int sys_delete_module (char *name); //卸載 int sys_query_module (const char *name, int which, void *buf, size_t bufsize, size_t *ret);

21、 //查詢 頭文件:/usr/scr/linux/include/linux/module.h,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,36,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),模塊的實(shí)現(xiàn)機(jī)制 模塊加入:insmod modulename.o 完成:加載目標(biāo)文件 調(diào)用create_module重新分配內(nèi)存 內(nèi)核符號(hào)用get_kernel_syms解析未解析的引用 調(diào)用init_module初始化LKM-執(zhí)行init_module(void)函數(shù) 查看模塊:lsmod 結(jié)果:Module Page Used by modulename 1(內(nèi)存信息) 0(使用次數(shù))

22、刪除模塊:rmmod modulename,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,37,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),模塊編程實(shí)例 hello.c源碼 編譯 gcc DMODULE D_KERNEL_ -I /usr/src/linux_2.4.20-8/include -c hello.c,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,38,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),Linux支持的設(shè)備類型 字符設(shè)備 c 存取時(shí)沒(méi)有緩存;對(duì)字符設(shè)備發(fā)出讀寫請(qǐng)求時(shí),實(shí)際的I/O就發(fā)生了。如:鼠標(biāo)、鍵盤等。 塊設(shè)備 b 利用一塊系統(tǒng)內(nèi)存區(qū)域作緩沖區(qū),當(dāng)用戶進(jìn)程對(duì)設(shè)備請(qǐng)求能滿足用戶要求時(shí),返回請(qǐng)求數(shù)據(jù),否則,調(diào)

23、用請(qǐng)求函數(shù)進(jìn)行實(shí)際的I/O操作。如:硬盤、軟盤、CD-ROM等。 網(wǎng)絡(luò)設(shè)備,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,39,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),設(shè)備驅(qū)動(dòng)程序 一組常駐內(nèi)存的具有特權(quán)的共享庫(kù),是低級(jí)硬件處理例程。 設(shè)備等同文件處理,每個(gè)設(shè)備文件有兩個(gè)設(shè)備號(hào) 主設(shè)備號(hào):標(biāo)識(shí)驅(qū)動(dòng)程序 從設(shè)備號(hào):表示使用同一個(gè)設(shè)備驅(qū)動(dòng)程序的不同硬件設(shè)備。 設(shè)備驅(qū)動(dòng)程序工作的基本原理 用戶進(jìn)程利用系統(tǒng)調(diào)用對(duì)設(shè)備進(jìn)行諸如read/write操作,系統(tǒng)調(diào)用通過(guò)設(shè)備文件的主設(shè)備號(hào)找到相應(yīng)的設(shè)備驅(qū)動(dòng)程序,然后讀取這個(gè)數(shù)據(jù)結(jié)構(gòu)相應(yīng)的函數(shù)指針,接著把控制權(quán)交給該函數(shù)。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,40,添加

24、設(shè)備驅(qū)動(dòng)程序(續(xù)),設(shè)備驅(qū)動(dòng)程序的功能 對(duì)設(shè)備初始化和釋放; 把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù); 讀取應(yīng)用程序傳輸給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù); 檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,41,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),Linux系統(tǒng)采用一組固定的入口點(diǎn)來(lái)實(shí)現(xiàn)驅(qū)動(dòng)設(shè)備的功能。 open入口點(diǎn): 打開(kāi)設(shè)備準(zhǔn)備I/O操作。open子程序必須對(duì)將要進(jìn)行的I/O操作做好必要的準(zhǔn)備工作,如清除緩沖區(qū)等。 close入口點(diǎn): 關(guān)閉一個(gè)設(shè)備。當(dāng)最后一次使用設(shè)備終結(jié)后,調(diào)用close子程序。 read入口點(diǎn): 從設(shè)備上讀數(shù)據(jù)。 write入口點(diǎn): 往設(shè)備上寫數(shù)據(jù)。

25、 ioctl入口點(diǎn): 執(zhí)行讀、寫之外的操作。 select入口點(diǎn): 檢查設(shè)備,看數(shù)據(jù)是否可讀或設(shè)備是否可用于寫數(shù)據(jù)。 如果設(shè)備驅(qū)動(dòng)程序沒(méi)有提供上述入口點(diǎn)中的某一個(gè),系統(tǒng)會(huì)用缺省的子程序來(lái)代替。對(duì)于不同的系統(tǒng),也還有一些其它的入口點(diǎn)。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,42,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),入口點(diǎn)采用如下數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn):,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,43,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),注冊(cè)設(shè)備:向系統(tǒng)登記設(shè)備及驅(qū)動(dòng)程序的入口點(diǎn) int register_chrdev (unsigned int major, const char *name, struct file_op

26、erations *fops); //向系統(tǒng)的字符設(shè)備表登記一個(gè)字符設(shè)備 //major:希望獲得的設(shè)備號(hào),為0時(shí)系統(tǒng)選擇一個(gè)沒(méi)有被占用的設(shè)備號(hào)返回。 //name:設(shè)備名 //fops:登記驅(qū)動(dòng)程序?qū)嶋H執(zhí)行操作的函數(shù)的指針 //登記成功,返回設(shè)備的主設(shè)備號(hào),否則,返回一個(gè)負(fù)值 int register_blkdev (unsigned int major, const char *name, struct file_operations *fops); //向系統(tǒng)的塊設(shè)備表登記一個(gè)塊設(shè)備,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,44,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),設(shè)備卸載 int unreg

27、ister_chrdev (unsigned int major, const char *name); //卸載字符設(shè)備 //major:要卸載設(shè)備的主設(shè)備號(hào) //name:設(shè)備名 int unregister_blkdev (unsigned int major, const char *name); //卸載塊設(shè)備,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,45,典型驅(qū)動(dòng)程序的結(jié)構(gòu),,,字符設(shè)備提供的主要入口有:open ()、release ()、read ()、write ()、ioctl ()、llseek()、poll()等。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,46,添

28、加設(shè)備驅(qū)動(dòng)程序(續(xù)),添加設(shè)備驅(qū)動(dòng)程序的方法 編寫設(shè)備驅(qū)動(dòng)程序mydev.c 在模塊的初始化init_module()中調(diào)用設(shè)備注冊(cè)函數(shù); 在模塊的卸載cleanup_module()中調(diào)用設(shè)備的卸載函數(shù)。 設(shè)備驅(qū)動(dòng)模塊的編譯 gcc -O2 -DMODULE -D__KERNEL__ -I/usr/src/linux-2.4.20-8/include -c mydev.c 加載設(shè)備驅(qū)動(dòng)模塊: insmod f mydev.o 若加載成功,在文件/proc/devices中能看到新增加的設(shè)備,包括設(shè)備名mydev和主設(shè)備號(hào)。 生成設(shè)備文件 mknod /dev/test c

29、254 0 //其中,test為設(shè)備文件名,254為主設(shè)備號(hào),0為從設(shè)備號(hào),c表示字符設(shè)備,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,47,編寫應(yīng)用程序,測(cè)試驅(qū)動(dòng)程序 編譯 gcc hello.c o hello,添加設(shè)備驅(qū)動(dòng)程序(續(xù)),2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,48,課程設(shè)計(jì)輔導(dǎo),Linux系統(tǒng)的相關(guān)知識(shí) 以Redhat Linux 9.0為例 進(jìn)程并發(fā) 添加系統(tǒng)調(diào)用 添加設(shè)備驅(qū)動(dòng)程序 /proc文件分析,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,49,/proc文件分析,/proc PROC文件系統(tǒng)是進(jìn)程文件系統(tǒng)和內(nèi)核文件系統(tǒng)的組成的復(fù)合體,是將內(nèi)核數(shù)據(jù)對(duì)象化為文

30、件形式進(jìn)行存取的一種內(nèi)存文件系統(tǒng), 是監(jiān)控內(nèi)核的一種用戶接口. 它擁有一些特殊的文件(純文本),從中可以獲取系統(tǒng)狀態(tài)信息。 系統(tǒng)信息 與進(jìn)程無(wú)關(guān),隨系統(tǒng)配置的不同而不同。 命令procinfo可以顯示這些文件的大量信息。 進(jìn)程信息 系統(tǒng)中正在運(yùn)行的每一個(gè)用戶級(jí)進(jìn)程的信息。,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,50,/proc文件分析,系統(tǒng)信息 /proc/cmd/line: 內(nèi)核啟動(dòng)的命令行 /proc/cpuinfo: CPU信息 /proc/stat: CPU的使用情況、磁盤、頁(yè)面、交換、所有的中斷、最后一次的啟動(dòng)時(shí)間等。 /proc/meminfo: 內(nèi)存狀態(tài)的有關(guān)信息。 進(jìn)

31、程信息 /proc/$pid/stat /proc/$pid/status /proc/$pid/statm etc,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,51,/proc文件分析,監(jiān)控系統(tǒng)功能 通過(guò)讀取proc文件系統(tǒng),獲取系統(tǒng)各種信息,并以比較容易理解的方式顯示出來(lái)。 使用 GTK+ Linux下的c語(yǔ)言開(kāi)發(fā)。 具體包括: 主機(jī)名、系統(tǒng)啟動(dòng)時(shí)間、系統(tǒng)運(yùn)行時(shí)間、版本號(hào)、所有進(jìn)程信息、CPU類型、CPU的使用率、內(nèi)存使用率 ----參照WINDOWS的任務(wù)管理器,實(shí)現(xiàn)其中的部分功能。 /proc文件系統(tǒng)的詳細(xì)信息通過(guò)以下命令獲?。?man proc,2020/9/1,華中科技大學(xué)計(jì)算機(jī)學(xué)院,52,課程設(shè)計(jì)輔導(dǎo)參考資料,Linux的“man”幫助 書(shū)籍 邊干邊學(xué)Linux內(nèi)核指導(dǎo)李善平,陳文智等編著.浙江大學(xué)出版社. Linux Device Driver 2 Linux內(nèi)核編程 網(wǎng)站 http://www.linuxsir.org/ ,

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(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),我們立即給予刪除!