實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動程序.ppt_第1頁
實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動程序.ppt_第2頁
實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動程序.ppt_第3頁
實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動程序.ppt_第4頁
實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動程序.ppt_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)八增加新的設(shè)備驅(qū)動程序,實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動程序,預(yù)備知識 Linux設(shè)備分類 Linux設(shè)備文件 Linux設(shè)備驅(qū)動 實(shí)驗(yàn)指導(dǎo) 設(shè)備驅(qū)動函數(shù) 模塊方式動態(tài)加載 編譯時靜態(tài)加載 實(shí)驗(yàn)?zāi)康?、?nèi)容,1.1 Linux設(shè)備分類,字符設(shè)備 通過位于/dev目錄的文件系統(tǒng)結(jié)點(diǎn)來存取 映射為chrdevs向量表中的device_struct條目 大部分字符設(shè)備是數(shù)據(jù)通道,只能順序存取 直接對設(shè)備進(jìn)行讀寫操作 塊設(shè)備 通過/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ù) 網(wǎng)絡(luò)設(shè)備

2、類似于一個已掛載的塊設(shè)備 基于BSD Unix的Socket機(jī)制,1.2 Linux設(shè)備文件,把物理設(shè)備看成文件,將各種設(shè)備硬件的物理特性的細(xì)節(jié)屏蔽起來,實(shí)現(xiàn)用戶程序與設(shè)備的無關(guān)性 三類設(shè)備文件:字符設(shè)備文件(c)、塊設(shè)備文件(b)、網(wǎng)絡(luò)設(shè)備文件(s) 設(shè)備文件命名規(guī)則 第一部分:主設(shè)備號,2-3個字符,表示設(shè)備的種類(驅(qū)動) 第二部分:次設(shè)備號,字母或數(shù)字,用于區(qū)分同種設(shè)備中的單個設(shè)備 通過proc文件系統(tǒng)訪問相應(yīng)的驅(qū)動程序,1.3 Linux驅(qū)動程序,驅(qū)動程序加載方式 常見的驅(qū)動程序作為內(nèi)核模塊動態(tài)加載(如聲卡、網(wǎng)卡等) 最基礎(chǔ)的驅(qū)動程序編譯在內(nèi)核文件中(如CPU、PCI總線、VFS等)

3、驅(qū)動加載時的模塊命令 lsmod:列出當(dāng)前系統(tǒng)中已經(jīng)加載的內(nèi)核模塊 modinfo:查看模塊信息 modprobe:掛載新的內(nèi)核模塊,該模塊所依賴的模塊也被同時掛載 rmmod:刪除已掛載的模塊 insmod:插入模塊(功能沒有modprob強(qiáng)),實(shí)驗(yàn)八 增加新的設(shè)備驅(qū)動程序,預(yù)備知識 Linux設(shè)備分類 Linux設(shè)備文件 Linux設(shè)備驅(qū)動 實(shí)驗(yàn)指導(dǎo) 設(shè)備驅(qū)動函數(shù) 模塊方式動態(tài)加載 編譯時靜態(tài)加載 實(shí)驗(yàn)?zāi)康?、?nèi)容,2.1 設(shè)備驅(qū)動函數(shù),驅(qū)動程序與外界的接口 與操作系統(tǒng)內(nèi)核的接口:通過file_operation數(shù)據(jù)機(jī)構(gòu)完成 與系統(tǒng)引導(dǎo)的接口:利用驅(qū)動程序?qū)υO(shè)備進(jìn)行初始化 與設(shè)備的接口:描述

4、驅(qū)動程序如何與設(shè)備交互 設(shè)備驅(qū)動程序的代碼組成 驅(qū)動程序的注冊和注銷 設(shè)備的初始化:chr_dev_init()、blk_dev_init() 向內(nèi)核注冊:devfs_register_chrdev()、devfs_register_blkdev() 從內(nèi)核注銷:devfs_unregister_chrdev()、devfs_unregister_blkdev() 設(shè)備的打開和釋放:open()、release() 設(shè)備的讀寫 字符設(shè)備:read()、write() 塊設(shè)備:generic_file_read()、generic_file_write() 設(shè)備的控制:ioctl() 設(shè)備的中斷

5、和輪詢,2.2 模塊方式動態(tài)加載,內(nèi)核模塊(LKM, Loadable Kernel Modules) linux內(nèi)核是整體結(jié)構(gòu),向內(nèi)核添加或刪除某些功能十分困難 引入模塊機(jī)制 在內(nèi)核中動態(tài)添加或刪除模塊 將模塊從內(nèi)核中獨(dú)立出來,根據(jù)需要隨時裝入和卸載,使內(nèi)核大小和通信量達(dá)到最小 內(nèi)核模塊動態(tài)加載 用insmod命令將模塊手工插入到內(nèi)核 通過kerneld內(nèi)核守護(hù)進(jìn)程自動裝入所需模塊,2.2 動態(tài)加載操作命令,lsmod:列出已經(jīng)被內(nèi)核調(diào)入的模塊 insmod:將某個module插入到內(nèi)核中(加載指定的庫) modprob:將某個module加載到內(nèi)核中(加載之前分析庫之間的依賴關(guān)系) rmm

6、od:將某個module從內(nèi)核中卸載 depmod:生成依賴文件,告訴將來的insmod從哪兒調(diào)入模塊 kerneld:自動將模塊調(diào)入內(nèi)核和把模塊從內(nèi)核中卸載,2.2 動態(tài)加載實(shí)現(xiàn)機(jī)制,init_modules() :啟動時內(nèi)核模塊的初始化,求出內(nèi)核符號表中符號的個數(shù) sys_create_module():創(chuàng)建一個新模塊,即為新模塊分配空間,也是系統(tǒng)調(diào)用create_module()在內(nèi)核的實(shí)現(xiàn)函數(shù) sys_init_module():系統(tǒng)調(diào)用init_module()在內(nèi)核的實(shí)現(xiàn)函數(shù) sys_delete_module():系統(tǒng)調(diào)用delete_module()在內(nèi)核的實(shí)現(xiàn)函數(shù) query

7、_module():查詢模塊名 request_module():主動裝入內(nèi)核模塊,2.3 編譯時靜態(tài)加載,常用設(shè)備采用編譯時靜態(tài)加載方式 在源碼目錄linux/drivers/下建立新目錄drivertest 在linux/drivers/ drivertest/目錄下建立新的配置文件Kconfig和工程管理文件Makefile 在linux/drivers/ drivertest/目錄下編寫設(shè)備驅(qū)動程序源代碼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ū)動程序,預(yù)備知識 Linux設(shè)備分類 Linux設(shè)備文件 Linux設(shè)備驅(qū)動 實(shí)驗(yàn)指導(dǎo) 設(shè)備驅(qū)動函數(shù) 模塊方式動態(tài)加載 編譯時靜態(tài)加載 實(shí)驗(yàn)?zāi)康?、?nèi)容,3.1 實(shí)驗(yàn)?zāi)康?了解Linux下設(shè)備驅(qū)動程序的原理 學(xué)習(xí)Linux 2.6內(nèi)核下設(shè)備驅(qū)動程序編寫方法 掌握用模塊方式設(shè)計(jì)和加載驅(qū)動程序的方法 學(xué)會如何通過配置編譯內(nèi)核,將驅(qū)動添加進(jìn)內(nèi)核,3.2 實(shí)驗(yàn)內(nèi)容,增加設(shè)備驅(qū)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論