




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)八增加新的設(shè)備驅(qū)動(dòng)程序?qū)嶒?yàn)八 增加新的設(shè)備驅(qū)動(dòng)程序v預(yù)備知識(shí)vLinux設(shè)備分類vLinux設(shè)備文件vLinux設(shè)備驅(qū)動(dòng)v實(shí)驗(yàn)指導(dǎo)v設(shè)備驅(qū)動(dòng)函數(shù)v模塊方式動(dòng)態(tài)加載v編譯時(shí)靜態(tài)加載v實(shí)驗(yàn)?zāi)康?、?nèi)容1.1 Linux設(shè)備分類v字符設(shè)備通過(guò)位于/dev目錄的文件系統(tǒng)結(jié)點(diǎn)來(lái)存取映射為chrdevs向量表中的device_struct條目大部分字符設(shè)備是數(shù)據(jù)通道,只能順序存取直接對(duì)設(shè)備進(jìn)行讀寫操作v塊設(shè)備通過(guò)/dev目錄的文件系統(tǒng)結(jié)點(diǎn)存取,分為SCSI類和IDE類填充blk_dev向量表中的blk_dev_struct數(shù)據(jù)結(jié)構(gòu)利用系統(tǒng)內(nèi)存作為緩沖區(qū)在設(shè)備與內(nèi)存間傳送數(shù)據(jù)v網(wǎng)絡(luò)設(shè)備類似于一個(gè)已掛載的塊
2、設(shè)備基于BSD Unix的Socket機(jī)制1.2 Linux設(shè)備文件v把物理設(shè)備看成文件,將各種設(shè)備硬件的物理特性的細(xì)節(jié)屏蔽起來(lái),實(shí)現(xiàn)用戶程序與設(shè)備的無(wú)關(guān)性v三類設(shè)備文件:字符設(shè)備文件(c)、塊設(shè)備文件(b)、網(wǎng)絡(luò)設(shè)備文件(s)v設(shè)備文件命名規(guī)則第一部分:主設(shè)備號(hào),2-3個(gè)字符,表示設(shè)備的種類(驅(qū)動(dòng))第二部分:次設(shè)備號(hào),字母或數(shù)字,用于區(qū)分同種設(shè)備中的單個(gè)設(shè)備v通過(guò)proc文件系統(tǒng)訪問(wèn)相應(yīng)的驅(qū)動(dòng)程序1.3 Linux驅(qū)動(dòng)程序v驅(qū)動(dòng)程序加載方式常見(jiàn)的驅(qū)動(dòng)程序作為內(nèi)核模塊動(dòng)態(tài)加載(如聲卡、網(wǎng)卡等)最基礎(chǔ)的驅(qū)動(dòng)程序編譯在內(nèi)核文件中(如CPU、PCI總線、VFS等)v驅(qū)動(dòng)加載時(shí)的模塊命令lsmod:列
3、出當(dāng)前系統(tǒng)中已經(jīng)加載的內(nèi)核模塊modinfo:查看模塊信息modprobe:掛載新的內(nèi)核模塊,該模塊所依賴的模塊也被同時(shí)掛載rmmod:刪除已掛載的模塊insmod:插入模塊(功能沒(méi)有modprob強(qiáng))實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動(dòng)程序v預(yù)備知識(shí)vLinux設(shè)備分類vLinux設(shè)備文件vLinux設(shè)備驅(qū)動(dòng)v實(shí)驗(yàn)指導(dǎo)v設(shè)備驅(qū)動(dòng)函數(shù)v模塊方式動(dòng)態(tài)加載v編譯時(shí)靜態(tài)加載v實(shí)驗(yàn)?zāi)康?、?nèi)容2.1 設(shè)備驅(qū)動(dòng)函數(shù)v驅(qū)動(dòng)程序與外界的接口與操作系統(tǒng)內(nèi)核的接口:通過(guò)file_operation數(shù)據(jù)機(jī)構(gòu)完成與系統(tǒng)引導(dǎo)的接口:利用驅(qū)動(dòng)程序?qū)υO(shè)備進(jìn)行初始化與設(shè)備的接口:描述驅(qū)動(dòng)程序如何與設(shè)備交互v設(shè)備驅(qū)動(dòng)程序的代碼組成驅(qū)動(dòng)程序
4、的注冊(cè)和注銷v設(shè)備的初始化:chr_dev_init()、blk_dev_init()v向內(nèi)核注冊(cè):devfs_register_chrdev()、devfs_register_blkdev()v從內(nèi)核注銷:devfs_unregister_chrdev()、devfs_unregister_blkdev()設(shè)備的打開(kāi)和釋放:open()、release()設(shè)備的讀寫v字符設(shè)備:read()、write()v塊設(shè)備:generic_file_read()、generic_file_write()設(shè)備的控制:ioctl()設(shè)備的中斷和輪詢2.2 模塊方式動(dòng)態(tài)加載v內(nèi)核模塊(LKM, Loadab
5、le Kernel Modules)linux內(nèi)核是整體結(jié)構(gòu),向內(nèi)核添加或刪除某些功能十分困難v引入模塊機(jī)制在內(nèi)核中動(dòng)態(tài)添加或刪除模塊將模塊從內(nèi)核中獨(dú)立出來(lái),根據(jù)需要隨時(shí)裝入和卸載,使內(nèi)核大小和通信量達(dá)到最小v內(nèi)核模塊動(dòng)態(tài)加載用insmod命令將模塊手工插入到內(nèi)核通過(guò)kerneld內(nèi)核守護(hù)進(jìn)程自動(dòng)裝入所需模塊2.2 動(dòng)態(tài)加載操作命令vlsmod:列出已經(jīng)被內(nèi)核調(diào)入的模塊vinsmod:將某個(gè)module插入到內(nèi)核中(加載指定的庫(kù))vmodprob:將某個(gè)module加載到內(nèi)核中(加載之前分析庫(kù)之間的依賴關(guān)系)vrmmod:將某個(gè)module從內(nèi)核中卸載vdepmod:生成依賴文件,告訴將來(lái)的i
6、nsmod從哪兒調(diào)入模塊vkerneld:自動(dòng)將模塊調(diào)入內(nèi)核和把模塊從內(nèi)核中卸載2.2 動(dòng)態(tài)加載實(shí)現(xiàn)機(jī)制vinit_modules() :?jiǎn)?dòng)時(shí)內(nèi)核模塊的初始化,求出內(nèi)核符號(hào)表中符號(hào)的個(gè)數(shù)vsys_create_module():創(chuàng)建一個(gè)新模塊,即為新模塊分配空間,也是系統(tǒng)調(diào)用create_module()在內(nèi)核的實(shí)現(xiàn)函數(shù)vsys_init_module():系統(tǒng)調(diào)用init_module()在內(nèi)核的實(shí)現(xiàn)函數(shù)vsys_delete_module():系統(tǒng)調(diào)用delete_module()在內(nèi)核的實(shí)現(xiàn)函數(shù)vquery_module():查詢模塊名vrequest_module():主動(dòng)裝入內(nèi)核模
7、塊2.3 編譯時(shí)靜態(tài)加載v常用設(shè)備采用編譯時(shí)靜態(tài)加載方式在源碼目錄linux/drivers/下建立新目錄drivertest在linux/drivers/ drivertest/目錄下建立新的配置文件Kconfig和工程管理文件Makefile在linux/drivers/ drivertest/目錄下編寫設(shè)備驅(qū)動(dòng)程序源代碼driver_kernel.c在drivers/Kconfig文件中添加: source drivers/drivertest/Kconfig在kernel/drivers/Makefile文件中添加: obj-$(CONFIG_DRIVER_VMALLOC +=drivertest/執(zhí)行命令make menuconfig進(jìn)行選擇配置重新編譯內(nèi)核實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動(dòng)程序v預(yù)備知識(shí)vLinux設(shè)備分類vLinux設(shè)備文件vLinux設(shè)備驅(qū)動(dòng)v實(shí)驗(yàn)指導(dǎo)v設(shè)備驅(qū)動(dòng)函數(shù)v模塊方式動(dòng)態(tài)加載v編譯時(shí)靜態(tài)加載v實(shí)驗(yàn)?zāi)康摹?nèi)容3.1 實(shí)驗(yàn)?zāi)康膙了解Linux下設(shè)備驅(qū)動(dòng)程序的原理v學(xué)習(xí)Linux 2.6內(nèi)核下設(shè)備驅(qū)動(dòng)程序編寫方法v掌握用模塊方式設(shè)計(jì)和加載驅(qū)動(dòng)程序的方法v學(xué)會(huì)如何通過(guò)配置編譯內(nèi)核,將驅(qū)動(dòng)添加進(jìn)內(nèi)核3.2 實(shí)驗(yàn)內(nèi)容v增加設(shè)備驅(qū)動(dòng)
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術(shù)教育在雙減政策下的發(fā)展心得體會(huì)
- 小學(xué)五年級(jí)第一學(xué)期環(huán)境保護(hù)活動(dòng)計(jì)劃
- 公司對(duì)個(gè)人借款合同二零二五年
- 二零二五版?zhèn)€人融資擔(dān)保合同
- 二零二五運(yùn)營(yíng)總監(jiān)聘任合同
- 二零二五版入股公司協(xié)議書
- 二零二五版茶地租賃協(xié)議合同書
- 二零二五版危險(xiǎn)品駕駛員聘用合同書
- 機(jī)械制造行業(yè)質(zhì)量保障措施
- 二零二五版建設(shè)工程施工安全生產(chǎn)協(xié)議
- 中國(guó)藝術(shù)歌曲賞析及實(shí)踐知到課后答案智慧樹章節(jié)測(cè)試答案2025年春四川音樂(lè)學(xué)院
- 校園法制宣傳課件
- 2025中國(guó)信創(chuàng)服務(wù)器廠商研究報(bào)告-億歐智庫(kù)
- 2025年遼寧省盤錦市事業(yè)單位公開(kāi)招聘高校畢業(yè)生歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年浙江杭州建德市林業(yè)總場(chǎng)下屬林場(chǎng)招聘8人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 流行性感冒診療方案(2025年版)權(quán)威解讀
- 《水庫(kù)大壩安全監(jiān)測(cè)管理辦法》知識(shí)培訓(xùn)
- 裂隙等密度(玫瑰花圖)-簡(jiǎn)版
- 2025年河南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 2025年寧波職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2024版射箭館會(huì)員訓(xùn)練協(xié)議3篇
評(píng)論
0/150
提交評(píng)論